summaryrefslogtreecommitdiffstats
path: root/docs/sqlglot
diff options
context:
space:
mode:
Diffstat (limited to 'docs/sqlglot')
-rw-r--r--docs/sqlglot/_typing.html3
-rw-r--r--docs/sqlglot/_version.html8
-rw-r--r--docs/sqlglot/dataframe/sql.html40
-rw-r--r--docs/sqlglot/dialects/bigquery.html13
-rw-r--r--docs/sqlglot/dialects/clickhouse.html4150
-rw-r--r--docs/sqlglot/dialects/databricks.html3
-rw-r--r--docs/sqlglot/dialects/dialect.html2338
-rw-r--r--docs/sqlglot/dialects/doris.html3
-rw-r--r--docs/sqlglot/dialects/drill.html5
-rw-r--r--docs/sqlglot/dialects/duckdb.html1364
-rw-r--r--docs/sqlglot/dialects/hive.html7
-rw-r--r--docs/sqlglot/dialects/mysql.html19
-rw-r--r--docs/sqlglot/dialects/oracle.html7
-rw-r--r--docs/sqlglot/dialects/postgres.html2165
-rw-r--r--docs/sqlglot/dialects/presto.html1468
-rw-r--r--docs/sqlglot/dialects/redshift.html1355
-rw-r--r--docs/sqlglot/dialects/snowflake.html9
-rw-r--r--docs/sqlglot/dialects/spark.html3
-rw-r--r--docs/sqlglot/dialects/spark2.html3
-rw-r--r--docs/sqlglot/dialects/sqlite.html5
-rw-r--r--docs/sqlglot/dialects/starrocks.html3
-rw-r--r--docs/sqlglot/dialects/tableau.html1
-rw-r--r--docs/sqlglot/dialects/teradata.html9
-rw-r--r--docs/sqlglot/dialects/trino.html3
-rw-r--r--docs/sqlglot/dialects/tsql.html21
-rw-r--r--docs/sqlglot/executor/python.html7
-rw-r--r--docs/sqlglot/expressions.html110
-rw-r--r--docs/sqlglot/generator.html17219
-rw-r--r--docs/sqlglot/helper.html2
-rw-r--r--docs/sqlglot/jsonpath.html4
-rw-r--r--docs/sqlglot/optimizer/annotate_types.html1434
-rw-r--r--docs/sqlglot/optimizer/merge_subqueries.html2
-rw-r--r--docs/sqlglot/optimizer/simplify.html4
-rw-r--r--docs/sqlglot/parser.html12916
-rw-r--r--docs/sqlglot/schema.html2243
-rw-r--r--docs/sqlglot/time.html2
-rw-r--r--docs/sqlglot/tokens.html3454
37 files changed, 25385 insertions, 25017 deletions
diff --git a/docs/sqlglot/_typing.html b/docs/sqlglot/_typing.html
index 9cd32a9..610be71 100644
--- a/docs/sqlglot/_typing.html
+++ b/docs/sqlglot/_typing.html
@@ -68,7 +68,8 @@
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="n">A</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;A&quot;</span><span class="p">,</span> <span class="n">bound</span><span class="o">=</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="n">B</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;B&quot;</span><span class="p">,</span> <span class="n">bound</span><span class="o">=</span><span class="s2">&quot;sqlglot.exp.Binary&quot;</span><span class="p">)</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">E</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;E&quot;</span><span class="p">,</span> <span class="n">bound</span><span class="o">=</span><span class="s2">&quot;sqlglot.exp.Expression&quot;</span><span class="p">)</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">T</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;T&quot;</span><span class="p">)</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">F</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;F&quot;</span><span class="p">,</span> <span class="n">bound</span><span class="o">=</span><span class="s2">&quot;sqlglot.exp.Func&quot;</span><span class="p">)</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="n">T</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;T&quot;</span><span class="p">)</span>
</span></pre></div>
diff --git a/docs/sqlglot/_version.html b/docs/sqlglot/_version.html
index ebec144..8d508a0 100644
--- a/docs/sqlglot/_version.html
+++ b/docs/sqlglot/_version.html
@@ -76,8 +76,8 @@
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>
-</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">&#39;21.0.0&#39;</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">21</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">&#39;21.0.3.dev0&#39;</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">21</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;dev0&#39;</span><span class="p">)</span>
</span></pre></div>
@@ -97,7 +97,7 @@
<section id="version">
<div class="attr variable">
<span class="name">version</span><span class="annotation">: str</span> =
-<span class="default_value">&#39;21.0.0&#39;</span>
+<span class="default_value">&#39;21.0.3.dev0&#39;</span>
</div>
@@ -109,7 +109,7 @@
<section id="version_tuple">
<div class="attr variable">
<span class="name">version_tuple</span><span class="annotation">: object</span> =
-<span class="default_value">(21, 0, 0)</span>
+<span class="default_value">(21, 0, 3, &#39;dev0&#39;)</span>
</div>
diff --git a/docs/sqlglot/dataframe/sql.html b/docs/sqlglot/dataframe/sql.html
index 9234ce4..6ec8a6d 100644
--- a/docs/sqlglot/dataframe/sql.html
+++ b/docs/sqlglot/dataframe/sql.html
@@ -786,7 +786,7 @@
<div class="attr function">
<span class="def">def</span>
- <span class="name">createDataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">data</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688854402048&#39;</span><span class="o">&gt;</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688854402048&#39;</span><span class="o">&gt;</span><span class="p">],</span> <span class="n">Tuple</span><span class="p">]]</span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688855867008&#39;</span><span class="o">&gt;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">verifySchema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
+ <span class="name">createDataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">data</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763522736&#39;</span><span class="o">&gt;</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763522736&#39;</span><span class="o">&gt;</span><span class="p">],</span> <span class="n">Tuple</span><span class="p">]]</span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595765140864&#39;</span><span class="o">&gt;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">verifySchema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
<label class="view-source-button" for="SparkSession.createDataFrame-view-source"><span>View Source</span></label>
@@ -1844,7 +1844,7 @@
<input id="DataFrame.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
- <span class="name">DataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">spark</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688858878976&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Select">sqlglot.expressions.Select</a></span>,</span><span class="param"> <span class="n">branch_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">sequence_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">last_op</span><span class="p">:</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">dataframe</span><span class="o">.</span><span class="n">sql</span><span class="o">.</span><span class="n">operations</span><span class="o">.</span><span class="n">Operation</span> <span class="o">=</span> <span class="o">&lt;</span><span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688859097632&#39;</span><span class="o">&gt;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span>)</span>
+ <span class="name">DataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">spark</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595768209808&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Select">sqlglot.expressions.Select</a></span>,</span><span class="param"> <span class="n">branch_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">sequence_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">last_op</span><span class="p">:</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">dataframe</span><span class="o">.</span><span class="n">sql</span><span class="o">.</span><span class="n">operations</span><span class="o">.</span><span class="n">Operation</span> <span class="o">=</span> <span class="o">&lt;</span><span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595768526640&#39;</span><span class="o">&gt;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span>)</span>
<label class="view-source-button" for="DataFrame.__init__-view-source"><span>View Source</span></label>
@@ -2092,7 +2092,7 @@
<div class="attr function">
<span class="def">def</span>
- <span class="name">sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853981648&#39;</span><span class="o">&gt;</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">optimize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
+ <span class="name">sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763912496&#39;</span><span class="o">&gt;</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">optimize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="DataFrame.sql-view-source"><span>View Source</span></label>
@@ -2841,7 +2841,7 @@ is unlikely to come up.</p>
<div class="decorator">@operation(Operation.FROM)</div>
<span class="def">def</span>
- <span class="name">fillna</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688854309184&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
+ <span class="name">fillna</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595764027520&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
<label class="view-source-button" for="DataFrame.fillna-view-source"><span>View Source</span></label>
@@ -2910,7 +2910,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="decorator">@operation(Operation.FROM)</div>
<span class="def">def</span>
- <span class="name">replace</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">to_replace</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">]</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Collection</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688854920384&#39;</span><span class="o">&gt;</span><span class="p">],</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688854920384&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
+ <span class="name">replace</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">to_replace</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">]</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Collection</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595762701712&#39;</span><span class="o">&gt;</span><span class="p">],</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595762701712&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
<label class="view-source-button" for="DataFrame.replace-view-source"><span>View Source</span></label>
@@ -3115,7 +3115,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="decorator">@operation(Operation.NO_OP)</div>
<span class="def">def</span>
- <span class="name">repartition</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688854920384&#39;</span><span class="o">&gt;</span><span class="p">]</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688854920384&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
+ <span class="name">repartition</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595762701712&#39;</span><span class="o">&gt;</span><span class="p">]</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595762701712&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
<label class="view-source-button" for="DataFrame.repartition-view-source"><span>View Source</span></label>
@@ -3835,7 +3835,7 @@ and check if it matches the type of the value provided. If not then make it null
<input id="Column.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
- <span class="name">Column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span>)</span>
+ <span class="name">Column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span>)</span>
<label class="view-source-button" for="Column.__init__-view-source"><span>View Source</span></label>
@@ -3879,7 +3879,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="decorator">@classmethod</div>
<span class="def">def</span>
- <span class="name">ensure_col</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
+ <span class="name">ensure_col</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
<label class="view-source-button" for="Column.ensure_col-view-source"><span>View Source</span></label>
@@ -3900,7 +3900,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="decorator">@classmethod</div>
<span class="def">def</span>
- <span class="name">ensure_cols</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">args</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#Column">Column</a></span><span class="p">]</span>:</span></span>
+ <span class="name">ensure_cols</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">args</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#Column">Column</a></span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="Column.ensure_cols-view-source"><span>View Source</span></label>
@@ -3921,7 +3921,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="decorator">@classmethod</div>
<span class="def">def</span>
- <span class="name">invoke_anonymous_function</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">]</span>,</span><span class="param"> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
+ <span class="name">invoke_anonymous_function</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">]</span>,</span><span class="param"> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
<label class="view-source-button" for="Column.invoke_anonymous_function-view-source"><span>View Source</span></label>
@@ -3948,7 +3948,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="decorator">@classmethod</div>
<span class="def">def</span>
- <span class="name">invoke_expression_over_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">]</span>,</span><span class="param"> <span class="n">callable_expression</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
+ <span class="name">invoke_expression_over_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">]</span>,</span><span class="param"> <span class="n">callable_expression</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
<label class="view-source-button" for="Column.invoke_expression_over_column-view-source"><span>View Source</span></label>
@@ -3987,7 +3987,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="attr function">
<span class="def">def</span>
- <span class="name">binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
+ <span class="name">binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
<label class="view-source-button" for="Column.binary_op-view-source"><span>View Source</span></label>
@@ -4008,7 +4008,7 @@ and check if it matches the type of the value provided. If not then make it null
<div class="attr function">
<span class="def">def</span>
- <span class="name">inverse_binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
+ <span class="name">inverse_binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
<label class="view-source-button" for="Column.inverse_binary_op-view-source"><span>View Source</span></label>
@@ -4602,7 +4602,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">isin</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">):</span></span>
+ <span class="name">isin</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Column.isin-view-source"><span>View Source</span></label>
@@ -4623,7 +4623,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">between</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">lowerBound</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">upperBound</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688856903568&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
+ <span class="name">between</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">lowerBound</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">upperBound</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595766433424&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
<label class="view-source-button" for="Column.between-view-source"><span>View Source</span></label>
@@ -4658,7 +4658,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">over</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">window</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853198576&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
+ <span class="name">over</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">window</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595762334880&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
<label class="view-source-button" for="Column.over-view-source"><span>View Source</span></label>
@@ -4903,7 +4903,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
<div class="decorator">@classmethod</div>
<span class="def">def</span>
- <span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
+ <span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
<label class="view-source-button" for="Window.partitionBy-view-source"><span>View Source</span></label>
@@ -4924,7 +4924,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
<div class="decorator">@classmethod</div>
<span class="def">def</span>
- <span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
+ <span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
<label class="view-source-button" for="Window.orderBy-view-source"><span>View Source</span></label>
@@ -5166,7 +5166,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
+ <span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
<label class="view-source-button" for="WindowSpec.partitionBy-view-source"><span>View Source</span></label>
@@ -5193,7 +5193,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;139688853906400&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
+ <span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o">&lt;</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">&#39;140595763234272&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
<label class="view-source-button" for="WindowSpec.orderBy-view-source"><span>View Source</span></label>
diff --git a/docs/sqlglot/dialects/bigquery.html b/docs/sqlglot/dialects/bigquery.html
index cbc8c21..f4c6b2f 100644
--- a/docs/sqlglot/dialects/bigquery.html
+++ b/docs/sqlglot/dialects/bigquery.html
@@ -2582,6 +2582,8 @@ that it can analyze queries in the optimizer and successfully capture their sema
<dd id="BigQuery.Tokenizer.UNICODE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.UNICODE_STRINGS">UNICODE_STRINGS</a></dd>
<dd id="BigQuery.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="BigQuery.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="BigQuery.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="BigQuery.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="BigQuery.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="BigQuery.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="BigQuery.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -2900,7 +2902,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">NESTED_TYPE_TOKENS</span> =
<input id="BigQuery.Parser.NESTED_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;}</span>
</div>
@@ -2913,7 +2915,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ID_VAR_TOKENS</span> =
<input id="BigQuery.Parser.ID_VAR_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -2964,7 +2966,7 @@ Default: 3</li>
<div id="BigQuery.Parser.NULL_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">NULL_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;}</span>
</div>
@@ -3002,7 +3004,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="BigQuery.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -3801,7 +3803,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">RESERVED_KEYWORDS</span> =
<input id="BigQuery.Generator.RESERVED_KEYWORDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BigQuery.Generator.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&#39;lookup&#39;, &#39;no&#39;, &#39;and&#39;, &#39;or&#39;, &#39;asc&#39;, &#39;group&#39;, &#39;using&#39;, &#39;enum&#39;, &#39;full&#39;, &#39;groups&#39;, &#39;tablesample&#39;, &#39;current&#39;, &#39;into&#39;, &#39;order&#39;, &#39;array&#39;, &#39;right&#39;, &#39;partition&#39;, &#39;left&#39;, &#39;then&#39;, &#39;distinct&#39;, &#39;cast&#39;, &#39;range&#39;, &#39;some&#39;, &#39;else&#39;, &#39;collate&#39;, &#39;at&#39;, &#39;struct&#39;, &#39;lateral&#39;, &#39;cube&#39;, &#39;default&#39;, &#39;ignore&#39;, &#39;any&#39;, &#39;new&#39;, &#39;like&#39;, &#39;window&#39;, &#39;recursive&#39;, &#39;desc&#39;, &#39;assert_rows_modified&#39;, &#39;when&#39;, &#39;of&#39;, &#39;on&#39;, &#39;create&#39;, &#39;where&#39;, &#39;outer&#39;, &#39;over&#39;, &#39;preceding&#39;, &#39;contains&#39;, &#39;union&#39;, &#39;null&#39;, &#39;true&#39;, &#39;false&#39;, &#39;all&#39;, &#39;by&#39;, &#39;is&#39;, &#39;within&#39;, &#39;select&#39;, &#39;extract&#39;, &#39;not&#39;, &#39;limit&#39;, &#39;treat&#39;, &#39;escape&#39;, &#39;grouping&#39;, &#39;nulls&#39;, &#39;as&#39;, &#39;define&#39;, &#39;between&#39;, &#39;proto&#39;, &#39;inner&#39;, &#39;unnest&#39;, &#39;fetch&#39;, &#39;end&#39;, &#39;following&#39;, &#39;if&#39;, &#39;rows&#39;, &#39;rollup&#39;, &#39;for&#39;, &#39;natural&#39;, &#39;having&#39;, &#39;cross&#39;, &#39;intersect&#39;, &#39;respect&#39;, &#39;set&#39;, &#39;with&#39;, &#39;from&#39;, &#39;except&#39;, &#39;exclude&#39;, &#39;join&#39;, &#39;hash&#39;, &#39;in&#39;, &#39;case&#39;, &#39;exists&#39;, &#39;unbounded&#39;, &#39;to&#39;, &#39;merge&#39;, &#39;qualify&#39;, &#39;interval&#39;}</span>
+ <label class="view-value-button pdoc-button" for="BigQuery.Generator.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&#39;natural&#39;, &#39;groups&#39;, &#39;nulls&#39;, &#39;inner&#39;, &#39;false&#39;, &#39;merge&#39;, &#39;set&#39;, &#39;all&#39;, &#39;order&#39;, &#39;group&#39;, &#39;proto&#39;, &#39;end&#39;, &#39;lateral&#39;, &#39;lookup&#39;, &#39;like&#39;, &#39;range&#39;, &#39;join&#39;, &#39;not&#39;, &#39;else&#39;, &#39;collate&#39;, &#39;if&#39;, &#39;recursive&#39;, &#39;desc&#39;, &#39;select&#39;, &#39;for&#39;, &#39;intersect&#39;, &#39;contains&#39;, &#39;and&#39;, &#39;assert_rows_modified&#39;, &#39;is&#39;, &#39;enum&#39;, &#39;null&#39;, &#39;between&#39;, &#39;asc&#39;, &#39;unnest&#39;, &#39;when&#39;, &#39;window&#39;, &#39;exists&#39;, &#39;rollup&#39;, &#39;some&#39;, &#39;true&#39;, &#39;new&#39;, &#39;then&#39;, &#39;limit&#39;, &#39;rows&#39;, &#39;respect&#39;, &#39;cross&#39;, &#39;fetch&#39;, &#39;ignore&#39;, &#39;except&#39;, &#39;preceding&#39;, &#39;escape&#39;, &#39;extract&#39;, &#39;hash&#39;, &#39;treat&#39;, &#39;partition&#39;, &#39;cube&#39;, &#39;case&#39;, &#39;union&#39;, &#39;in&#39;, &#39;define&#39;, &#39;by&#39;, &#39;current&#39;, &#39;on&#39;, &#39;outer&#39;, &#39;tablesample&#39;, &#39;using&#39;, &#39;interval&#39;, &#39;array&#39;, &#39;exclude&#39;, &#39;distinct&#39;, &#39;any&#39;, &#39;at&#39;, &#39;grouping&#39;, &#39;within&#39;, &#39;having&#39;, &#39;right&#39;, &#39;default&#39;, &#39;qualify&#39;, &#39;full&#39;, &#39;as&#39;, &#39;following&#39;, &#39;left&#39;, &#39;to&#39;, &#39;or&#39;, &#39;struct&#39;, &#39;create&#39;, &#39;over&#39;, &#39;where&#39;, &#39;from&#39;, &#39;with&#39;, &#39;of&#39;, &#39;cast&#39;, &#39;unbounded&#39;, &#39;into&#39;, &#39;no&#39;}</span>
</div>
@@ -4223,6 +4225,7 @@ Default: True</li>
<dd id="BigQuery.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="BigQuery.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="BigQuery.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="BigQuery.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="BigQuery.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="BigQuery.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="BigQuery.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/clickhouse.html b/docs/sqlglot/dialects/clickhouse.html
index 8697b0a..7f048b2 100644
--- a/docs/sqlglot/dialects/clickhouse.html
+++ b/docs/sqlglot/dialects/clickhouse.html
@@ -160,6 +160,9 @@
<a class="variable" href="#ClickHouse.Generator.STRING_TYPE_MAPPING">STRING_TYPE_MAPPING</a>
</li>
<li>
+ <a class="variable" href="#ClickHouse.Generator.SUPPORTED_JSON_PATH_PARTS">SUPPORTED_JSON_PATH_PARTS</a>
+ </li>
+ <li>
<a class="variable" href="#ClickHouse.Generator.TYPE_MAPPING">TYPE_MAPPING</a>
</li>
<li>
@@ -327,704 +330,724 @@
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">arg_max_or_min_no_count</span><span class="p">,</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a> <span class="n">date_delta_sql</span><span class="p">,</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">var_map_sql</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="p">)</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">sqlglot.errors</span> <span class="kn">import</span> <span class="n">ParseError</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">parse_var_map</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">TokenType</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="k">def</span> <span class="nf">_lower_func</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">index</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">)</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="k">return</span> <span class="n">sql</span><span class="p">[:</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">+</span> <span class="n">sql</span><span class="p">[</span><span class="n">index</span><span class="p">:]</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="k">def</span> <span class="nf">_quantile_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">ClickHouse</span><span class="o">.</span><span class="n">Generator</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">Quantile</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">quantile</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;quantile&quot;</span><span class="p">]</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">quantile</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantiles&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">quantile</span><span class="p">)</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">quantile</span><span class="p">)</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="k">return</span> <span class="n">func</span> <span class="o">+</span> <span class="n">args</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">json_extract_segments</span><span class="p">,</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">json_path_key_only_name</span><span class="p">,</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">parse_json_extract_path</span><span class="p">,</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">var_map_sql</span><span class="p">,</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="p">)</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">sqlglot.errors</span> <span class="kn">import</span> <span class="n">ParseError</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">is_int</span><span class="p">,</span> <span class="n">seq_get</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">parse_var_map</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">TokenType</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="k">def</span> <span class="nf">_lower_func</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">index</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">)</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="k">return</span> <span class="n">sql</span><span class="p">[:</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">+</span> <span class="n">sql</span><span class="p">[</span><span class="n">index</span><span class="p">:]</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="k">def</span> <span class="nf">_quantile_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">ClickHouse</span><span class="o">.</span><span class="n">Generator</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">Quantile</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">quantile</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;quantile&quot;</span><span class="p">]</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">quantile</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantiles&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">quantile</span><span class="p">)</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;quantile&quot;</span><span class="p">,</span> <span class="n">quantile</span><span class="p">)</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="k">def</span> <span class="nf">_parse_count_if</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">:</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</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><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;countIf&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">parts</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">,</span> <span class="s2">&quot;If&quot;</span><span class="p">))</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">return</span> <span class="n">func</span> <span class="o">+</span> <span class="n">args</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="k">def</span> <span class="nf">_parse_count_if</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">:</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</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><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">ESCAPE_SEQUENCES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">0&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\0</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="p">}</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</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-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</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-57"><a href="#L-57"><span class="linenos"> 57</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="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="o">**</span><span class="n">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-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;ATTACH&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-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;DATE32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;FLOAT32&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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;IPV4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;IPV6&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;AGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;SIMPLEAGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="p">}</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</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">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="p">}</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">class</span> <span class="nc">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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="c1"># Tested in ClickHouse&#39;s playground, it seems that the following two queries do the same thing</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="c1"># * select x from t1 union all select x from t2 limit 1;</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="c1"># * select x from t1 union all (select x from t2 limit 1);</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">MODIFIERS_ATTACHED_TO_UNION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</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><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="s2">&quot;ARRAYSUM&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="s2">&quot;COUNTIF&quot;</span><span class="p">:</span> <span class="n">_parse_count_if</span><span class="p">,</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;DATE_ADD&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">DateAdd</span><span class="p">(</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="p">),</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="s2">&quot;DATEADD&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">DateAdd</span><span class="p">(</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;countIf&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">parts</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">,</span> <span class="s2">&quot;If&quot;</span><span class="p">))</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">ESCAPE_SEQUENCES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">0&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\0</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="p">}</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</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-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</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-60"><a href="#L-60"><span class="linenos"> 60</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="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="o">**</span><span class="n">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-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;ATTACH&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-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;DATE32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;FLOAT32&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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;IPV4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;IPV6&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;AGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;SIMPLEAGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="p">}</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</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">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="p">}</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 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-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="c1"># Tested in ClickHouse&#39;s playground, it seems that the following two queries do the same thing</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="c1"># * select x from t1 union all select x from t2 limit 1;</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="c1"># * select x from t1 union all (select x from t2 limit 1);</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">MODIFIERS_ATTACHED_TO_UNION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</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><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;ARRAYSUM&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="s2">&quot;COUNTIF&quot;</span><span class="p">:</span> <span class="n">_parse_count_if</span><span class="p">,</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="s2">&quot;DATE_ADD&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">DateAdd</span><span class="p">(</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="p">),</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="s2">&quot;DATE_DIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="s2">&quot;DATEADD&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">DateAdd</span><span class="p">(</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="p">),</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="s2">&quot;DATEDIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="s2">&quot;DATE_DIFF&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">DateDiff</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">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="p">),</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="s2">&quot;RANDCANONICAL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="s2">&quot;XOR&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">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="p">}</span>
-</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="n">AGG_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="s2">&quot;count&quot;</span><span class="p">,</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="s2">&quot;min&quot;</span><span class="p">,</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="s2">&quot;max&quot;</span><span class="p">,</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="s2">&quot;sum&quot;</span><span class="p">,</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="s2">&quot;avg&quot;</span><span class="p">,</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;stddevPop&quot;</span><span class="p">,</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="s2">&quot;stddevSamp&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;varPop&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;varSamp&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;corr&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;covarPop&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;covarSamp&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;entropy&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;exponentialMovingAverage&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;intervalLengthSum&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;kolmogorovSmirnovTest&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;mannWhitneyUTest&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;median&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;rankCorr&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;sumKahan&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;studentTTest&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;welchTTest&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;anyHeavy&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;anyLast&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;boundingRatio&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;first_value&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;last_value&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;argMin&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;argMax&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;avgWeighted&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;topK&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;topKWeighted&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;deltaSum&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;deltaSumTimestamp&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;groupArray&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;groupArrayLast&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;groupUniqArray&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;groupArrayInsertAt&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;groupArrayMovingAvg&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;groupArrayMovingSum&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;groupArraySample&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;groupBitAnd&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;groupBitOr&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;groupBitXor&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;groupBitmap&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;groupBitmapAnd&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;groupBitmapOr&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;groupBitmapXor&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;sumWithOverflow&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;sumMap&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;minMap&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;maxMap&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;skewSamp&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;skewPop&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;kurtSamp&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;kurtPop&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;uniq&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;uniqExact&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;uniqCombined&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;uniqCombined64&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;uniqHLL12&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;uniqTheta&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;quantile&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;quantiles&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;quantileExact&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;quantilesExact&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;quantileExactLow&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;quantilesExactLow&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;quantileExactHigh&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;quantilesExactHigh&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;quantileExactWeighted&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;quantilesExactWeighted&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;quantileTiming&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;quantilesTiming&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;quantileTimingWeighted&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;quantilesTimingWeighted&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;quantileDeterministic&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;quantilesDeterministic&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;quantileTDigest&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;quantilesTDigest&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;quantileTDigestWeighted&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;quantilesTDigestWeighted&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;quantileBFloat16&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;quantilesBFloat16&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;quantileBFloat16Weighted&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;quantilesBFloat16Weighted&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;simpleLinearRegression&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;stochasticLinearRegression&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;stochasticLogisticRegression&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;categoricalInformationValue&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;contingency&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;cramersV&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;cramersVBiasCorrected&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;theilsU&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;maxIntersections&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;maxIntersectionsPosition&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;meanZTest&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;quantileInterpolatedWeighted&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;quantilesInterpolatedWeighted&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;quantileGK&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;quantilesGK&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;sparkBar&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;sumCount&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;largestTriangleThreeBuckets&quot;</span><span class="p">,</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="p">}</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">AGG_FUNCTIONS_SUFFIXES</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;If&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;Array&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;ArrayIf&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;Map&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;SimpleState&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;State&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;Merge&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;MergeState&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;ForEach&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;Distinct&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;OrDefault&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;OrNull&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;Resample&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;ArgMin&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;ArgMax&quot;</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="p">]</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">AGG_FUNC_MAPPING</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="k">lambda</span> <span class="n">functions</span><span class="p">,</span> <span class="n">suffixes</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">f</span><span class="si">}{</span><span class="n">sfx</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">sfx</span><span class="p">)</span> <span class="k">for</span> <span class="n">sfx</span> <span class="ow">in</span> <span class="p">(</span><span class="n">suffixes</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">])</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">functions</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="p">}</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="p">)(</span><span class="n">AGG_FUNCTIONS</span><span class="p">,</span> <span class="n">AGG_FUNCTIONS_SUFFIXES</span><span class="p">)</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="s2">&quot;DATEDIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="p">),</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="s2">&quot;JSONEXTRACTSTRING&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span> <span class="n">zero_based_indexing</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="p">),</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="s2">&quot;RANDCANONICAL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="s2">&quot;XOR&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">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="p">}</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">AGG_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;count&quot;</span><span class="p">,</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="s2">&quot;min&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;max&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;sum&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;avg&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;any&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;stddevPop&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;stddevSamp&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;varPop&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;varSamp&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;corr&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;covarPop&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;covarSamp&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;entropy&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;exponentialMovingAverage&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;intervalLengthSum&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;kolmogorovSmirnovTest&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;mannWhitneyUTest&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;median&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;rankCorr&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;sumKahan&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;studentTTest&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;welchTTest&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;anyHeavy&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;anyLast&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;boundingRatio&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;first_value&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;last_value&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;argMin&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;argMax&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;avgWeighted&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;topK&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;topKWeighted&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;deltaSum&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;deltaSumTimestamp&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;groupArray&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;groupArrayLast&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;groupUniqArray&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;groupArrayInsertAt&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;groupArrayMovingAvg&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;groupArrayMovingSum&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;groupArraySample&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;groupBitAnd&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;groupBitOr&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;groupBitXor&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;groupBitmap&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;groupBitmapAnd&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;groupBitmapOr&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;groupBitmapXor&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;sumWithOverflow&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;sumMap&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;minMap&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;maxMap&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;skewSamp&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;skewPop&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;kurtSamp&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;kurtPop&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;uniq&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;uniqExact&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;uniqCombined&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;uniqCombined64&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;uniqHLL12&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;uniqTheta&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;quantile&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;quantiles&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;quantileExact&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;quantilesExact&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;quantileExactLow&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;quantilesExactLow&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;quantileExactHigh&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;quantilesExactHigh&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;quantileExactWeighted&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;quantilesExactWeighted&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;quantileTiming&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;quantilesTiming&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;quantileTimingWeighted&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;quantilesTimingWeighted&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;quantileDeterministic&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;quantilesDeterministic&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;quantileTDigest&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;quantilesTDigest&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;quantileTDigestWeighted&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;quantilesTDigestWeighted&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;quantileBFloat16&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;quantilesBFloat16&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;quantileBFloat16Weighted&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;quantilesBFloat16Weighted&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;simpleLinearRegression&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;stochasticLinearRegression&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;stochasticLogisticRegression&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;categoricalInformationValue&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;contingency&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;cramersV&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;cramersVBiasCorrected&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;theilsU&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;maxIntersections&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;maxIntersectionsPosition&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;meanZTest&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;quantileInterpolatedWeighted&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;quantilesInterpolatedWeighted&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;quantileGK&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;quantilesGK&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;sparkBar&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;sumCount&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;largestTriangleThreeBuckets&quot;</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="p">}</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">AGG_FUNCTIONS_SUFFIXES</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="s2">&quot;If&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;Array&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;ArrayIf&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;Map&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;SimpleState&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;State&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;Merge&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;MergeState&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;ForEach&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;Distinct&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;OrDefault&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;OrNull&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;Resample&quot;</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;ArgMin&quot;</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;ArgMax&quot;</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="p">]</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;ARRAYJOIN&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</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_expression</span><span class="p">()),</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;QUANTILE&quot;</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_quantile</span><span class="p">(),</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="p">}</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">AGG_FUNC_MAPPING</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="k">lambda</span> <span class="n">functions</span><span class="p">,</span> <span class="n">suffixes</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">f</span><span class="si">}{</span><span class="n">sfx</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">sfx</span><span class="p">)</span> <span class="k">for</span> <span class="n">sfx</span> <span class="ow">in</span> <span class="p">(</span><span class="n">suffixes</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">])</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">functions</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="p">}</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="p">)(</span><span class="n">AGG_FUNCTIONS</span><span class="p">,</span> <span class="n">AGG_FUNCTIONS_SUFFIXES</span><span class="p">)</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</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">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&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="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="p">}</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;ARRAYJOIN&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</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_expression</span><span class="p">()),</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;QUANTILE&quot;</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_quantile</span><span class="p">(),</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="p">}</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">COLUMN_OPERATORS</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">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</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">JOIN_KINDS</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <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="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="p">}</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">COLUMN_OPERATORS</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">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</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">JOIN_KINDS</span><span class="p">,</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="p">}</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</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_conjunction</span><span class="p">),</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="p">),</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="p">}</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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-313"><a href="#L-313"><span class="linenos">313</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_conjunction</span><span class="p">()</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</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">PLACEHOLDER</span><span class="p">):</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">true</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-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">false</span><span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="p">)</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">return</span> <span class="n">this</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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-326"><a href="#L-326"><span class="linenos">326</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">this</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><span id="L-334"><a href="#L-334"><span class="linenos">334</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">COLON</span><span class="p">)</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">kind</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 class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="p">)</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</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">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="p">}</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</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_conjunction</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 class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="p">}</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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-319"><a href="#L-319"><span class="linenos">319</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_conjunction</span><span class="p">()</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="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">PLACEHOLDER</span><span class="p">):</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">true</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-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">false</span><span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="p">)</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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-332"><a href="#L-332"><span class="linenos">332</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</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;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">):</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</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;Expecting }&quot;</span><span class="p">)</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</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">Placeholder</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">return</span> <span class="n">this</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</span><span class="p">(</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <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><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-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">return</span> <span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">scalar</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="p">)</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</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="p">,</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">is_global</span> <span class="o">=</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">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</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">COLON</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="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</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="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</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;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">):</span>
+</span><span id="L-348"><a href="#L-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;Expecting }&quot;</span><span class="p">)</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</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">Placeholder</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</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">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <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><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</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><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">return</span> <span class="n">this</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">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-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">return</span> <span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">scalar</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="p">)</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</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="k">return</span> <span class="p">(</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">is_global</span><span class="p">,</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</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="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="p">)</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">is_global</span> <span class="o">=</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">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</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">Join</span><span class="p">]:</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">join</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</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-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="p">)</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGG_FUNC_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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">CombinedParameterizedAgg</span><span class="p">,</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="p">)</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</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-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="p">)</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">:</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">,</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="p">)</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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">AnonymousAggFunc</span><span class="p">,</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="p">)</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</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">t</span><span class="o">.</span><span class="n">List</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-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">return</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_lambda</span><span class="p">)</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">is_global</span><span class="p">,</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="p">)</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</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">Join</span><span class="p">]:</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</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">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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 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-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGG_FUNC_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</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-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedParameterizedAgg</span><span class="p">,</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <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><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="p">)</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">:</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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">CombinedAggFunc</span><span class="p">,</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="p">)</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</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-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnonymousAggFunc</span><span class="p">,</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="p">)</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">params</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_lambda</span><span class="p">)</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="n">params</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</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">Quantile</span><span class="p">:</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</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">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</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">Quantile</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">quantile</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="mf">0.5</span><span class="p">))</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</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-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="p">)</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</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-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</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;CLUSTER&quot;</span><span class="p">):</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="n">this</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><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</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">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">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-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="n">TABLESAMPLE_REQUIRES_PARENS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">TABLESAMPLE_KEYWORDS</span> <span class="o">=</span> <span class="s2">&quot;SAMPLE&quot;</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="p">}</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</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><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE32</span><span class="p">:</span> <span class="s2">&quot;Date32&quot;</span><span class="p">,</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV4</span><span class="p">:</span> <span class="s2">&quot;IPv4&quot;</span><span class="p">,</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV6</span><span class="p">:</span> <span class="s2">&quot;IPv6&quot;</span><span class="p">,</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;AggregateFunction&quot;</span><span class="p">,</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;SimpleAggregateFunction&quot;</span><span class="p">,</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="p">}</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a>
-</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos">563</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><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arraySum&quot;</span><span class="p">),</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMax&quot;</span><span class="p">),</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMin&quot;</span><span class="p">),</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;countIf&quot;</span><span class="p">),</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="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;CURRENT_DATE&quot;</span><span class="p">),</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">),</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">),</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arrayJoin&quot;</span><span class="p">),</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;isNaN&quot;</span><span class="p">),</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;nullIf&quot;</span><span class="p">),</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;randCanonical&quot;</span><span class="p">),</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">]),</span>
-</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;startsWith&quot;</span><span class="p">),</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</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;xor&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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="p">}</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a>
-</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-594"><a href="#L-594"><span class="linenos">594</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><span id="L-595"><a href="#L-595"><span class="linenos">595</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-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="p">}</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a>
-</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a>
-</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
-</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
-</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
-</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="p">}</span>
-</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a>
-</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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-619"><a href="#L-619"><span class="linenos">619</span></a>
-</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a> <span class="k">def</span> <span class="nf">_any_to_has</span><span class="p">(</span>
-</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">],</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
-</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
-</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
-</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="k">return</span> <span class="n">default</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="n">prefix</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;has&quot;</span><span class="p">,</span> <span class="n">arr</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a>
-</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a>
-</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
-</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a>
-</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a>
-</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
-</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="c1">#</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
-</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a>
-</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a>
-</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
-</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a>
-</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a>
-</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="p">(</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="p">),</span>
-</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="p">(</span>
-</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
-</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="p">),</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a> <span class="p">]</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a>
-</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos">681</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</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">t</span><span class="o">.</span><span class="n">List</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-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="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_lambda</span><span class="p">)</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">params</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_lambda</span><span class="p">)</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="n">params</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="k">return</span> <span class="kc">None</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</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">Quantile</span><span class="p">:</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</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">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</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">Quantile</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">quantile</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="mf">0.5</span><span class="p">))</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</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-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_on_property</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-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</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;CLUSTER&quot;</span><span class="p">):</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="n">this</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><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</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">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</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-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="n">TABLESAMPLE_REQUIRES_PARENS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="n">TABLESAMPLE_KEYWORDS</span> <span class="o">=</span> <span class="s2">&quot;SAMPLE&quot;</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="p">}</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="p">}</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</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><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE32</span><span class="p">:</span> <span class="s2">&quot;Date32&quot;</span><span class="p">,</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
+</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
+</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV4</span><span class="p">:</span> <span class="s2">&quot;IPv4&quot;</span><span class="p">,</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV6</span><span class="p">:</span> <span class="s2">&quot;IPv6&quot;</span><span class="p">,</span>
+</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;AggregateFunction&quot;</span><span class="p">,</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;SimpleAggregateFunction&quot;</span><span class="p">,</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="p">}</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a>
+</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos">575</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><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arraySum&quot;</span><span class="p">),</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMax&quot;</span><span class="p">),</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMin&quot;</span><span class="p">),</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
+</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;countIf&quot;</span><span class="p">),</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="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;CURRENT_DATE&quot;</span><span class="p">),</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">),</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">),</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arrayJoin&quot;</span><span class="p">),</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;isNaN&quot;</span><span class="p">),</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSONExtractString&quot;</span><span class="p">,</span> <span class="n">quoted_index</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSONExtractString&quot;</span><span class="p">,</span> <span class="n">quoted_index</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">:</span> <span class="n">json_path_key_only_name</span><span class="p">,</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;nullIf&quot;</span><span class="p">),</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;randCanonical&quot;</span><span class="p">),</span>
+</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">]),</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;startsWith&quot;</span><span class="p">),</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</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;xor&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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="p">}</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a>
+</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-610"><a href="#L-610"><span class="linenos">610</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><span id="L-611"><a href="#L-611"><span class="linenos">611</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-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="p">}</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a>
+</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a>
+</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
+</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
+</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
+</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
+</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
+</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a> <span class="p">}</span>
+</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a>
+</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="k">def</span> <span class="nf">_jsonpathsubscript_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">JSONPathSubscript</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a>
+</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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-639"><a href="#L-639"><span class="linenos">639</span></a>
+</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a> <span class="k">def</span> <span class="nf">_any_to_has</span><span class="p">(</span>
+</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">],</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
+</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
+</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a> <span class="k">return</span> <span class="n">default</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a> <span class="k">return</span> <span class="n">prefix</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;has&quot;</span><span class="p">,</span> <span class="n">arr</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a>
+</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a>
+</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
+</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a>
+</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
+</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a>
+</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a> <span class="c1">#</span>
+</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a>
+</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a>
+</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a>
-</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-684"><a href="#L-684"><span class="linenos">684</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a>
-</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a>
-</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a>
-</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a>
-</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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-697"><a href="#L-697"><span class="linenos">697</span></a>
-</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a> <span class="p">)</span>
-</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a>
-</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a>
+</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="p">(</span>
+</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a> <span class="p">),</span>
+</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="p">(</span>
+</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a> <span class="p">),</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a> <span class="p">]</span>
+</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a>
+</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-701"><a href="#L-701"><span class="linenos">701</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a>
+</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-704"><a href="#L-704"><span class="linenos">704</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a>
+</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a>
+</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a>
+</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a>
+</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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-717"><a href="#L-717"><span class="linenos">717</span></a>
+</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a> <span class="p">)</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a>
+</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -1040,670 +1063,687 @@
</div>
<a class="headerlink" href="#ClickHouse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse-46"><a href="#ClickHouse-46"><span class="linenos"> 46</span></a><span class="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="ClickHouse-47"><a href="#ClickHouse-47"><span class="linenos"> 47</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-48"><a href="#ClickHouse-48"><span class="linenos"> 48</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="ClickHouse-49"><a href="#ClickHouse-49"><span class="linenos"> 49</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-50"><a href="#ClickHouse-50"><span class="linenos"> 50</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse-51"><a href="#ClickHouse-51"><span class="linenos"> 51</span></a>
-</span><span id="ClickHouse-52"><a href="#ClickHouse-52"><span class="linenos"> 52</span></a> <span class="n">ESCAPE_SEQUENCES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-53"><a href="#ClickHouse-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">0&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\0</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-54"><a href="#ClickHouse-54"><span class="linenos"> 54</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-55"><a href="#ClickHouse-55"><span class="linenos"> 55</span></a>
-</span><span id="ClickHouse-56"><a href="#ClickHouse-56"><span class="linenos"> 56</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="ClickHouse-57"><a href="#ClickHouse-57"><span class="linenos"> 57</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</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="ClickHouse-58"><a href="#ClickHouse-58"><span class="linenos"> 58</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="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse-59"><a href="#ClickHouse-59"><span class="linenos"> 59</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse-60"><a href="#ClickHouse-60"><span class="linenos"> 60</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse-61"><a href="#ClickHouse-61"><span class="linenos"> 61</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse-62"><a href="#ClickHouse-62"><span class="linenos"> 62</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse-63"><a href="#ClickHouse-63"><span class="linenos"> 63</span></a>
-</span><span id="ClickHouse-64"><a href="#ClickHouse-64"><span class="linenos"> 64</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-65"><a href="#ClickHouse-65"><span class="linenos"> 65</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="ClickHouse-66"><a href="#ClickHouse-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;ATTACH&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="ClickHouse-67"><a href="#ClickHouse-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;DATE32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
-</span><span id="ClickHouse-68"><a href="#ClickHouse-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="ClickHouse-69"><a href="#ClickHouse-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
-</span><span id="ClickHouse-70"><a href="#ClickHouse-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="ClickHouse-71"><a href="#ClickHouse-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
-</span><span id="ClickHouse-72"><a href="#ClickHouse-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
-</span><span id="ClickHouse-73"><a href="#ClickHouse-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="ClickHouse-74"><a href="#ClickHouse-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
-</span><span id="ClickHouse-75"><a href="#ClickHouse-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;FLOAT32&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="ClickHouse-76"><a href="#ClickHouse-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="ClickHouse-77"><a href="#ClickHouse-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
-</span><span id="ClickHouse-78"><a href="#ClickHouse-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="ClickHouse-79"><a href="#ClickHouse-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
-</span><span id="ClickHouse-80"><a href="#ClickHouse-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="ClickHouse-81"><a href="#ClickHouse-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
-</span><span id="ClickHouse-82"><a href="#ClickHouse-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
-</span><span id="ClickHouse-83"><a href="#ClickHouse-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="ClickHouse-84"><a href="#ClickHouse-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="ClickHouse-85"><a href="#ClickHouse-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="ClickHouse-86"><a href="#ClickHouse-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="ClickHouse-87"><a href="#ClickHouse-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="ClickHouse-88"><a href="#ClickHouse-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="ClickHouse-89"><a href="#ClickHouse-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="ClickHouse-90"><a href="#ClickHouse-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;IPV4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
-</span><span id="ClickHouse-91"><a href="#ClickHouse-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;IPV6&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
-</span><span id="ClickHouse-92"><a href="#ClickHouse-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;AGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
-</span><span id="ClickHouse-93"><a href="#ClickHouse-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;SIMPLEAGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
-</span><span id="ClickHouse-94"><a href="#ClickHouse-94"><span class="linenos"> 94</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-95"><a href="#ClickHouse-95"><span class="linenos"> 95</span></a>
-</span><span id="ClickHouse-96"><a href="#ClickHouse-96"><span class="linenos"> 96</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-97"><a href="#ClickHouse-97"><span class="linenos"> 97</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">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="ClickHouse-98"><a href="#ClickHouse-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
-</span><span id="ClickHouse-99"><a href="#ClickHouse-99"><span class="linenos"> 99</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-100"><a href="#ClickHouse-100"><span class="linenos">100</span></a>
-</span><span id="ClickHouse-101"><a href="#ClickHouse-101"><span class="linenos">101</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="ClickHouse-102"><a href="#ClickHouse-102"><span class="linenos">102</span></a> <span class="c1"># Tested in ClickHouse&#39;s playground, it seems that the following two queries do the same thing</span>
-</span><span id="ClickHouse-103"><a href="#ClickHouse-103"><span class="linenos">103</span></a> <span class="c1"># * select x from t1 union all select x from t2 limit 1;</span>
-</span><span id="ClickHouse-104"><a href="#ClickHouse-104"><span class="linenos">104</span></a> <span class="c1"># * select x from t1 union all (select x from t2 limit 1);</span>
-</span><span id="ClickHouse-105"><a href="#ClickHouse-105"><span class="linenos">105</span></a> <span class="n">MODIFIERS_ATTACHED_TO_UNION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-106"><a href="#ClickHouse-106"><span class="linenos">106</span></a>
-</span><span id="ClickHouse-107"><a href="#ClickHouse-107"><span class="linenos">107</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-108"><a href="#ClickHouse-108"><span class="linenos">108</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><span id="ClickHouse-109"><a href="#ClickHouse-109"><span class="linenos">109</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-110"><a href="#ClickHouse-110"><span class="linenos">110</span></a> <span class="s2">&quot;ARRAYSUM&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-111"><a href="#ClickHouse-111"><span class="linenos">111</span></a> <span class="s2">&quot;COUNTIF&quot;</span><span class="p">:</span> <span class="n">_parse_count_if</span><span class="p">,</span>
-</span><span id="ClickHouse-112"><a href="#ClickHouse-112"><span class="linenos">112</span></a> <span class="s2">&quot;DATE_ADD&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">DateAdd</span><span class="p">(</span>
-</span><span id="ClickHouse-113"><a href="#ClickHouse-113"><span class="linenos">113</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse-114"><a href="#ClickHouse-114"><span class="linenos">114</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-115"><a href="#ClickHouse-115"><span class="linenos">115</span></a> <span class="s2">&quot;DATEADD&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">DateAdd</span><span class="p">(</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse-49"><a href="#ClickHouse-49"><span class="linenos"> 49</span></a><span class="k">class</span> <span class="nc">ClickHouse</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="ClickHouse-50"><a href="#ClickHouse-50"><span class="linenos"> 50</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-51"><a href="#ClickHouse-51"><span class="linenos"> 51</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="ClickHouse-52"><a href="#ClickHouse-52"><span class="linenos"> 52</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-53"><a href="#ClickHouse-53"><span class="linenos"> 53</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse-54"><a href="#ClickHouse-54"><span class="linenos"> 54</span></a>
+</span><span id="ClickHouse-55"><a href="#ClickHouse-55"><span class="linenos"> 55</span></a> <span class="n">ESCAPE_SEQUENCES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-56"><a href="#ClickHouse-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">0&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\0</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-57"><a href="#ClickHouse-57"><span class="linenos"> 57</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-58"><a href="#ClickHouse-58"><span class="linenos"> 58</span></a>
+</span><span id="ClickHouse-59"><a href="#ClickHouse-59"><span class="linenos"> 59</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="ClickHouse-60"><a href="#ClickHouse-60"><span class="linenos"> 60</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</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="ClickHouse-61"><a href="#ClickHouse-61"><span class="linenos"> 61</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="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse-62"><a href="#ClickHouse-62"><span class="linenos"> 62</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse-63"><a href="#ClickHouse-63"><span class="linenos"> 63</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse-64"><a href="#ClickHouse-64"><span class="linenos"> 64</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse-65"><a href="#ClickHouse-65"><span class="linenos"> 65</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse-66"><a href="#ClickHouse-66"><span class="linenos"> 66</span></a>
+</span><span id="ClickHouse-67"><a href="#ClickHouse-67"><span class="linenos"> 67</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-68"><a href="#ClickHouse-68"><span class="linenos"> 68</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="ClickHouse-69"><a href="#ClickHouse-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;ATTACH&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="ClickHouse-70"><a href="#ClickHouse-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;DATE32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
+</span><span id="ClickHouse-71"><a href="#ClickHouse-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="ClickHouse-72"><a href="#ClickHouse-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
+</span><span id="ClickHouse-73"><a href="#ClickHouse-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="ClickHouse-74"><a href="#ClickHouse-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="ClickHouse-75"><a href="#ClickHouse-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
+</span><span id="ClickHouse-76"><a href="#ClickHouse-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="ClickHouse-77"><a href="#ClickHouse-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="ClickHouse-78"><a href="#ClickHouse-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;FLOAT32&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="ClickHouse-79"><a href="#ClickHouse-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="ClickHouse-80"><a href="#ClickHouse-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
+</span><span id="ClickHouse-81"><a href="#ClickHouse-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="ClickHouse-82"><a href="#ClickHouse-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="ClickHouse-83"><a href="#ClickHouse-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="ClickHouse-84"><a href="#ClickHouse-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="ClickHouse-85"><a href="#ClickHouse-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
+</span><span id="ClickHouse-86"><a href="#ClickHouse-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="ClickHouse-87"><a href="#ClickHouse-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
+</span><span id="ClickHouse-88"><a href="#ClickHouse-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="ClickHouse-89"><a href="#ClickHouse-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
+</span><span id="ClickHouse-90"><a href="#ClickHouse-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="ClickHouse-91"><a href="#ClickHouse-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="ClickHouse-92"><a href="#ClickHouse-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="ClickHouse-93"><a href="#ClickHouse-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;IPV4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
+</span><span id="ClickHouse-94"><a href="#ClickHouse-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;IPV6&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
+</span><span id="ClickHouse-95"><a href="#ClickHouse-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;AGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
+</span><span id="ClickHouse-96"><a href="#ClickHouse-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;SIMPLEAGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
+</span><span id="ClickHouse-97"><a href="#ClickHouse-97"><span class="linenos"> 97</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-98"><a href="#ClickHouse-98"><span class="linenos"> 98</span></a>
+</span><span id="ClickHouse-99"><a href="#ClickHouse-99"><span class="linenos"> 99</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-100"><a href="#ClickHouse-100"><span class="linenos">100</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">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="ClickHouse-101"><a href="#ClickHouse-101"><span class="linenos">101</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
+</span><span id="ClickHouse-102"><a href="#ClickHouse-102"><span class="linenos">102</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-103"><a href="#ClickHouse-103"><span class="linenos">103</span></a>
+</span><span id="ClickHouse-104"><a href="#ClickHouse-104"><span class="linenos">104</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="ClickHouse-105"><a href="#ClickHouse-105"><span class="linenos">105</span></a> <span class="c1"># Tested in ClickHouse&#39;s playground, it seems that the following two queries do the same thing</span>
+</span><span id="ClickHouse-106"><a href="#ClickHouse-106"><span class="linenos">106</span></a> <span class="c1"># * select x from t1 union all select x from t2 limit 1;</span>
+</span><span id="ClickHouse-107"><a href="#ClickHouse-107"><span class="linenos">107</span></a> <span class="c1"># * select x from t1 union all (select x from t2 limit 1);</span>
+</span><span id="ClickHouse-108"><a href="#ClickHouse-108"><span class="linenos">108</span></a> <span class="n">MODIFIERS_ATTACHED_TO_UNION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-109"><a href="#ClickHouse-109"><span class="linenos">109</span></a>
+</span><span id="ClickHouse-110"><a href="#ClickHouse-110"><span class="linenos">110</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-111"><a href="#ClickHouse-111"><span class="linenos">111</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><span id="ClickHouse-112"><a href="#ClickHouse-112"><span class="linenos">112</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-113"><a href="#ClickHouse-113"><span class="linenos">113</span></a> <span class="s2">&quot;ARRAYSUM&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-114"><a href="#ClickHouse-114"><span class="linenos">114</span></a> <span class="s2">&quot;COUNTIF&quot;</span><span class="p">:</span> <span class="n">_parse_count_if</span><span class="p">,</span>
+</span><span id="ClickHouse-115"><a href="#ClickHouse-115"><span class="linenos">115</span></a> <span class="s2">&quot;DATE_ADD&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">DateAdd</span><span class="p">(</span>
</span><span id="ClickHouse-116"><a href="#ClickHouse-116"><span class="linenos">116</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse-117"><a href="#ClickHouse-117"><span class="linenos">117</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-118"><a href="#ClickHouse-118"><span class="linenos">118</span></a> <span class="s2">&quot;DATE_DIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse-118"><a href="#ClickHouse-118"><span class="linenos">118</span></a> <span class="s2">&quot;DATEADD&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">DateAdd</span><span class="p">(</span>
</span><span id="ClickHouse-119"><a href="#ClickHouse-119"><span class="linenos">119</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse-120"><a href="#ClickHouse-120"><span class="linenos">120</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-121"><a href="#ClickHouse-121"><span class="linenos">121</span></a> <span class="s2">&quot;DATEDIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse-121"><a href="#ClickHouse-121"><span class="linenos">121</span></a> <span class="s2">&quot;DATE_DIFF&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">DateDiff</span><span class="p">(</span>
</span><span id="ClickHouse-122"><a href="#ClickHouse-122"><span class="linenos">122</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse-123"><a href="#ClickHouse-123"><span class="linenos">123</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-124"><a href="#ClickHouse-124"><span class="linenos">124</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
-</span><span id="ClickHouse-125"><a href="#ClickHouse-125"><span class="linenos">125</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-126"><a href="#ClickHouse-126"><span class="linenos">126</span></a> <span class="s2">&quot;RANDCANONICAL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-127"><a href="#ClickHouse-127"><span class="linenos">127</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse-128"><a href="#ClickHouse-128"><span class="linenos">128</span></a> <span class="s2">&quot;XOR&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">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
-</span><span id="ClickHouse-129"><a href="#ClickHouse-129"><span class="linenos">129</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-130"><a href="#ClickHouse-130"><span class="linenos">130</span></a>
-</span><span id="ClickHouse-131"><a href="#ClickHouse-131"><span class="linenos">131</span></a> <span class="n">AGG_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-132"><a href="#ClickHouse-132"><span class="linenos">132</span></a> <span class="s2">&quot;count&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-133"><a href="#ClickHouse-133"><span class="linenos">133</span></a> <span class="s2">&quot;min&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-134"><a href="#ClickHouse-134"><span class="linenos">134</span></a> <span class="s2">&quot;max&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-135"><a href="#ClickHouse-135"><span class="linenos">135</span></a> <span class="s2">&quot;sum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-136"><a href="#ClickHouse-136"><span class="linenos">136</span></a> <span class="s2">&quot;avg&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-137"><a href="#ClickHouse-137"><span class="linenos">137</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-138"><a href="#ClickHouse-138"><span class="linenos">138</span></a> <span class="s2">&quot;stddevPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-139"><a href="#ClickHouse-139"><span class="linenos">139</span></a> <span class="s2">&quot;stddevSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-140"><a href="#ClickHouse-140"><span class="linenos">140</span></a> <span class="s2">&quot;varPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-141"><a href="#ClickHouse-141"><span class="linenos">141</span></a> <span class="s2">&quot;varSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-142"><a href="#ClickHouse-142"><span class="linenos">142</span></a> <span class="s2">&quot;corr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-143"><a href="#ClickHouse-143"><span class="linenos">143</span></a> <span class="s2">&quot;covarPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-144"><a href="#ClickHouse-144"><span class="linenos">144</span></a> <span class="s2">&quot;covarSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-145"><a href="#ClickHouse-145"><span class="linenos">145</span></a> <span class="s2">&quot;entropy&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-146"><a href="#ClickHouse-146"><span class="linenos">146</span></a> <span class="s2">&quot;exponentialMovingAverage&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-147"><a href="#ClickHouse-147"><span class="linenos">147</span></a> <span class="s2">&quot;intervalLengthSum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-148"><a href="#ClickHouse-148"><span class="linenos">148</span></a> <span class="s2">&quot;kolmogorovSmirnovTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-149"><a href="#ClickHouse-149"><span class="linenos">149</span></a> <span class="s2">&quot;mannWhitneyUTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-150"><a href="#ClickHouse-150"><span class="linenos">150</span></a> <span class="s2">&quot;median&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-151"><a href="#ClickHouse-151"><span class="linenos">151</span></a> <span class="s2">&quot;rankCorr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-152"><a href="#ClickHouse-152"><span class="linenos">152</span></a> <span class="s2">&quot;sumKahan&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-153"><a href="#ClickHouse-153"><span class="linenos">153</span></a> <span class="s2">&quot;studentTTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-154"><a href="#ClickHouse-154"><span class="linenos">154</span></a> <span class="s2">&quot;welchTTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-155"><a href="#ClickHouse-155"><span class="linenos">155</span></a> <span class="s2">&quot;anyHeavy&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-156"><a href="#ClickHouse-156"><span class="linenos">156</span></a> <span class="s2">&quot;anyLast&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-157"><a href="#ClickHouse-157"><span class="linenos">157</span></a> <span class="s2">&quot;boundingRatio&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-158"><a href="#ClickHouse-158"><span class="linenos">158</span></a> <span class="s2">&quot;first_value&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-159"><a href="#ClickHouse-159"><span class="linenos">159</span></a> <span class="s2">&quot;last_value&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-160"><a href="#ClickHouse-160"><span class="linenos">160</span></a> <span class="s2">&quot;argMin&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-161"><a href="#ClickHouse-161"><span class="linenos">161</span></a> <span class="s2">&quot;argMax&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-162"><a href="#ClickHouse-162"><span class="linenos">162</span></a> <span class="s2">&quot;avgWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-163"><a href="#ClickHouse-163"><span class="linenos">163</span></a> <span class="s2">&quot;topK&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-164"><a href="#ClickHouse-164"><span class="linenos">164</span></a> <span class="s2">&quot;topKWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-165"><a href="#ClickHouse-165"><span class="linenos">165</span></a> <span class="s2">&quot;deltaSum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-166"><a href="#ClickHouse-166"><span class="linenos">166</span></a> <span class="s2">&quot;deltaSumTimestamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-167"><a href="#ClickHouse-167"><span class="linenos">167</span></a> <span class="s2">&quot;groupArray&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-168"><a href="#ClickHouse-168"><span class="linenos">168</span></a> <span class="s2">&quot;groupArrayLast&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-169"><a href="#ClickHouse-169"><span class="linenos">169</span></a> <span class="s2">&quot;groupUniqArray&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-170"><a href="#ClickHouse-170"><span class="linenos">170</span></a> <span class="s2">&quot;groupArrayInsertAt&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-171"><a href="#ClickHouse-171"><span class="linenos">171</span></a> <span class="s2">&quot;groupArrayMovingAvg&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-172"><a href="#ClickHouse-172"><span class="linenos">172</span></a> <span class="s2">&quot;groupArrayMovingSum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-173"><a href="#ClickHouse-173"><span class="linenos">173</span></a> <span class="s2">&quot;groupArraySample&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-174"><a href="#ClickHouse-174"><span class="linenos">174</span></a> <span class="s2">&quot;groupBitAnd&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-175"><a href="#ClickHouse-175"><span class="linenos">175</span></a> <span class="s2">&quot;groupBitOr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-176"><a href="#ClickHouse-176"><span class="linenos">176</span></a> <span class="s2">&quot;groupBitXor&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-177"><a href="#ClickHouse-177"><span class="linenos">177</span></a> <span class="s2">&quot;groupBitmap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-178"><a href="#ClickHouse-178"><span class="linenos">178</span></a> <span class="s2">&quot;groupBitmapAnd&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-179"><a href="#ClickHouse-179"><span class="linenos">179</span></a> <span class="s2">&quot;groupBitmapOr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-180"><a href="#ClickHouse-180"><span class="linenos">180</span></a> <span class="s2">&quot;groupBitmapXor&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-181"><a href="#ClickHouse-181"><span class="linenos">181</span></a> <span class="s2">&quot;sumWithOverflow&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-182"><a href="#ClickHouse-182"><span class="linenos">182</span></a> <span class="s2">&quot;sumMap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-183"><a href="#ClickHouse-183"><span class="linenos">183</span></a> <span class="s2">&quot;minMap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-184"><a href="#ClickHouse-184"><span class="linenos">184</span></a> <span class="s2">&quot;maxMap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-185"><a href="#ClickHouse-185"><span class="linenos">185</span></a> <span class="s2">&quot;skewSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-186"><a href="#ClickHouse-186"><span class="linenos">186</span></a> <span class="s2">&quot;skewPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-187"><a href="#ClickHouse-187"><span class="linenos">187</span></a> <span class="s2">&quot;kurtSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-188"><a href="#ClickHouse-188"><span class="linenos">188</span></a> <span class="s2">&quot;kurtPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-189"><a href="#ClickHouse-189"><span class="linenos">189</span></a> <span class="s2">&quot;uniq&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-190"><a href="#ClickHouse-190"><span class="linenos">190</span></a> <span class="s2">&quot;uniqExact&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-191"><a href="#ClickHouse-191"><span class="linenos">191</span></a> <span class="s2">&quot;uniqCombined&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-192"><a href="#ClickHouse-192"><span class="linenos">192</span></a> <span class="s2">&quot;uniqCombined64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-193"><a href="#ClickHouse-193"><span class="linenos">193</span></a> <span class="s2">&quot;uniqHLL12&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-194"><a href="#ClickHouse-194"><span class="linenos">194</span></a> <span class="s2">&quot;uniqTheta&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-195"><a href="#ClickHouse-195"><span class="linenos">195</span></a> <span class="s2">&quot;quantile&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-196"><a href="#ClickHouse-196"><span class="linenos">196</span></a> <span class="s2">&quot;quantiles&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-197"><a href="#ClickHouse-197"><span class="linenos">197</span></a> <span class="s2">&quot;quantileExact&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-198"><a href="#ClickHouse-198"><span class="linenos">198</span></a> <span class="s2">&quot;quantilesExact&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-199"><a href="#ClickHouse-199"><span class="linenos">199</span></a> <span class="s2">&quot;quantileExactLow&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-200"><a href="#ClickHouse-200"><span class="linenos">200</span></a> <span class="s2">&quot;quantilesExactLow&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-201"><a href="#ClickHouse-201"><span class="linenos">201</span></a> <span class="s2">&quot;quantileExactHigh&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-202"><a href="#ClickHouse-202"><span class="linenos">202</span></a> <span class="s2">&quot;quantilesExactHigh&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-203"><a href="#ClickHouse-203"><span class="linenos">203</span></a> <span class="s2">&quot;quantileExactWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-204"><a href="#ClickHouse-204"><span class="linenos">204</span></a> <span class="s2">&quot;quantilesExactWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-205"><a href="#ClickHouse-205"><span class="linenos">205</span></a> <span class="s2">&quot;quantileTiming&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-206"><a href="#ClickHouse-206"><span class="linenos">206</span></a> <span class="s2">&quot;quantilesTiming&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-207"><a href="#ClickHouse-207"><span class="linenos">207</span></a> <span class="s2">&quot;quantileTimingWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-208"><a href="#ClickHouse-208"><span class="linenos">208</span></a> <span class="s2">&quot;quantilesTimingWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-209"><a href="#ClickHouse-209"><span class="linenos">209</span></a> <span class="s2">&quot;quantileDeterministic&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-210"><a href="#ClickHouse-210"><span class="linenos">210</span></a> <span class="s2">&quot;quantilesDeterministic&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-211"><a href="#ClickHouse-211"><span class="linenos">211</span></a> <span class="s2">&quot;quantileTDigest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-212"><a href="#ClickHouse-212"><span class="linenos">212</span></a> <span class="s2">&quot;quantilesTDigest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-213"><a href="#ClickHouse-213"><span class="linenos">213</span></a> <span class="s2">&quot;quantileTDigestWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-214"><a href="#ClickHouse-214"><span class="linenos">214</span></a> <span class="s2">&quot;quantilesTDigestWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-215"><a href="#ClickHouse-215"><span class="linenos">215</span></a> <span class="s2">&quot;quantileBFloat16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-216"><a href="#ClickHouse-216"><span class="linenos">216</span></a> <span class="s2">&quot;quantilesBFloat16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-217"><a href="#ClickHouse-217"><span class="linenos">217</span></a> <span class="s2">&quot;quantileBFloat16Weighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-218"><a href="#ClickHouse-218"><span class="linenos">218</span></a> <span class="s2">&quot;quantilesBFloat16Weighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-219"><a href="#ClickHouse-219"><span class="linenos">219</span></a> <span class="s2">&quot;simpleLinearRegression&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-220"><a href="#ClickHouse-220"><span class="linenos">220</span></a> <span class="s2">&quot;stochasticLinearRegression&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-221"><a href="#ClickHouse-221"><span class="linenos">221</span></a> <span class="s2">&quot;stochasticLogisticRegression&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-222"><a href="#ClickHouse-222"><span class="linenos">222</span></a> <span class="s2">&quot;categoricalInformationValue&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-223"><a href="#ClickHouse-223"><span class="linenos">223</span></a> <span class="s2">&quot;contingency&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-224"><a href="#ClickHouse-224"><span class="linenos">224</span></a> <span class="s2">&quot;cramersV&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-225"><a href="#ClickHouse-225"><span class="linenos">225</span></a> <span class="s2">&quot;cramersVBiasCorrected&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-226"><a href="#ClickHouse-226"><span class="linenos">226</span></a> <span class="s2">&quot;theilsU&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-227"><a href="#ClickHouse-227"><span class="linenos">227</span></a> <span class="s2">&quot;maxIntersections&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-228"><a href="#ClickHouse-228"><span class="linenos">228</span></a> <span class="s2">&quot;maxIntersectionsPosition&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-229"><a href="#ClickHouse-229"><span class="linenos">229</span></a> <span class="s2">&quot;meanZTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-230"><a href="#ClickHouse-230"><span class="linenos">230</span></a> <span class="s2">&quot;quantileInterpolatedWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-231"><a href="#ClickHouse-231"><span class="linenos">231</span></a> <span class="s2">&quot;quantilesInterpolatedWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-232"><a href="#ClickHouse-232"><span class="linenos">232</span></a> <span class="s2">&quot;quantileGK&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-233"><a href="#ClickHouse-233"><span class="linenos">233</span></a> <span class="s2">&quot;quantilesGK&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-234"><a href="#ClickHouse-234"><span class="linenos">234</span></a> <span class="s2">&quot;sparkBar&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-235"><a href="#ClickHouse-235"><span class="linenos">235</span></a> <span class="s2">&quot;sumCount&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-236"><a href="#ClickHouse-236"><span class="linenos">236</span></a> <span class="s2">&quot;largestTriangleThreeBuckets&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-237"><a href="#ClickHouse-237"><span class="linenos">237</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-238"><a href="#ClickHouse-238"><span class="linenos">238</span></a>
-</span><span id="ClickHouse-239"><a href="#ClickHouse-239"><span class="linenos">239</span></a> <span class="n">AGG_FUNCTIONS_SUFFIXES</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="ClickHouse-240"><a href="#ClickHouse-240"><span class="linenos">240</span></a> <span class="s2">&quot;If&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-241"><a href="#ClickHouse-241"><span class="linenos">241</span></a> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-242"><a href="#ClickHouse-242"><span class="linenos">242</span></a> <span class="s2">&quot;ArrayIf&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-243"><a href="#ClickHouse-243"><span class="linenos">243</span></a> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-244"><a href="#ClickHouse-244"><span class="linenos">244</span></a> <span class="s2">&quot;SimpleState&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-245"><a href="#ClickHouse-245"><span class="linenos">245</span></a> <span class="s2">&quot;State&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-246"><a href="#ClickHouse-246"><span class="linenos">246</span></a> <span class="s2">&quot;Merge&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-247"><a href="#ClickHouse-247"><span class="linenos">247</span></a> <span class="s2">&quot;MergeState&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-248"><a href="#ClickHouse-248"><span class="linenos">248</span></a> <span class="s2">&quot;ForEach&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-249"><a href="#ClickHouse-249"><span class="linenos">249</span></a> <span class="s2">&quot;Distinct&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-250"><a href="#ClickHouse-250"><span class="linenos">250</span></a> <span class="s2">&quot;OrDefault&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-251"><a href="#ClickHouse-251"><span class="linenos">251</span></a> <span class="s2">&quot;OrNull&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-252"><a href="#ClickHouse-252"><span class="linenos">252</span></a> <span class="s2">&quot;Resample&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-253"><a href="#ClickHouse-253"><span class="linenos">253</span></a> <span class="s2">&quot;ArgMin&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-254"><a href="#ClickHouse-254"><span class="linenos">254</span></a> <span class="s2">&quot;ArgMax&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-255"><a href="#ClickHouse-255"><span class="linenos">255</span></a> <span class="p">]</span>
-</span><span id="ClickHouse-256"><a href="#ClickHouse-256"><span class="linenos">256</span></a>
-</span><span id="ClickHouse-257"><a href="#ClickHouse-257"><span class="linenos">257</span></a> <span class="n">AGG_FUNC_MAPPING</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="ClickHouse-258"><a href="#ClickHouse-258"><span class="linenos">258</span></a> <span class="k">lambda</span> <span class="n">functions</span><span class="p">,</span> <span class="n">suffixes</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="ClickHouse-259"><a href="#ClickHouse-259"><span class="linenos">259</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">f</span><span class="si">}{</span><span class="n">sfx</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">sfx</span><span class="p">)</span> <span class="k">for</span> <span class="n">sfx</span> <span class="ow">in</span> <span class="p">(</span><span class="n">suffixes</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">])</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">functions</span>
-</span><span id="ClickHouse-260"><a href="#ClickHouse-260"><span class="linenos">260</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-261"><a href="#ClickHouse-261"><span class="linenos">261</span></a> <span class="p">)(</span><span class="n">AGG_FUNCTIONS</span><span class="p">,</span> <span class="n">AGG_FUNCTIONS_SUFFIXES</span><span class="p">)</span>
+</span><span id="ClickHouse-124"><a href="#ClickHouse-124"><span class="linenos">124</span></a> <span class="s2">&quot;DATEDIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse-125"><a href="#ClickHouse-125"><span class="linenos">125</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse-126"><a href="#ClickHouse-126"><span class="linenos">126</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-127"><a href="#ClickHouse-127"><span class="linenos">127</span></a> <span class="s2">&quot;JSONEXTRACTSTRING&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span>
+</span><span id="ClickHouse-128"><a href="#ClickHouse-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span> <span class="n">zero_based_indexing</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="ClickHouse-129"><a href="#ClickHouse-129"><span class="linenos">129</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-130"><a href="#ClickHouse-130"><span class="linenos">130</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
+</span><span id="ClickHouse-131"><a href="#ClickHouse-131"><span class="linenos">131</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-132"><a href="#ClickHouse-132"><span class="linenos">132</span></a> <span class="s2">&quot;RANDCANONICAL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-133"><a href="#ClickHouse-133"><span class="linenos">133</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse-134"><a href="#ClickHouse-134"><span class="linenos">134</span></a> <span class="s2">&quot;XOR&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">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
+</span><span id="ClickHouse-135"><a href="#ClickHouse-135"><span class="linenos">135</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-136"><a href="#ClickHouse-136"><span class="linenos">136</span></a>
+</span><span id="ClickHouse-137"><a href="#ClickHouse-137"><span class="linenos">137</span></a> <span class="n">AGG_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-138"><a href="#ClickHouse-138"><span class="linenos">138</span></a> <span class="s2">&quot;count&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-139"><a href="#ClickHouse-139"><span class="linenos">139</span></a> <span class="s2">&quot;min&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-140"><a href="#ClickHouse-140"><span class="linenos">140</span></a> <span class="s2">&quot;max&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-141"><a href="#ClickHouse-141"><span class="linenos">141</span></a> <span class="s2">&quot;sum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-142"><a href="#ClickHouse-142"><span class="linenos">142</span></a> <span class="s2">&quot;avg&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-143"><a href="#ClickHouse-143"><span class="linenos">143</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-144"><a href="#ClickHouse-144"><span class="linenos">144</span></a> <span class="s2">&quot;stddevPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-145"><a href="#ClickHouse-145"><span class="linenos">145</span></a> <span class="s2">&quot;stddevSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-146"><a href="#ClickHouse-146"><span class="linenos">146</span></a> <span class="s2">&quot;varPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-147"><a href="#ClickHouse-147"><span class="linenos">147</span></a> <span class="s2">&quot;varSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-148"><a href="#ClickHouse-148"><span class="linenos">148</span></a> <span class="s2">&quot;corr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-149"><a href="#ClickHouse-149"><span class="linenos">149</span></a> <span class="s2">&quot;covarPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-150"><a href="#ClickHouse-150"><span class="linenos">150</span></a> <span class="s2">&quot;covarSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-151"><a href="#ClickHouse-151"><span class="linenos">151</span></a> <span class="s2">&quot;entropy&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-152"><a href="#ClickHouse-152"><span class="linenos">152</span></a> <span class="s2">&quot;exponentialMovingAverage&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-153"><a href="#ClickHouse-153"><span class="linenos">153</span></a> <span class="s2">&quot;intervalLengthSum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-154"><a href="#ClickHouse-154"><span class="linenos">154</span></a> <span class="s2">&quot;kolmogorovSmirnovTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-155"><a href="#ClickHouse-155"><span class="linenos">155</span></a> <span class="s2">&quot;mannWhitneyUTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-156"><a href="#ClickHouse-156"><span class="linenos">156</span></a> <span class="s2">&quot;median&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-157"><a href="#ClickHouse-157"><span class="linenos">157</span></a> <span class="s2">&quot;rankCorr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-158"><a href="#ClickHouse-158"><span class="linenos">158</span></a> <span class="s2">&quot;sumKahan&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-159"><a href="#ClickHouse-159"><span class="linenos">159</span></a> <span class="s2">&quot;studentTTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-160"><a href="#ClickHouse-160"><span class="linenos">160</span></a> <span class="s2">&quot;welchTTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-161"><a href="#ClickHouse-161"><span class="linenos">161</span></a> <span class="s2">&quot;anyHeavy&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-162"><a href="#ClickHouse-162"><span class="linenos">162</span></a> <span class="s2">&quot;anyLast&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-163"><a href="#ClickHouse-163"><span class="linenos">163</span></a> <span class="s2">&quot;boundingRatio&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-164"><a href="#ClickHouse-164"><span class="linenos">164</span></a> <span class="s2">&quot;first_value&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-165"><a href="#ClickHouse-165"><span class="linenos">165</span></a> <span class="s2">&quot;last_value&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-166"><a href="#ClickHouse-166"><span class="linenos">166</span></a> <span class="s2">&quot;argMin&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-167"><a href="#ClickHouse-167"><span class="linenos">167</span></a> <span class="s2">&quot;argMax&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-168"><a href="#ClickHouse-168"><span class="linenos">168</span></a> <span class="s2">&quot;avgWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-169"><a href="#ClickHouse-169"><span class="linenos">169</span></a> <span class="s2">&quot;topK&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-170"><a href="#ClickHouse-170"><span class="linenos">170</span></a> <span class="s2">&quot;topKWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-171"><a href="#ClickHouse-171"><span class="linenos">171</span></a> <span class="s2">&quot;deltaSum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-172"><a href="#ClickHouse-172"><span class="linenos">172</span></a> <span class="s2">&quot;deltaSumTimestamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-173"><a href="#ClickHouse-173"><span class="linenos">173</span></a> <span class="s2">&quot;groupArray&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-174"><a href="#ClickHouse-174"><span class="linenos">174</span></a> <span class="s2">&quot;groupArrayLast&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-175"><a href="#ClickHouse-175"><span class="linenos">175</span></a> <span class="s2">&quot;groupUniqArray&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-176"><a href="#ClickHouse-176"><span class="linenos">176</span></a> <span class="s2">&quot;groupArrayInsertAt&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-177"><a href="#ClickHouse-177"><span class="linenos">177</span></a> <span class="s2">&quot;groupArrayMovingAvg&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-178"><a href="#ClickHouse-178"><span class="linenos">178</span></a> <span class="s2">&quot;groupArrayMovingSum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-179"><a href="#ClickHouse-179"><span class="linenos">179</span></a> <span class="s2">&quot;groupArraySample&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-180"><a href="#ClickHouse-180"><span class="linenos">180</span></a> <span class="s2">&quot;groupBitAnd&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-181"><a href="#ClickHouse-181"><span class="linenos">181</span></a> <span class="s2">&quot;groupBitOr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-182"><a href="#ClickHouse-182"><span class="linenos">182</span></a> <span class="s2">&quot;groupBitXor&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-183"><a href="#ClickHouse-183"><span class="linenos">183</span></a> <span class="s2">&quot;groupBitmap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-184"><a href="#ClickHouse-184"><span class="linenos">184</span></a> <span class="s2">&quot;groupBitmapAnd&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-185"><a href="#ClickHouse-185"><span class="linenos">185</span></a> <span class="s2">&quot;groupBitmapOr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-186"><a href="#ClickHouse-186"><span class="linenos">186</span></a> <span class="s2">&quot;groupBitmapXor&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-187"><a href="#ClickHouse-187"><span class="linenos">187</span></a> <span class="s2">&quot;sumWithOverflow&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-188"><a href="#ClickHouse-188"><span class="linenos">188</span></a> <span class="s2">&quot;sumMap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-189"><a href="#ClickHouse-189"><span class="linenos">189</span></a> <span class="s2">&quot;minMap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-190"><a href="#ClickHouse-190"><span class="linenos">190</span></a> <span class="s2">&quot;maxMap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-191"><a href="#ClickHouse-191"><span class="linenos">191</span></a> <span class="s2">&quot;skewSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-192"><a href="#ClickHouse-192"><span class="linenos">192</span></a> <span class="s2">&quot;skewPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-193"><a href="#ClickHouse-193"><span class="linenos">193</span></a> <span class="s2">&quot;kurtSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-194"><a href="#ClickHouse-194"><span class="linenos">194</span></a> <span class="s2">&quot;kurtPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-195"><a href="#ClickHouse-195"><span class="linenos">195</span></a> <span class="s2">&quot;uniq&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-196"><a href="#ClickHouse-196"><span class="linenos">196</span></a> <span class="s2">&quot;uniqExact&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-197"><a href="#ClickHouse-197"><span class="linenos">197</span></a> <span class="s2">&quot;uniqCombined&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-198"><a href="#ClickHouse-198"><span class="linenos">198</span></a> <span class="s2">&quot;uniqCombined64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-199"><a href="#ClickHouse-199"><span class="linenos">199</span></a> <span class="s2">&quot;uniqHLL12&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-200"><a href="#ClickHouse-200"><span class="linenos">200</span></a> <span class="s2">&quot;uniqTheta&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-201"><a href="#ClickHouse-201"><span class="linenos">201</span></a> <span class="s2">&quot;quantile&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-202"><a href="#ClickHouse-202"><span class="linenos">202</span></a> <span class="s2">&quot;quantiles&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-203"><a href="#ClickHouse-203"><span class="linenos">203</span></a> <span class="s2">&quot;quantileExact&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-204"><a href="#ClickHouse-204"><span class="linenos">204</span></a> <span class="s2">&quot;quantilesExact&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-205"><a href="#ClickHouse-205"><span class="linenos">205</span></a> <span class="s2">&quot;quantileExactLow&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-206"><a href="#ClickHouse-206"><span class="linenos">206</span></a> <span class="s2">&quot;quantilesExactLow&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-207"><a href="#ClickHouse-207"><span class="linenos">207</span></a> <span class="s2">&quot;quantileExactHigh&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-208"><a href="#ClickHouse-208"><span class="linenos">208</span></a> <span class="s2">&quot;quantilesExactHigh&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-209"><a href="#ClickHouse-209"><span class="linenos">209</span></a> <span class="s2">&quot;quantileExactWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-210"><a href="#ClickHouse-210"><span class="linenos">210</span></a> <span class="s2">&quot;quantilesExactWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-211"><a href="#ClickHouse-211"><span class="linenos">211</span></a> <span class="s2">&quot;quantileTiming&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-212"><a href="#ClickHouse-212"><span class="linenos">212</span></a> <span class="s2">&quot;quantilesTiming&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-213"><a href="#ClickHouse-213"><span class="linenos">213</span></a> <span class="s2">&quot;quantileTimingWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-214"><a href="#ClickHouse-214"><span class="linenos">214</span></a> <span class="s2">&quot;quantilesTimingWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-215"><a href="#ClickHouse-215"><span class="linenos">215</span></a> <span class="s2">&quot;quantileDeterministic&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-216"><a href="#ClickHouse-216"><span class="linenos">216</span></a> <span class="s2">&quot;quantilesDeterministic&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-217"><a href="#ClickHouse-217"><span class="linenos">217</span></a> <span class="s2">&quot;quantileTDigest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-218"><a href="#ClickHouse-218"><span class="linenos">218</span></a> <span class="s2">&quot;quantilesTDigest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-219"><a href="#ClickHouse-219"><span class="linenos">219</span></a> <span class="s2">&quot;quantileTDigestWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-220"><a href="#ClickHouse-220"><span class="linenos">220</span></a> <span class="s2">&quot;quantilesTDigestWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-221"><a href="#ClickHouse-221"><span class="linenos">221</span></a> <span class="s2">&quot;quantileBFloat16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-222"><a href="#ClickHouse-222"><span class="linenos">222</span></a> <span class="s2">&quot;quantilesBFloat16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-223"><a href="#ClickHouse-223"><span class="linenos">223</span></a> <span class="s2">&quot;quantileBFloat16Weighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-224"><a href="#ClickHouse-224"><span class="linenos">224</span></a> <span class="s2">&quot;quantilesBFloat16Weighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-225"><a href="#ClickHouse-225"><span class="linenos">225</span></a> <span class="s2">&quot;simpleLinearRegression&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-226"><a href="#ClickHouse-226"><span class="linenos">226</span></a> <span class="s2">&quot;stochasticLinearRegression&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-227"><a href="#ClickHouse-227"><span class="linenos">227</span></a> <span class="s2">&quot;stochasticLogisticRegression&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-228"><a href="#ClickHouse-228"><span class="linenos">228</span></a> <span class="s2">&quot;categoricalInformationValue&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-229"><a href="#ClickHouse-229"><span class="linenos">229</span></a> <span class="s2">&quot;contingency&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-230"><a href="#ClickHouse-230"><span class="linenos">230</span></a> <span class="s2">&quot;cramersV&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-231"><a href="#ClickHouse-231"><span class="linenos">231</span></a> <span class="s2">&quot;cramersVBiasCorrected&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-232"><a href="#ClickHouse-232"><span class="linenos">232</span></a> <span class="s2">&quot;theilsU&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-233"><a href="#ClickHouse-233"><span class="linenos">233</span></a> <span class="s2">&quot;maxIntersections&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-234"><a href="#ClickHouse-234"><span class="linenos">234</span></a> <span class="s2">&quot;maxIntersectionsPosition&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-235"><a href="#ClickHouse-235"><span class="linenos">235</span></a> <span class="s2">&quot;meanZTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-236"><a href="#ClickHouse-236"><span class="linenos">236</span></a> <span class="s2">&quot;quantileInterpolatedWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-237"><a href="#ClickHouse-237"><span class="linenos">237</span></a> <span class="s2">&quot;quantilesInterpolatedWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-238"><a href="#ClickHouse-238"><span class="linenos">238</span></a> <span class="s2">&quot;quantileGK&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-239"><a href="#ClickHouse-239"><span class="linenos">239</span></a> <span class="s2">&quot;quantilesGK&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-240"><a href="#ClickHouse-240"><span class="linenos">240</span></a> <span class="s2">&quot;sparkBar&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-241"><a href="#ClickHouse-241"><span class="linenos">241</span></a> <span class="s2">&quot;sumCount&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-242"><a href="#ClickHouse-242"><span class="linenos">242</span></a> <span class="s2">&quot;largestTriangleThreeBuckets&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-243"><a href="#ClickHouse-243"><span class="linenos">243</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-244"><a href="#ClickHouse-244"><span class="linenos">244</span></a>
+</span><span id="ClickHouse-245"><a href="#ClickHouse-245"><span class="linenos">245</span></a> <span class="n">AGG_FUNCTIONS_SUFFIXES</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="ClickHouse-246"><a href="#ClickHouse-246"><span class="linenos">246</span></a> <span class="s2">&quot;If&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-247"><a href="#ClickHouse-247"><span class="linenos">247</span></a> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-248"><a href="#ClickHouse-248"><span class="linenos">248</span></a> <span class="s2">&quot;ArrayIf&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-249"><a href="#ClickHouse-249"><span class="linenos">249</span></a> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-250"><a href="#ClickHouse-250"><span class="linenos">250</span></a> <span class="s2">&quot;SimpleState&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-251"><a href="#ClickHouse-251"><span class="linenos">251</span></a> <span class="s2">&quot;State&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-252"><a href="#ClickHouse-252"><span class="linenos">252</span></a> <span class="s2">&quot;Merge&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-253"><a href="#ClickHouse-253"><span class="linenos">253</span></a> <span class="s2">&quot;MergeState&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-254"><a href="#ClickHouse-254"><span class="linenos">254</span></a> <span class="s2">&quot;ForEach&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-255"><a href="#ClickHouse-255"><span class="linenos">255</span></a> <span class="s2">&quot;Distinct&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-256"><a href="#ClickHouse-256"><span class="linenos">256</span></a> <span class="s2">&quot;OrDefault&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-257"><a href="#ClickHouse-257"><span class="linenos">257</span></a> <span class="s2">&quot;OrNull&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-258"><a href="#ClickHouse-258"><span class="linenos">258</span></a> <span class="s2">&quot;Resample&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-259"><a href="#ClickHouse-259"><span class="linenos">259</span></a> <span class="s2">&quot;ArgMin&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-260"><a href="#ClickHouse-260"><span class="linenos">260</span></a> <span class="s2">&quot;ArgMax&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-261"><a href="#ClickHouse-261"><span class="linenos">261</span></a> <span class="p">]</span>
</span><span id="ClickHouse-262"><a href="#ClickHouse-262"><span class="linenos">262</span></a>
-</span><span id="ClickHouse-263"><a href="#ClickHouse-263"><span class="linenos">263</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
-</span><span id="ClickHouse-264"><a href="#ClickHouse-264"><span class="linenos">264</span></a>
-</span><span id="ClickHouse-265"><a href="#ClickHouse-265"><span class="linenos">265</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-266"><a href="#ClickHouse-266"><span class="linenos">266</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse-267"><a href="#ClickHouse-267"><span class="linenos">267</span></a> <span class="s2">&quot;ARRAYJOIN&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</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_expression</span><span class="p">()),</span>
-</span><span id="ClickHouse-268"><a href="#ClickHouse-268"><span class="linenos">268</span></a> <span class="s2">&quot;QUANTILE&quot;</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_quantile</span><span class="p">(),</span>
-</span><span id="ClickHouse-269"><a href="#ClickHouse-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-263"><a href="#ClickHouse-263"><span class="linenos">263</span></a> <span class="n">AGG_FUNC_MAPPING</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="ClickHouse-264"><a href="#ClickHouse-264"><span class="linenos">264</span></a> <span class="k">lambda</span> <span class="n">functions</span><span class="p">,</span> <span class="n">suffixes</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="ClickHouse-265"><a href="#ClickHouse-265"><span class="linenos">265</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">f</span><span class="si">}{</span><span class="n">sfx</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">sfx</span><span class="p">)</span> <span class="k">for</span> <span class="n">sfx</span> <span class="ow">in</span> <span class="p">(</span><span class="n">suffixes</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">])</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">functions</span>
+</span><span id="ClickHouse-266"><a href="#ClickHouse-266"><span class="linenos">266</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-267"><a href="#ClickHouse-267"><span class="linenos">267</span></a> <span class="p">)(</span><span class="n">AGG_FUNCTIONS</span><span class="p">,</span> <span class="n">AGG_FUNCTIONS_SUFFIXES</span><span class="p">)</span>
+</span><span id="ClickHouse-268"><a href="#ClickHouse-268"><span class="linenos">268</span></a>
+</span><span id="ClickHouse-269"><a href="#ClickHouse-269"><span class="linenos">269</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
</span><span id="ClickHouse-270"><a href="#ClickHouse-270"><span class="linenos">270</span></a>
-</span><span id="ClickHouse-271"><a href="#ClickHouse-271"><span class="linenos">271</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-272"><a href="#ClickHouse-272"><span class="linenos">272</span></a>
-</span><span id="ClickHouse-273"><a href="#ClickHouse-273"><span class="linenos">273</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse-274"><a href="#ClickHouse-274"><span class="linenos">274</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-275"><a href="#ClickHouse-275"><span class="linenos">275</span></a>
-</span><span id="ClickHouse-276"><a href="#ClickHouse-276"><span class="linenos">276</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-277"><a href="#ClickHouse-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">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse-278"><a href="#ClickHouse-278"><span class="linenos">278</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
-</span><span id="ClickHouse-279"><a href="#ClickHouse-279"><span class="linenos">279</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="ClickHouse-280"><a href="#ClickHouse-280"><span class="linenos">280</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-271"><a href="#ClickHouse-271"><span class="linenos">271</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-272"><a href="#ClickHouse-272"><span class="linenos">272</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse-273"><a href="#ClickHouse-273"><span class="linenos">273</span></a> <span class="s2">&quot;ARRAYJOIN&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</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_expression</span><span class="p">()),</span>
+</span><span id="ClickHouse-274"><a href="#ClickHouse-274"><span class="linenos">274</span></a> <span class="s2">&quot;QUANTILE&quot;</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_quantile</span><span class="p">(),</span>
+</span><span id="ClickHouse-275"><a href="#ClickHouse-275"><span class="linenos">275</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-276"><a href="#ClickHouse-276"><span class="linenos">276</span></a>
+</span><span id="ClickHouse-277"><a href="#ClickHouse-277"><span class="linenos">277</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-278"><a href="#ClickHouse-278"><span class="linenos">278</span></a>
+</span><span id="ClickHouse-279"><a href="#ClickHouse-279"><span class="linenos">279</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse-280"><a href="#ClickHouse-280"><span class="linenos">280</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-281"><a href="#ClickHouse-281"><span class="linenos">281</span></a>
-</span><span id="ClickHouse-282"><a href="#ClickHouse-282"><span class="linenos">282</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
-</span><span id="ClickHouse-283"><a href="#ClickHouse-283"><span class="linenos">283</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
-</span><span id="ClickHouse-284"><a href="#ClickHouse-284"><span class="linenos">284</span></a> <span class="n">COLUMN_OPERATORS</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">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse-285"><a href="#ClickHouse-285"><span class="linenos">285</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
-</span><span id="ClickHouse-286"><a href="#ClickHouse-286"><span class="linenos">286</span></a>
-</span><span id="ClickHouse-287"><a href="#ClickHouse-287"><span class="linenos">287</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-288"><a href="#ClickHouse-288"><span class="linenos">288</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">JOIN_KINDS</span><span class="p">,</span>
-</span><span id="ClickHouse-289"><a href="#ClickHouse-289"><span class="linenos">289</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse-290"><a href="#ClickHouse-290"><span class="linenos">290</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="ClickHouse-291"><a href="#ClickHouse-291"><span class="linenos">291</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse-292"><a href="#ClickHouse-292"><span class="linenos">292</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-293"><a href="#ClickHouse-293"><span class="linenos">293</span></a>
-</span><span id="ClickHouse-294"><a href="#ClickHouse-294"><span class="linenos">294</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="ClickHouse-282"><a href="#ClickHouse-282"><span class="linenos">282</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-283"><a href="#ClickHouse-283"><span class="linenos">283</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse-284"><a href="#ClickHouse-284"><span class="linenos">284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="ClickHouse-285"><a href="#ClickHouse-285"><span class="linenos">285</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="ClickHouse-286"><a href="#ClickHouse-286"><span class="linenos">286</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-287"><a href="#ClickHouse-287"><span class="linenos">287</span></a>
+</span><span id="ClickHouse-288"><a href="#ClickHouse-288"><span class="linenos">288</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
+</span><span id="ClickHouse-289"><a href="#ClickHouse-289"><span class="linenos">289</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
+</span><span id="ClickHouse-290"><a href="#ClickHouse-290"><span class="linenos">290</span></a> <span class="n">COLUMN_OPERATORS</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">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse-291"><a href="#ClickHouse-291"><span class="linenos">291</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
+</span><span id="ClickHouse-292"><a href="#ClickHouse-292"><span class="linenos">292</span></a>
+</span><span id="ClickHouse-293"><a href="#ClickHouse-293"><span class="linenos">293</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-294"><a href="#ClickHouse-294"><span class="linenos">294</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">JOIN_KINDS</span><span class="p">,</span>
</span><span id="ClickHouse-295"><a href="#ClickHouse-295"><span class="linenos">295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse-296"><a href="#ClickHouse-296"><span class="linenos">296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse-297"><a href="#ClickHouse-297"><span class="linenos">297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="ClickHouse-298"><a href="#ClickHouse-298"><span class="linenos">298</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="ClickHouse-299"><a href="#ClickHouse-299"><span class="linenos">299</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="ClickHouse-300"><a href="#ClickHouse-300"><span class="linenos">300</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-301"><a href="#ClickHouse-301"><span class="linenos">301</span></a>
-</span><span id="ClickHouse-302"><a href="#ClickHouse-302"><span class="linenos">302</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse-303"><a href="#ClickHouse-303"><span class="linenos">303</span></a>
-</span><span id="ClickHouse-304"><a href="#ClickHouse-304"><span class="linenos">304</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-305"><a href="#ClickHouse-305"><span class="linenos">305</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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse-306"><a href="#ClickHouse-306"><span class="linenos">306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="ClickHouse-307"><a href="#ClickHouse-307"><span class="linenos">307</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-308"><a href="#ClickHouse-308"><span class="linenos">308</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</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_conjunction</span><span class="p">),</span>
-</span><span id="ClickHouse-309"><a href="#ClickHouse-309"><span class="linenos">309</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-310"><a href="#ClickHouse-310"><span class="linenos">310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
-</span><span id="ClickHouse-311"><a href="#ClickHouse-311"><span class="linenos">311</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-312"><a href="#ClickHouse-312"><span class="linenos">312</span></a>
-</span><span id="ClickHouse-313"><a href="#ClickHouse-313"><span class="linenos">313</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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="ClickHouse-314"><a href="#ClickHouse-314"><span class="linenos">314</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_conjunction</span><span class="p">()</span>
-</span><span id="ClickHouse-315"><a href="#ClickHouse-315"><span class="linenos">315</span></a>
-</span><span id="ClickHouse-316"><a href="#ClickHouse-316"><span class="linenos">316</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">PLACEHOLDER</span><span class="p">):</span>
-</span><span id="ClickHouse-317"><a href="#ClickHouse-317"><span class="linenos">317</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="ClickHouse-318"><a href="#ClickHouse-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
-</span><span id="ClickHouse-319"><a href="#ClickHouse-319"><span class="linenos">319</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse-320"><a href="#ClickHouse-320"><span class="linenos">320</span></a> <span class="n">true</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="ClickHouse-321"><a href="#ClickHouse-321"><span class="linenos">321</span></a> <span class="n">false</span><span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="ClickHouse-322"><a href="#ClickHouse-322"><span class="linenos">322</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-323"><a href="#ClickHouse-323"><span class="linenos">323</span></a>
-</span><span id="ClickHouse-324"><a href="#ClickHouse-324"><span class="linenos">324</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse-325"><a href="#ClickHouse-325"><span class="linenos">325</span></a>
-</span><span id="ClickHouse-326"><a href="#ClickHouse-326"><span class="linenos">326</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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="ClickHouse-327"><a href="#ClickHouse-327"><span class="linenos">327</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="ClickHouse-328"><a href="#ClickHouse-328"><span class="linenos">328</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
-</span><span id="ClickHouse-329"><a href="#ClickHouse-329"><span class="linenos">329</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
-</span><span id="ClickHouse-330"><a href="#ClickHouse-330"><span class="linenos">330</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="ClickHouse-331"><a href="#ClickHouse-331"><span class="linenos">331</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse-332"><a href="#ClickHouse-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse-333"><a href="#ClickHouse-333"><span class="linenos">333</span></a>
-</span><span id="ClickHouse-334"><a href="#ClickHouse-334"><span class="linenos">334</span></a> <span class="n">this</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><span id="ClickHouse-335"><a href="#ClickHouse-335"><span class="linenos">335</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">COLON</span><span class="p">)</span>
-</span><span id="ClickHouse-336"><a href="#ClickHouse-336"><span class="linenos">336</span></a> <span class="n">kind</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 class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="ClickHouse-337"><a href="#ClickHouse-337"><span class="linenos">337</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
-</span><span id="ClickHouse-338"><a href="#ClickHouse-338"><span class="linenos">338</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-296"><a href="#ClickHouse-296"><span class="linenos">296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="ClickHouse-297"><a href="#ClickHouse-297"><span class="linenos">297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="ClickHouse-298"><a href="#ClickHouse-298"><span class="linenos">298</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-299"><a href="#ClickHouse-299"><span class="linenos">299</span></a>
+</span><span id="ClickHouse-300"><a href="#ClickHouse-300"><span class="linenos">300</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="ClickHouse-301"><a href="#ClickHouse-301"><span class="linenos">301</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="ClickHouse-302"><a href="#ClickHouse-302"><span class="linenos">302</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="ClickHouse-303"><a href="#ClickHouse-303"><span class="linenos">303</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="ClickHouse-304"><a href="#ClickHouse-304"><span class="linenos">304</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="ClickHouse-305"><a href="#ClickHouse-305"><span class="linenos">305</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="ClickHouse-306"><a href="#ClickHouse-306"><span class="linenos">306</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-307"><a href="#ClickHouse-307"><span class="linenos">307</span></a>
+</span><span id="ClickHouse-308"><a href="#ClickHouse-308"><span class="linenos">308</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse-309"><a href="#ClickHouse-309"><span class="linenos">309</span></a>
+</span><span id="ClickHouse-310"><a href="#ClickHouse-310"><span class="linenos">310</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-311"><a href="#ClickHouse-311"><span class="linenos">311</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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse-312"><a href="#ClickHouse-312"><span class="linenos">312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="ClickHouse-313"><a href="#ClickHouse-313"><span class="linenos">313</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-314"><a href="#ClickHouse-314"><span class="linenos">314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</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_conjunction</span><span class="p">),</span>
+</span><span id="ClickHouse-315"><a href="#ClickHouse-315"><span class="linenos">315</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-316"><a href="#ClickHouse-316"><span class="linenos">316</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="ClickHouse-317"><a href="#ClickHouse-317"><span class="linenos">317</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-318"><a href="#ClickHouse-318"><span class="linenos">318</span></a>
+</span><span id="ClickHouse-319"><a href="#ClickHouse-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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="ClickHouse-320"><a href="#ClickHouse-320"><span class="linenos">320</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_conjunction</span><span class="p">()</span>
+</span><span id="ClickHouse-321"><a href="#ClickHouse-321"><span class="linenos">321</span></a>
+</span><span id="ClickHouse-322"><a href="#ClickHouse-322"><span class="linenos">322</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">PLACEHOLDER</span><span class="p">):</span>
+</span><span id="ClickHouse-323"><a href="#ClickHouse-323"><span class="linenos">323</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="ClickHouse-324"><a href="#ClickHouse-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
+</span><span id="ClickHouse-325"><a href="#ClickHouse-325"><span class="linenos">325</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse-326"><a href="#ClickHouse-326"><span class="linenos">326</span></a> <span class="n">true</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="ClickHouse-327"><a href="#ClickHouse-327"><span class="linenos">327</span></a> <span class="n">false</span><span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="ClickHouse-328"><a href="#ClickHouse-328"><span class="linenos">328</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-329"><a href="#ClickHouse-329"><span class="linenos">329</span></a>
+</span><span id="ClickHouse-330"><a href="#ClickHouse-330"><span class="linenos">330</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse-331"><a href="#ClickHouse-331"><span class="linenos">331</span></a>
+</span><span id="ClickHouse-332"><a href="#ClickHouse-332"><span class="linenos">332</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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="ClickHouse-333"><a href="#ClickHouse-333"><span class="linenos">333</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="ClickHouse-334"><a href="#ClickHouse-334"><span class="linenos">334</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
+</span><span id="ClickHouse-335"><a href="#ClickHouse-335"><span class="linenos">335</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
+</span><span id="ClickHouse-336"><a href="#ClickHouse-336"><span class="linenos">336</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="ClickHouse-337"><a href="#ClickHouse-337"><span class="linenos">337</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse-338"><a href="#ClickHouse-338"><span class="linenos">338</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="ClickHouse-339"><a href="#ClickHouse-339"><span class="linenos">339</span></a>
-</span><span id="ClickHouse-340"><a href="#ClickHouse-340"><span class="linenos">340</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="ClickHouse-341"><a href="#ClickHouse-341"><span class="linenos">341</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;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-342"><a href="#ClickHouse-342"><span class="linenos">342</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse-343"><a href="#ClickHouse-343"><span class="linenos">343</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;Expecting }&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-344"><a href="#ClickHouse-344"><span class="linenos">344</span></a>
-</span><span id="ClickHouse-345"><a href="#ClickHouse-345"><span class="linenos">345</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">Placeholder</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="ClickHouse-346"><a href="#ClickHouse-346"><span class="linenos">346</span></a>
-</span><span id="ClickHouse-347"><a href="#ClickHouse-347"><span class="linenos">347</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="ClickHouse-348"><a href="#ClickHouse-348"><span class="linenos">348</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-349"><a href="#ClickHouse-349"><span class="linenos">349</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
-</span><span id="ClickHouse-350"><a href="#ClickHouse-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse-351"><a href="#ClickHouse-351"><span class="linenos">351</span></a>
-</span><span id="ClickHouse-352"><a href="#ClickHouse-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse-353"><a href="#ClickHouse-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-354"><a href="#ClickHouse-354"><span class="linenos">354</span></a> <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><span id="ClickHouse-355"><a href="#ClickHouse-355"><span class="linenos">355</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-356"><a href="#ClickHouse-356"><span class="linenos">356</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse-357"><a href="#ClickHouse-357"><span class="linenos">357</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-358"><a href="#ClickHouse-358"><span class="linenos">358</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-359"><a href="#ClickHouse-359"><span class="linenos">359</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-360"><a href="#ClickHouse-360"><span class="linenos">360</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse-361"><a href="#ClickHouse-361"><span class="linenos">361</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="ClickHouse-362"><a href="#ClickHouse-362"><span class="linenos">362</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
-</span><span id="ClickHouse-363"><a href="#ClickHouse-363"><span class="linenos">363</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
-</span><span id="ClickHouse-364"><a href="#ClickHouse-364"><span class="linenos">364</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
-</span><span id="ClickHouse-365"><a href="#ClickHouse-365"><span class="linenos">365</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
-</span><span id="ClickHouse-366"><a href="#ClickHouse-366"><span class="linenos">366</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-367"><a href="#ClickHouse-367"><span class="linenos">367</span></a>
-</span><span id="ClickHouse-368"><a href="#ClickHouse-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
-</span><span id="ClickHouse-369"><a href="#ClickHouse-369"><span class="linenos">369</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-370"><a href="#ClickHouse-370"><span class="linenos">370</span></a>
-</span><span id="ClickHouse-371"><a href="#ClickHouse-371"><span class="linenos">371</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse-372"><a href="#ClickHouse-372"><span class="linenos">372</span></a>
-</span><span id="ClickHouse-373"><a href="#ClickHouse-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="ClickHouse-374"><a href="#ClickHouse-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-375"><a href="#ClickHouse-375"><span class="linenos">375</span></a>
-</span><span id="ClickHouse-376"><a href="#ClickHouse-376"><span class="linenos">376</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
-</span><span id="ClickHouse-377"><a href="#ClickHouse-377"><span class="linenos">377</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="ClickHouse-378"><a href="#ClickHouse-378"><span class="linenos">378</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse-379"><a href="#ClickHouse-379"><span class="linenos">379</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="ClickHouse-380"><a href="#ClickHouse-380"><span class="linenos">380</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
-</span><span id="ClickHouse-381"><a href="#ClickHouse-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
-</span><span id="ClickHouse-382"><a href="#ClickHouse-382"><span class="linenos">382</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="ClickHouse-383"><a href="#ClickHouse-383"><span class="linenos">383</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
-</span><span id="ClickHouse-384"><a href="#ClickHouse-384"><span class="linenos">384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse-385"><a href="#ClickHouse-385"><span class="linenos">385</span></a>
-</span><span id="ClickHouse-386"><a href="#ClickHouse-386"><span class="linenos">386</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="ClickHouse-387"><a href="#ClickHouse-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
-</span><span id="ClickHouse-388"><a href="#ClickHouse-388"><span class="linenos">388</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
-</span><span id="ClickHouse-389"><a href="#ClickHouse-389"><span class="linenos">389</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="ClickHouse-390"><a href="#ClickHouse-390"><span class="linenos">390</span></a> <span class="n">scalar</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="ClickHouse-391"><a href="#ClickHouse-391"><span class="linenos">391</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-392"><a href="#ClickHouse-392"><span class="linenos">392</span></a>
-</span><span id="ClickHouse-393"><a href="#ClickHouse-393"><span class="linenos">393</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="ClickHouse-394"><a href="#ClickHouse-394"><span class="linenos">394</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-395"><a href="#ClickHouse-395"><span class="linenos">395</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
-</span><span id="ClickHouse-396"><a href="#ClickHouse-396"><span class="linenos">396</span></a> <span class="n">is_global</span> <span class="o">=</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">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse-397"><a href="#ClickHouse-397"><span class="linenos">397</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-340"><a href="#ClickHouse-340"><span class="linenos">340</span></a> <span class="n">this</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><span id="ClickHouse-341"><a href="#ClickHouse-341"><span class="linenos">341</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">COLON</span><span class="p">)</span>
+</span><span id="ClickHouse-342"><a href="#ClickHouse-342"><span class="linenos">342</span></a> <span class="n">kind</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 class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="ClickHouse-343"><a href="#ClickHouse-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
+</span><span id="ClickHouse-344"><a href="#ClickHouse-344"><span class="linenos">344</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-345"><a href="#ClickHouse-345"><span class="linenos">345</span></a>
+</span><span id="ClickHouse-346"><a href="#ClickHouse-346"><span class="linenos">346</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="ClickHouse-347"><a href="#ClickHouse-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;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-348"><a href="#ClickHouse-348"><span class="linenos">348</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse-349"><a href="#ClickHouse-349"><span class="linenos">349</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;Expecting }&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-350"><a href="#ClickHouse-350"><span class="linenos">350</span></a>
+</span><span id="ClickHouse-351"><a href="#ClickHouse-351"><span class="linenos">351</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">Placeholder</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="ClickHouse-352"><a href="#ClickHouse-352"><span class="linenos">352</span></a>
+</span><span id="ClickHouse-353"><a href="#ClickHouse-353"><span class="linenos">353</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="ClickHouse-354"><a href="#ClickHouse-354"><span class="linenos">354</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-355"><a href="#ClickHouse-355"><span class="linenos">355</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
+</span><span id="ClickHouse-356"><a href="#ClickHouse-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse-357"><a href="#ClickHouse-357"><span class="linenos">357</span></a>
+</span><span id="ClickHouse-358"><a href="#ClickHouse-358"><span class="linenos">358</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse-359"><a href="#ClickHouse-359"><span class="linenos">359</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-360"><a href="#ClickHouse-360"><span class="linenos">360</span></a> <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><span id="ClickHouse-361"><a href="#ClickHouse-361"><span class="linenos">361</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-362"><a href="#ClickHouse-362"><span class="linenos">362</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse-363"><a href="#ClickHouse-363"><span class="linenos">363</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-364"><a href="#ClickHouse-364"><span class="linenos">364</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-365"><a href="#ClickHouse-365"><span class="linenos">365</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-366"><a href="#ClickHouse-366"><span class="linenos">366</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse-367"><a href="#ClickHouse-367"><span class="linenos">367</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="ClickHouse-368"><a href="#ClickHouse-368"><span class="linenos">368</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
+</span><span id="ClickHouse-369"><a href="#ClickHouse-369"><span class="linenos">369</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
+</span><span id="ClickHouse-370"><a href="#ClickHouse-370"><span class="linenos">370</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
+</span><span id="ClickHouse-371"><a href="#ClickHouse-371"><span class="linenos">371</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
+</span><span id="ClickHouse-372"><a href="#ClickHouse-372"><span class="linenos">372</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-373"><a href="#ClickHouse-373"><span class="linenos">373</span></a>
+</span><span id="ClickHouse-374"><a href="#ClickHouse-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
+</span><span id="ClickHouse-375"><a href="#ClickHouse-375"><span class="linenos">375</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-376"><a href="#ClickHouse-376"><span class="linenos">376</span></a>
+</span><span id="ClickHouse-377"><a href="#ClickHouse-377"><span class="linenos">377</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse-378"><a href="#ClickHouse-378"><span class="linenos">378</span></a>
+</span><span id="ClickHouse-379"><a href="#ClickHouse-379"><span class="linenos">379</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="ClickHouse-380"><a href="#ClickHouse-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-381"><a href="#ClickHouse-381"><span class="linenos">381</span></a>
+</span><span id="ClickHouse-382"><a href="#ClickHouse-382"><span class="linenos">382</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
+</span><span id="ClickHouse-383"><a href="#ClickHouse-383"><span class="linenos">383</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="ClickHouse-384"><a href="#ClickHouse-384"><span class="linenos">384</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse-385"><a href="#ClickHouse-385"><span class="linenos">385</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="ClickHouse-386"><a href="#ClickHouse-386"><span class="linenos">386</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
+</span><span id="ClickHouse-387"><a href="#ClickHouse-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
+</span><span id="ClickHouse-388"><a href="#ClickHouse-388"><span class="linenos">388</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="ClickHouse-389"><a href="#ClickHouse-389"><span class="linenos">389</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
+</span><span id="ClickHouse-390"><a href="#ClickHouse-390"><span class="linenos">390</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse-391"><a href="#ClickHouse-391"><span class="linenos">391</span></a>
+</span><span id="ClickHouse-392"><a href="#ClickHouse-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><span id="ClickHouse-393"><a href="#ClickHouse-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
+</span><span id="ClickHouse-394"><a href="#ClickHouse-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_field</span><span class="p">(),</span>
+</span><span id="ClickHouse-395"><a href="#ClickHouse-395"><span class="linenos">395</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="ClickHouse-396"><a href="#ClickHouse-396"><span class="linenos">396</span></a> <span class="n">scalar</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="ClickHouse-397"><a href="#ClickHouse-397"><span class="linenos">397</span></a> <span class="p">)</span>
</span><span id="ClickHouse-398"><a href="#ClickHouse-398"><span class="linenos">398</span></a>
-</span><span id="ClickHouse-399"><a href="#ClickHouse-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
-</span><span id="ClickHouse-400"><a href="#ClickHouse-400"><span class="linenos">400</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse-401"><a href="#ClickHouse-401"><span class="linenos">401</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse-402"><a href="#ClickHouse-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
-</span><span id="ClickHouse-403"><a href="#ClickHouse-403"><span class="linenos">403</span></a>
-</span><span id="ClickHouse-404"><a href="#ClickHouse-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="ClickHouse-405"><a href="#ClickHouse-405"><span class="linenos">405</span></a> <span class="n">is_global</span><span class="p">,</span>
-</span><span id="ClickHouse-406"><a href="#ClickHouse-406"><span class="linenos">406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse-407"><a href="#ClickHouse-407"><span class="linenos">407</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse-408"><a href="#ClickHouse-408"><span class="linenos">408</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-399"><a href="#ClickHouse-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="ClickHouse-400"><a href="#ClickHouse-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-401"><a href="#ClickHouse-401"><span class="linenos">401</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
+</span><span id="ClickHouse-402"><a href="#ClickHouse-402"><span class="linenos">402</span></a> <span class="n">is_global</span> <span class="o">=</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">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-403"><a href="#ClickHouse-403"><span class="linenos">403</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-404"><a href="#ClickHouse-404"><span class="linenos">404</span></a>
+</span><span id="ClickHouse-405"><a href="#ClickHouse-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
+</span><span id="ClickHouse-406"><a href="#ClickHouse-406"><span class="linenos">406</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-407"><a href="#ClickHouse-407"><span class="linenos">407</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse-408"><a href="#ClickHouse-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
</span><span id="ClickHouse-409"><a href="#ClickHouse-409"><span class="linenos">409</span></a>
-</span><span id="ClickHouse-410"><a href="#ClickHouse-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="ClickHouse-411"><a href="#ClickHouse-411"><span class="linenos">411</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-412"><a href="#ClickHouse-412"><span class="linenos">412</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">Join</span><span class="p">]:</span>
-</span><span id="ClickHouse-413"><a href="#ClickHouse-413"><span class="linenos">413</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-414"><a href="#ClickHouse-414"><span class="linenos">414</span></a>
-</span><span id="ClickHouse-415"><a href="#ClickHouse-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="ClickHouse-416"><a href="#ClickHouse-416"><span class="linenos">416</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
-</span><span id="ClickHouse-417"><a href="#ClickHouse-417"><span class="linenos">417</span></a> <span class="k">return</span> <span class="n">join</span>
-</span><span id="ClickHouse-418"><a href="#ClickHouse-418"><span class="linenos">418</span></a>
-</span><span id="ClickHouse-419"><a href="#ClickHouse-419"><span class="linenos">419</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse-420"><a href="#ClickHouse-420"><span class="linenos">420</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-421"><a href="#ClickHouse-421"><span class="linenos">421</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse-422"><a href="#ClickHouse-422"><span class="linenos">422</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse-423"><a href="#ClickHouse-423"><span class="linenos">423</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="ClickHouse-424"><a href="#ClickHouse-424"><span class="linenos">424</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-425"><a href="#ClickHouse-425"><span class="linenos">425</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse-426"><a href="#ClickHouse-426"><span class="linenos">426</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="ClickHouse-427"><a href="#ClickHouse-427"><span class="linenos">427</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-428"><a href="#ClickHouse-428"><span class="linenos">428</span></a>
-</span><span id="ClickHouse-429"><a href="#ClickHouse-429"><span class="linenos">429</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
-</span><span id="ClickHouse-430"><a href="#ClickHouse-430"><span class="linenos">430</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGG_FUNC_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-431"><a href="#ClickHouse-431"><span class="linenos">431</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
-</span><span id="ClickHouse-432"><a href="#ClickHouse-432"><span class="linenos">432</span></a>
-</span><span id="ClickHouse-433"><a href="#ClickHouse-433"><span class="linenos">433</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse-434"><a href="#ClickHouse-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="ClickHouse-435"><a href="#ClickHouse-435"><span class="linenos">435</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="ClickHouse-436"><a href="#ClickHouse-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedParameterizedAgg</span><span class="p">,</span>
-</span><span id="ClickHouse-437"><a href="#ClickHouse-437"><span class="linenos">437</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse-438"><a href="#ClickHouse-438"><span class="linenos">438</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse-439"><a href="#ClickHouse-439"><span class="linenos">439</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="ClickHouse-440"><a href="#ClickHouse-440"><span class="linenos">440</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
-</span><span id="ClickHouse-441"><a href="#ClickHouse-441"><span class="linenos">441</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-442"><a href="#ClickHouse-442"><span class="linenos">442</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="ClickHouse-443"><a href="#ClickHouse-443"><span class="linenos">443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
-</span><span id="ClickHouse-444"><a href="#ClickHouse-444"><span class="linenos">444</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse-445"><a href="#ClickHouse-445"><span class="linenos">445</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse-446"><a href="#ClickHouse-446"><span class="linenos">446</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="ClickHouse-447"><a href="#ClickHouse-447"><span class="linenos">447</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-448"><a href="#ClickHouse-448"><span class="linenos">448</span></a>
-</span><span id="ClickHouse-449"><a href="#ClickHouse-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">:</span>
-</span><span id="ClickHouse-450"><a href="#ClickHouse-450"><span class="linenos">450</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="ClickHouse-451"><a href="#ClickHouse-451"><span class="linenos">451</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="ClickHouse-452"><a href="#ClickHouse-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">,</span>
-</span><span id="ClickHouse-453"><a href="#ClickHouse-453"><span class="linenos">453</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse-454"><a href="#ClickHouse-454"><span class="linenos">454</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse-455"><a href="#ClickHouse-455"><span class="linenos">455</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
-</span><span id="ClickHouse-456"><a href="#ClickHouse-456"><span class="linenos">456</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-457"><a href="#ClickHouse-457"><span class="linenos">457</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="ClickHouse-458"><a href="#ClickHouse-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnonymousAggFunc</span><span class="p">,</span>
-</span><span id="ClickHouse-459"><a href="#ClickHouse-459"><span class="linenos">459</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse-460"><a href="#ClickHouse-460"><span class="linenos">460</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse-461"><a href="#ClickHouse-461"><span class="linenos">461</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-462"><a href="#ClickHouse-462"><span class="linenos">462</span></a>
-</span><span id="ClickHouse-463"><a href="#ClickHouse-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="ClickHouse-464"><a href="#ClickHouse-464"><span class="linenos">464</span></a>
-</span><span id="ClickHouse-465"><a href="#ClickHouse-465"><span class="linenos">465</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
-</span><span id="ClickHouse-466"><a href="#ClickHouse-466"><span class="linenos">466</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="ClickHouse-467"><a href="#ClickHouse-467"><span class="linenos">467</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="ClickHouse-468"><a href="#ClickHouse-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse-469"><a href="#ClickHouse-469"><span class="linenos">469</span></a> <span class="k">return</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_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse-410"><a href="#ClickHouse-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="ClickHouse-411"><a href="#ClickHouse-411"><span class="linenos">411</span></a> <span class="n">is_global</span><span class="p">,</span>
+</span><span id="ClickHouse-412"><a href="#ClickHouse-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse-413"><a href="#ClickHouse-413"><span class="linenos">413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse-414"><a href="#ClickHouse-414"><span class="linenos">414</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-415"><a href="#ClickHouse-415"><span class="linenos">415</span></a>
+</span><span id="ClickHouse-416"><a href="#ClickHouse-416"><span class="linenos">416</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="ClickHouse-417"><a href="#ClickHouse-417"><span class="linenos">417</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-418"><a href="#ClickHouse-418"><span class="linenos">418</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">Join</span><span class="p">]:</span>
+</span><span id="ClickHouse-419"><a href="#ClickHouse-419"><span class="linenos">419</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-420"><a href="#ClickHouse-420"><span class="linenos">420</span></a>
+</span><span id="ClickHouse-421"><a href="#ClickHouse-421"><span class="linenos">421</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="ClickHouse-422"><a href="#ClickHouse-422"><span class="linenos">422</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
+</span><span id="ClickHouse-423"><a href="#ClickHouse-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="ClickHouse-424"><a href="#ClickHouse-424"><span class="linenos">424</span></a>
+</span><span id="ClickHouse-425"><a href="#ClickHouse-425"><span class="linenos">425</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse-426"><a href="#ClickHouse-426"><span class="linenos">426</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-427"><a href="#ClickHouse-427"><span class="linenos">427</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse-428"><a href="#ClickHouse-428"><span class="linenos">428</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse-429"><a href="#ClickHouse-429"><span class="linenos">429</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="ClickHouse-430"><a href="#ClickHouse-430"><span class="linenos">430</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-431"><a href="#ClickHouse-431"><span class="linenos">431</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse-432"><a href="#ClickHouse-432"><span class="linenos">432</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="ClickHouse-433"><a href="#ClickHouse-433"><span class="linenos">433</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-434"><a href="#ClickHouse-434"><span class="linenos">434</span></a>
+</span><span id="ClickHouse-435"><a href="#ClickHouse-435"><span class="linenos">435</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
+</span><span id="ClickHouse-436"><a href="#ClickHouse-436"><span class="linenos">436</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGG_FUNC_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-437"><a href="#ClickHouse-437"><span class="linenos">437</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+</span><span id="ClickHouse-438"><a href="#ClickHouse-438"><span class="linenos">438</span></a>
+</span><span id="ClickHouse-439"><a href="#ClickHouse-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse-440"><a href="#ClickHouse-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="ClickHouse-441"><a href="#ClickHouse-441"><span class="linenos">441</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="ClickHouse-442"><a href="#ClickHouse-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedParameterizedAgg</span><span class="p">,</span>
+</span><span id="ClickHouse-443"><a href="#ClickHouse-443"><span class="linenos">443</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse-444"><a href="#ClickHouse-444"><span class="linenos">444</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse-445"><a href="#ClickHouse-445"><span class="linenos">445</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="ClickHouse-446"><a href="#ClickHouse-446"><span class="linenos">446</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
+</span><span id="ClickHouse-447"><a href="#ClickHouse-447"><span class="linenos">447</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-448"><a href="#ClickHouse-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><span id="ClickHouse-449"><a href="#ClickHouse-449"><span class="linenos">449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
+</span><span id="ClickHouse-450"><a href="#ClickHouse-450"><span class="linenos">450</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse-451"><a href="#ClickHouse-451"><span class="linenos">451</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse-452"><a href="#ClickHouse-452"><span class="linenos">452</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="ClickHouse-453"><a href="#ClickHouse-453"><span class="linenos">453</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-454"><a href="#ClickHouse-454"><span class="linenos">454</span></a>
+</span><span id="ClickHouse-455"><a href="#ClickHouse-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">:</span>
+</span><span id="ClickHouse-456"><a href="#ClickHouse-456"><span class="linenos">456</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="ClickHouse-457"><a href="#ClickHouse-457"><span class="linenos">457</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="ClickHouse-458"><a href="#ClickHouse-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">,</span>
+</span><span id="ClickHouse-459"><a href="#ClickHouse-459"><span class="linenos">459</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse-460"><a href="#ClickHouse-460"><span class="linenos">460</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse-461"><a href="#ClickHouse-461"><span class="linenos">461</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
+</span><span id="ClickHouse-462"><a href="#ClickHouse-462"><span class="linenos">462</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-463"><a href="#ClickHouse-463"><span class="linenos">463</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="ClickHouse-464"><a href="#ClickHouse-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnonymousAggFunc</span><span class="p">,</span>
+</span><span id="ClickHouse-465"><a href="#ClickHouse-465"><span class="linenos">465</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse-466"><a href="#ClickHouse-466"><span class="linenos">466</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse-467"><a href="#ClickHouse-467"><span class="linenos">467</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-468"><a href="#ClickHouse-468"><span class="linenos">468</span></a>
+</span><span id="ClickHouse-469"><a href="#ClickHouse-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="ClickHouse-470"><a href="#ClickHouse-470"><span class="linenos">470</span></a>
-</span><span id="ClickHouse-471"><a href="#ClickHouse-471"><span class="linenos">471</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">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse-472"><a href="#ClickHouse-472"><span class="linenos">472</span></a> <span class="n">params</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_lambda</span><span class="p">)</span>
-</span><span id="ClickHouse-473"><a href="#ClickHouse-473"><span class="linenos">473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-474"><a href="#ClickHouse-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="n">params</span>
-</span><span id="ClickHouse-475"><a href="#ClickHouse-475"><span class="linenos">475</span></a>
-</span><span id="ClickHouse-476"><a href="#ClickHouse-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse-477"><a href="#ClickHouse-477"><span class="linenos">477</span></a>
-</span><span id="ClickHouse-478"><a href="#ClickHouse-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</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">Quantile</span><span class="p">:</span>
-</span><span id="ClickHouse-479"><a href="#ClickHouse-479"><span class="linenos">479</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="ClickHouse-480"><a href="#ClickHouse-480"><span class="linenos">480</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
-</span><span id="ClickHouse-481"><a href="#ClickHouse-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse-482"><a href="#ClickHouse-482"><span class="linenos">482</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">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-483"><a href="#ClickHouse-483"><span class="linenos">483</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">Quantile</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">quantile</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="mf">0.5</span><span class="p">))</span>
-</span><span id="ClickHouse-484"><a href="#ClickHouse-484"><span class="linenos">484</span></a>
-</span><span id="ClickHouse-485"><a href="#ClickHouse-485"><span class="linenos">485</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse-486"><a href="#ClickHouse-486"><span class="linenos">486</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-487"><a href="#ClickHouse-487"><span class="linenos">487</span></a>
-</span><span id="ClickHouse-488"><a href="#ClickHouse-488"><span class="linenos">488</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse-489"><a href="#ClickHouse-489"><span class="linenos">489</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-490"><a href="#ClickHouse-490"><span class="linenos">490</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="ClickHouse-491"><a href="#ClickHouse-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse-492"><a href="#ClickHouse-492"><span class="linenos">492</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
-</span><span id="ClickHouse-493"><a href="#ClickHouse-493"><span class="linenos">493</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-494"><a href="#ClickHouse-494"><span class="linenos">494</span></a>
-</span><span id="ClickHouse-495"><a href="#ClickHouse-495"><span class="linenos">495</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</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="ClickHouse-496"><a href="#ClickHouse-496"><span class="linenos">496</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse-497"><a href="#ClickHouse-497"><span class="linenos">497</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;CLUSTER&quot;</span><span class="p">):</span>
-</span><span id="ClickHouse-498"><a href="#ClickHouse-498"><span class="linenos">498</span></a> <span class="n">this</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><span id="ClickHouse-499"><a href="#ClickHouse-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="ClickHouse-500"><a href="#ClickHouse-500"><span class="linenos">500</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">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-501"><a href="#ClickHouse-501"><span class="linenos">501</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="ClickHouse-502"><a href="#ClickHouse-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse-503"><a href="#ClickHouse-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse-504"><a href="#ClickHouse-504"><span class="linenos">504</span></a>
-</span><span id="ClickHouse-505"><a href="#ClickHouse-505"><span class="linenos">505</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="ClickHouse-506"><a href="#ClickHouse-506"><span class="linenos">506</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-507"><a href="#ClickHouse-507"><span class="linenos">507</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-508"><a href="#ClickHouse-508"><span class="linenos">508</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-509"><a href="#ClickHouse-509"><span class="linenos">509</span></a> <span class="n">TABLESAMPLE_REQUIRES_PARENS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-510"><a href="#ClickHouse-510"><span class="linenos">510</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-511"><a href="#ClickHouse-511"><span class="linenos">511</span></a> <span class="n">TABLESAMPLE_KEYWORDS</span> <span class="o">=</span> <span class="s2">&quot;SAMPLE&quot;</span>
-</span><span id="ClickHouse-512"><a href="#ClickHouse-512"><span class="linenos">512</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-513"><a href="#ClickHouse-513"><span class="linenos">513</span></a>
-</span><span id="ClickHouse-514"><a href="#ClickHouse-514"><span class="linenos">514</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-515"><a href="#ClickHouse-515"><span class="linenos">515</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-516"><a href="#ClickHouse-516"><span class="linenos">516</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-517"><a href="#ClickHouse-517"><span class="linenos">517</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-518"><a href="#ClickHouse-518"><span class="linenos">518</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-519"><a href="#ClickHouse-519"><span class="linenos">519</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-520"><a href="#ClickHouse-520"><span class="linenos">520</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-521"><a href="#ClickHouse-521"><span class="linenos">521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-522"><a href="#ClickHouse-522"><span class="linenos">522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-523"><a href="#ClickHouse-523"><span class="linenos">523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-524"><a href="#ClickHouse-524"><span class="linenos">524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-525"><a href="#ClickHouse-525"><span class="linenos">525</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-526"><a href="#ClickHouse-526"><span class="linenos">526</span></a>
-</span><span id="ClickHouse-527"><a href="#ClickHouse-527"><span class="linenos">527</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-528"><a href="#ClickHouse-528"><span class="linenos">528</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><span id="ClickHouse-529"><a href="#ClickHouse-529"><span class="linenos">529</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="ClickHouse-530"><a href="#ClickHouse-530"><span class="linenos">530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-531"><a href="#ClickHouse-531"><span class="linenos">531</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-532"><a href="#ClickHouse-532"><span class="linenos">532</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE32</span><span class="p">:</span> <span class="s2">&quot;Date32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-533"><a href="#ClickHouse-533"><span class="linenos">533</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-534"><a href="#ClickHouse-534"><span class="linenos">534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-535"><a href="#ClickHouse-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-536"><a href="#ClickHouse-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-537"><a href="#ClickHouse-537"><span class="linenos">537</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-538"><a href="#ClickHouse-538"><span class="linenos">538</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-539"><a href="#ClickHouse-539"><span class="linenos">539</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-540"><a href="#ClickHouse-540"><span class="linenos">540</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-541"><a href="#ClickHouse-541"><span class="linenos">541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-542"><a href="#ClickHouse-542"><span class="linenos">542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-543"><a href="#ClickHouse-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-544"><a href="#ClickHouse-544"><span class="linenos">544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-545"><a href="#ClickHouse-545"><span class="linenos">545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-546"><a href="#ClickHouse-546"><span class="linenos">546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-547"><a href="#ClickHouse-547"><span class="linenos">547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-548"><a href="#ClickHouse-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-549"><a href="#ClickHouse-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-550"><a href="#ClickHouse-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-551"><a href="#ClickHouse-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-552"><a href="#ClickHouse-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-553"><a href="#ClickHouse-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-554"><a href="#ClickHouse-554"><span class="linenos">554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-555"><a href="#ClickHouse-555"><span class="linenos">555</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-556"><a href="#ClickHouse-556"><span class="linenos">556</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-557"><a href="#ClickHouse-557"><span class="linenos">557</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV4</span><span class="p">:</span> <span class="s2">&quot;IPv4&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-558"><a href="#ClickHouse-558"><span class="linenos">558</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV6</span><span class="p">:</span> <span class="s2">&quot;IPv6&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-559"><a href="#ClickHouse-559"><span class="linenos">559</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;AggregateFunction&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-560"><a href="#ClickHouse-560"><span class="linenos">560</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;SimpleAggregateFunction&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-561"><a href="#ClickHouse-561"><span class="linenos">561</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-562"><a href="#ClickHouse-562"><span class="linenos">562</span></a>
-</span><span id="ClickHouse-563"><a href="#ClickHouse-563"><span class="linenos">563</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-564"><a href="#ClickHouse-564"><span class="linenos">564</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><span id="ClickHouse-565"><a href="#ClickHouse-565"><span class="linenos">565</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-566"><a href="#ClickHouse-566"><span class="linenos">566</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-567"><a href="#ClickHouse-567"><span class="linenos">567</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arraySum&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-568"><a href="#ClickHouse-568"><span class="linenos">568</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMax&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-569"><a href="#ClickHouse-569"><span class="linenos">569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMin&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-570"><a href="#ClickHouse-570"><span class="linenos">570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="ClickHouse-571"><a href="#ClickHouse-571"><span class="linenos">571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-572"><a href="#ClickHouse-572"><span class="linenos">572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;countIf&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-573"><a href="#ClickHouse-573"><span class="linenos">573</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="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;CURRENT_DATE&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-574"><a href="#ClickHouse-574"><span class="linenos">574</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-575"><a href="#ClickHouse-575"><span class="linenos">575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-576"><a href="#ClickHouse-576"><span class="linenos">576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arrayJoin&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-577"><a href="#ClickHouse-577"><span class="linenos">577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-578"><a href="#ClickHouse-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;isNaN&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-579"><a href="#ClickHouse-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse-580"><a href="#ClickHouse-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;nullIf&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-581"><a href="#ClickHouse-581"><span class="linenos">581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-582"><a href="#ClickHouse-582"><span class="linenos">582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="ClickHouse-583"><a href="#ClickHouse-583"><span class="linenos">583</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
-</span><span id="ClickHouse-584"><a href="#ClickHouse-584"><span class="linenos">584</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-585"><a href="#ClickHouse-585"><span class="linenos">585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;randCanonical&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-586"><a href="#ClickHouse-586"><span class="linenos">586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">]),</span>
-</span><span id="ClickHouse-587"><a href="#ClickHouse-587"><span class="linenos">587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;startsWith&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse-588"><a href="#ClickHouse-588"><span class="linenos">588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-589"><a href="#ClickHouse-589"><span class="linenos">589</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-590"><a href="#ClickHouse-590"><span class="linenos">590</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse-591"><a href="#ClickHouse-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</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;xor&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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
-</span><span id="ClickHouse-592"><a href="#ClickHouse-592"><span class="linenos">592</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-593"><a href="#ClickHouse-593"><span class="linenos">593</span></a>
-</span><span id="ClickHouse-594"><a href="#ClickHouse-594"><span class="linenos">594</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-595"><a href="#ClickHouse-595"><span class="linenos">595</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><span id="ClickHouse-596"><a href="#ClickHouse-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="ClickHouse-597"><a href="#ClickHouse-597"><span class="linenos">597</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="ClickHouse-598"><a href="#ClickHouse-598"><span class="linenos">598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="ClickHouse-599"><a href="#ClickHouse-599"><span class="linenos">599</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-600"><a href="#ClickHouse-600"><span class="linenos">600</span></a>
-</span><span id="ClickHouse-601"><a href="#ClickHouse-601"><span class="linenos">601</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-602"><a href="#ClickHouse-602"><span class="linenos">602</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse-603"><a href="#ClickHouse-603"><span class="linenos">603</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse-604"><a href="#ClickHouse-604"><span class="linenos">604</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse-605"><a href="#ClickHouse-605"><span class="linenos">605</span></a>
-</span><span id="ClickHouse-606"><a href="#ClickHouse-606"><span class="linenos">606</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
-</span><span id="ClickHouse-607"><a href="#ClickHouse-607"><span class="linenos">607</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
-</span><span id="ClickHouse-608"><a href="#ClickHouse-608"><span class="linenos">608</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse-609"><a href="#ClickHouse-609"><span class="linenos">609</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-610"><a href="#ClickHouse-610"><span class="linenos">610</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-611"><a href="#ClickHouse-611"><span class="linenos">611</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-612"><a href="#ClickHouse-612"><span class="linenos">612</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-613"><a href="#ClickHouse-613"><span class="linenos">613</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-614"><a href="#ClickHouse-614"><span class="linenos">614</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-615"><a href="#ClickHouse-615"><span class="linenos">615</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-616"><a href="#ClickHouse-616"><span class="linenos">616</span></a> <span class="p">}</span>
-</span><span id="ClickHouse-617"><a href="#ClickHouse-617"><span class="linenos">617</span></a>
-</span><span id="ClickHouse-618"><a href="#ClickHouse-618"><span class="linenos">618</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-619"><a href="#ClickHouse-619"><span class="linenos">619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="ClickHouse-620"><a href="#ClickHouse-620"><span class="linenos">620</span></a>
-</span><span id="ClickHouse-621"><a href="#ClickHouse-621"><span class="linenos">621</span></a> <span class="k">def</span> <span class="nf">_any_to_has</span><span class="p">(</span>
-</span><span id="ClickHouse-622"><a href="#ClickHouse-622"><span class="linenos">622</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse-623"><a href="#ClickHouse-623"><span class="linenos">623</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="ClickHouse-624"><a href="#ClickHouse-624"><span class="linenos">624</span></a> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">],</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="ClickHouse-625"><a href="#ClickHouse-625"><span class="linenos">625</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse-626"><a href="#ClickHouse-626"><span class="linenos">626</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-627"><a href="#ClickHouse-627"><span class="linenos">627</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
-</span><span id="ClickHouse-628"><a href="#ClickHouse-628"><span class="linenos">628</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
-</span><span id="ClickHouse-629"><a href="#ClickHouse-629"><span class="linenos">629</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="ClickHouse-630"><a href="#ClickHouse-630"><span class="linenos">630</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
-</span><span id="ClickHouse-631"><a href="#ClickHouse-631"><span class="linenos">631</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="ClickHouse-632"><a href="#ClickHouse-632"><span class="linenos">632</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
-</span><span id="ClickHouse-633"><a href="#ClickHouse-633"><span class="linenos">633</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="ClickHouse-634"><a href="#ClickHouse-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="n">default</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse-635"><a href="#ClickHouse-635"><span class="linenos">635</span></a> <span class="k">return</span> <span class="n">prefix</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;has&quot;</span><span class="p">,</span> <span class="n">arr</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-636"><a href="#ClickHouse-636"><span class="linenos">636</span></a>
-</span><span id="ClickHouse-637"><a href="#ClickHouse-637"><span class="linenos">637</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-638"><a href="#ClickHouse-638"><span class="linenos">638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
-</span><span id="ClickHouse-639"><a href="#ClickHouse-639"><span class="linenos">639</span></a>
-</span><span id="ClickHouse-640"><a href="#ClickHouse-640"><span class="linenos">640</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-641"><a href="#ClickHouse-641"><span class="linenos">641</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-642"><a href="#ClickHouse-642"><span class="linenos">642</span></a>
-</span><span id="ClickHouse-643"><a href="#ClickHouse-643"><span class="linenos">643</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-644"><a href="#ClickHouse-644"><span class="linenos">644</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
-</span><span id="ClickHouse-645"><a href="#ClickHouse-645"><span class="linenos">645</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse-646"><a href="#ClickHouse-646"><span class="linenos">646</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="ClickHouse-647"><a href="#ClickHouse-647"><span class="linenos">647</span></a>
-</span><span id="ClickHouse-648"><a href="#ClickHouse-648"><span class="linenos">648</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-649"><a href="#ClickHouse-649"><span class="linenos">649</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
-</span><span id="ClickHouse-650"><a href="#ClickHouse-650"><span class="linenos">650</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
-</span><span id="ClickHouse-651"><a href="#ClickHouse-651"><span class="linenos">651</span></a> <span class="c1">#</span>
-</span><span id="ClickHouse-652"><a href="#ClickHouse-652"><span class="linenos">652</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
-</span><span id="ClickHouse-653"><a href="#ClickHouse-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
-</span><span id="ClickHouse-654"><a href="#ClickHouse-654"><span class="linenos">654</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
-</span><span id="ClickHouse-655"><a href="#ClickHouse-655"><span class="linenos">655</span></a>
-</span><span id="ClickHouse-656"><a href="#ClickHouse-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse-657"><a href="#ClickHouse-657"><span class="linenos">657</span></a>
-</span><span id="ClickHouse-658"><a href="#ClickHouse-658"><span class="linenos">658</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-659"><a href="#ClickHouse-659"><span class="linenos">659</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
-</span><span id="ClickHouse-660"><a href="#ClickHouse-660"><span class="linenos">660</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-661"><a href="#ClickHouse-661"><span class="linenos">661</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-662"><a href="#ClickHouse-662"><span class="linenos">662</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse-663"><a href="#ClickHouse-663"><span class="linenos">663</span></a>
-</span><span id="ClickHouse-664"><a href="#ClickHouse-664"><span class="linenos">664</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse-665"><a href="#ClickHouse-665"><span class="linenos">665</span></a>
-</span><span id="ClickHouse-666"><a href="#ClickHouse-666"><span class="linenos">666</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="ClickHouse-667"><a href="#ClickHouse-667"><span class="linenos">667</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="ClickHouse-668"><a href="#ClickHouse-668"><span class="linenos">668</span></a> <span class="p">(</span>
-</span><span id="ClickHouse-669"><a href="#ClickHouse-669"><span class="linenos">669</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-670"><a href="#ClickHouse-670"><span class="linenos">670</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-671"><a href="#ClickHouse-671"><span class="linenos">671</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse-672"><a href="#ClickHouse-672"><span class="linenos">672</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-673"><a href="#ClickHouse-673"><span class="linenos">673</span></a> <span class="p">(</span>
-</span><span id="ClickHouse-674"><a href="#ClickHouse-674"><span class="linenos">674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-675"><a href="#ClickHouse-675"><span class="linenos">675</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-676"><a href="#ClickHouse-676"><span class="linenos">676</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse-677"><a href="#ClickHouse-677"><span class="linenos">677</span></a> <span class="p">),</span>
-</span><span id="ClickHouse-678"><a href="#ClickHouse-678"><span class="linenos">678</span></a> <span class="p">]</span>
-</span><span id="ClickHouse-679"><a href="#ClickHouse-679"><span class="linenos">679</span></a>
-</span><span id="ClickHouse-680"><a href="#ClickHouse-680"><span class="linenos">680</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-681"><a href="#ClickHouse-681"><span class="linenos">681</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse-682"><a href="#ClickHouse-682"><span class="linenos">682</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse-471"><a href="#ClickHouse-471"><span class="linenos">471</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
+</span><span id="ClickHouse-472"><a href="#ClickHouse-472"><span class="linenos">472</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="ClickHouse-473"><a href="#ClickHouse-473"><span class="linenos">473</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="ClickHouse-474"><a href="#ClickHouse-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse-475"><a href="#ClickHouse-475"><span class="linenos">475</span></a> <span class="k">return</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_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse-476"><a href="#ClickHouse-476"><span class="linenos">476</span></a>
+</span><span id="ClickHouse-477"><a href="#ClickHouse-477"><span class="linenos">477</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">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse-478"><a href="#ClickHouse-478"><span class="linenos">478</span></a> <span class="n">params</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_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse-479"><a href="#ClickHouse-479"><span class="linenos">479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-480"><a href="#ClickHouse-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="n">params</span>
+</span><span id="ClickHouse-481"><a href="#ClickHouse-481"><span class="linenos">481</span></a>
+</span><span id="ClickHouse-482"><a href="#ClickHouse-482"><span class="linenos">482</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse-483"><a href="#ClickHouse-483"><span class="linenos">483</span></a>
+</span><span id="ClickHouse-484"><a href="#ClickHouse-484"><span class="linenos">484</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</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">Quantile</span><span class="p">:</span>
+</span><span id="ClickHouse-485"><a href="#ClickHouse-485"><span class="linenos">485</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="ClickHouse-486"><a href="#ClickHouse-486"><span class="linenos">486</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
+</span><span id="ClickHouse-487"><a href="#ClickHouse-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse-488"><a href="#ClickHouse-488"><span class="linenos">488</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">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-489"><a href="#ClickHouse-489"><span class="linenos">489</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">Quantile</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">quantile</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="mf">0.5</span><span class="p">))</span>
+</span><span id="ClickHouse-490"><a href="#ClickHouse-490"><span class="linenos">490</span></a>
+</span><span id="ClickHouse-491"><a href="#ClickHouse-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse-492"><a href="#ClickHouse-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-493"><a href="#ClickHouse-493"><span class="linenos">493</span></a>
+</span><span id="ClickHouse-494"><a href="#ClickHouse-494"><span class="linenos">494</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse-495"><a href="#ClickHouse-495"><span class="linenos">495</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-496"><a href="#ClickHouse-496"><span class="linenos">496</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="ClickHouse-497"><a href="#ClickHouse-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse-498"><a href="#ClickHouse-498"><span class="linenos">498</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
+</span><span id="ClickHouse-499"><a href="#ClickHouse-499"><span class="linenos">499</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-500"><a href="#ClickHouse-500"><span class="linenos">500</span></a>
+</span><span id="ClickHouse-501"><a href="#ClickHouse-501"><span class="linenos">501</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</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="ClickHouse-502"><a href="#ClickHouse-502"><span class="linenos">502</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse-503"><a href="#ClickHouse-503"><span class="linenos">503</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;CLUSTER&quot;</span><span class="p">):</span>
+</span><span id="ClickHouse-504"><a href="#ClickHouse-504"><span class="linenos">504</span></a> <span class="n">this</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><span id="ClickHouse-505"><a href="#ClickHouse-505"><span class="linenos">505</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="ClickHouse-506"><a href="#ClickHouse-506"><span class="linenos">506</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">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-507"><a href="#ClickHouse-507"><span class="linenos">507</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="ClickHouse-508"><a href="#ClickHouse-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse-509"><a href="#ClickHouse-509"><span class="linenos">509</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse-510"><a href="#ClickHouse-510"><span class="linenos">510</span></a>
+</span><span id="ClickHouse-511"><a href="#ClickHouse-511"><span class="linenos">511</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="ClickHouse-512"><a href="#ClickHouse-512"><span class="linenos">512</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-513"><a href="#ClickHouse-513"><span class="linenos">513</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-514"><a href="#ClickHouse-514"><span class="linenos">514</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-515"><a href="#ClickHouse-515"><span class="linenos">515</span></a> <span class="n">TABLESAMPLE_REQUIRES_PARENS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-516"><a href="#ClickHouse-516"><span class="linenos">516</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-517"><a href="#ClickHouse-517"><span class="linenos">517</span></a> <span class="n">TABLESAMPLE_KEYWORDS</span> <span class="o">=</span> <span class="s2">&quot;SAMPLE&quot;</span>
+</span><span id="ClickHouse-518"><a href="#ClickHouse-518"><span class="linenos">518</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-519"><a href="#ClickHouse-519"><span class="linenos">519</span></a>
+</span><span id="ClickHouse-520"><a href="#ClickHouse-520"><span class="linenos">520</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-521"><a href="#ClickHouse-521"><span class="linenos">521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-522"><a href="#ClickHouse-522"><span class="linenos">522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-523"><a href="#ClickHouse-523"><span class="linenos">523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-524"><a href="#ClickHouse-524"><span class="linenos">524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-525"><a href="#ClickHouse-525"><span class="linenos">525</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-526"><a href="#ClickHouse-526"><span class="linenos">526</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-527"><a href="#ClickHouse-527"><span class="linenos">527</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-528"><a href="#ClickHouse-528"><span class="linenos">528</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-529"><a href="#ClickHouse-529"><span class="linenos">529</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-530"><a href="#ClickHouse-530"><span class="linenos">530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-531"><a href="#ClickHouse-531"><span class="linenos">531</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-532"><a href="#ClickHouse-532"><span class="linenos">532</span></a>
+</span><span id="ClickHouse-533"><a href="#ClickHouse-533"><span class="linenos">533</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-534"><a href="#ClickHouse-534"><span class="linenos">534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="ClickHouse-535"><a href="#ClickHouse-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="ClickHouse-536"><a href="#ClickHouse-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="ClickHouse-537"><a href="#ClickHouse-537"><span class="linenos">537</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-538"><a href="#ClickHouse-538"><span class="linenos">538</span></a>
+</span><span id="ClickHouse-539"><a href="#ClickHouse-539"><span class="linenos">539</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-540"><a href="#ClickHouse-540"><span class="linenos">540</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><span id="ClickHouse-541"><a href="#ClickHouse-541"><span class="linenos">541</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="ClickHouse-542"><a href="#ClickHouse-542"><span class="linenos">542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-543"><a href="#ClickHouse-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-544"><a href="#ClickHouse-544"><span class="linenos">544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE32</span><span class="p">:</span> <span class="s2">&quot;Date32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-545"><a href="#ClickHouse-545"><span class="linenos">545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-546"><a href="#ClickHouse-546"><span class="linenos">546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-547"><a href="#ClickHouse-547"><span class="linenos">547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-548"><a href="#ClickHouse-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-549"><a href="#ClickHouse-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-550"><a href="#ClickHouse-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-551"><a href="#ClickHouse-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-552"><a href="#ClickHouse-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-553"><a href="#ClickHouse-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-554"><a href="#ClickHouse-554"><span class="linenos">554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-555"><a href="#ClickHouse-555"><span class="linenos">555</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-556"><a href="#ClickHouse-556"><span class="linenos">556</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-557"><a href="#ClickHouse-557"><span class="linenos">557</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-558"><a href="#ClickHouse-558"><span class="linenos">558</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-559"><a href="#ClickHouse-559"><span class="linenos">559</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-560"><a href="#ClickHouse-560"><span class="linenos">560</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-561"><a href="#ClickHouse-561"><span class="linenos">561</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-562"><a href="#ClickHouse-562"><span class="linenos">562</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-563"><a href="#ClickHouse-563"><span class="linenos">563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-564"><a href="#ClickHouse-564"><span class="linenos">564</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-565"><a href="#ClickHouse-565"><span class="linenos">565</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-566"><a href="#ClickHouse-566"><span class="linenos">566</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-567"><a href="#ClickHouse-567"><span class="linenos">567</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-568"><a href="#ClickHouse-568"><span class="linenos">568</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-569"><a href="#ClickHouse-569"><span class="linenos">569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV4</span><span class="p">:</span> <span class="s2">&quot;IPv4&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-570"><a href="#ClickHouse-570"><span class="linenos">570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV6</span><span class="p">:</span> <span class="s2">&quot;IPv6&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-571"><a href="#ClickHouse-571"><span class="linenos">571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;AggregateFunction&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-572"><a href="#ClickHouse-572"><span class="linenos">572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;SimpleAggregateFunction&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-573"><a href="#ClickHouse-573"><span class="linenos">573</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-574"><a href="#ClickHouse-574"><span class="linenos">574</span></a>
+</span><span id="ClickHouse-575"><a href="#ClickHouse-575"><span class="linenos">575</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-576"><a href="#ClickHouse-576"><span class="linenos">576</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><span id="ClickHouse-577"><a href="#ClickHouse-577"><span class="linenos">577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-578"><a href="#ClickHouse-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-579"><a href="#ClickHouse-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arraySum&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-580"><a href="#ClickHouse-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMax&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-581"><a href="#ClickHouse-581"><span class="linenos">581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMin&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-582"><a href="#ClickHouse-582"><span class="linenos">582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="ClickHouse-583"><a href="#ClickHouse-583"><span class="linenos">583</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-584"><a href="#ClickHouse-584"><span class="linenos">584</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;countIf&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-585"><a href="#ClickHouse-585"><span class="linenos">585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="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;CURRENT_DATE&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-586"><a href="#ClickHouse-586"><span class="linenos">586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-587"><a href="#ClickHouse-587"><span class="linenos">587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-588"><a href="#ClickHouse-588"><span class="linenos">588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arrayJoin&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-589"><a href="#ClickHouse-589"><span class="linenos">589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-590"><a href="#ClickHouse-590"><span class="linenos">590</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;isNaN&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-591"><a href="#ClickHouse-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSONExtractString&quot;</span><span class="p">,</span> <span class="n">quoted_index</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="ClickHouse-592"><a href="#ClickHouse-592"><span class="linenos">592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSONExtractString&quot;</span><span class="p">,</span> <span class="n">quoted_index</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="ClickHouse-593"><a href="#ClickHouse-593"><span class="linenos">593</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">:</span> <span class="n">json_path_key_only_name</span><span class="p">,</span>
+</span><span id="ClickHouse-594"><a href="#ClickHouse-594"><span class="linenos">594</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-595"><a href="#ClickHouse-595"><span class="linenos">595</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse-596"><a href="#ClickHouse-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;nullIf&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-597"><a href="#ClickHouse-597"><span class="linenos">597</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-598"><a href="#ClickHouse-598"><span class="linenos">598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="ClickHouse-599"><a href="#ClickHouse-599"><span class="linenos">599</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
+</span><span id="ClickHouse-600"><a href="#ClickHouse-600"><span class="linenos">600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-601"><a href="#ClickHouse-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;randCanonical&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-602"><a href="#ClickHouse-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">]),</span>
+</span><span id="ClickHouse-603"><a href="#ClickHouse-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;startsWith&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse-604"><a href="#ClickHouse-604"><span class="linenos">604</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-605"><a href="#ClickHouse-605"><span class="linenos">605</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-606"><a href="#ClickHouse-606"><span class="linenos">606</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse-607"><a href="#ClickHouse-607"><span class="linenos">607</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</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;xor&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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
+</span><span id="ClickHouse-608"><a href="#ClickHouse-608"><span class="linenos">608</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-609"><a href="#ClickHouse-609"><span class="linenos">609</span></a>
+</span><span id="ClickHouse-610"><a href="#ClickHouse-610"><span class="linenos">610</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-611"><a href="#ClickHouse-611"><span class="linenos">611</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><span id="ClickHouse-612"><a href="#ClickHouse-612"><span class="linenos">612</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="ClickHouse-613"><a href="#ClickHouse-613"><span class="linenos">613</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="ClickHouse-614"><a href="#ClickHouse-614"><span class="linenos">614</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="ClickHouse-615"><a href="#ClickHouse-615"><span class="linenos">615</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-616"><a href="#ClickHouse-616"><span class="linenos">616</span></a>
+</span><span id="ClickHouse-617"><a href="#ClickHouse-617"><span class="linenos">617</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-618"><a href="#ClickHouse-618"><span class="linenos">618</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse-619"><a href="#ClickHouse-619"><span class="linenos">619</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse-620"><a href="#ClickHouse-620"><span class="linenos">620</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse-621"><a href="#ClickHouse-621"><span class="linenos">621</span></a>
+</span><span id="ClickHouse-622"><a href="#ClickHouse-622"><span class="linenos">622</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
+</span><span id="ClickHouse-623"><a href="#ClickHouse-623"><span class="linenos">623</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
+</span><span id="ClickHouse-624"><a href="#ClickHouse-624"><span class="linenos">624</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse-625"><a href="#ClickHouse-625"><span class="linenos">625</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-626"><a href="#ClickHouse-626"><span class="linenos">626</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-627"><a href="#ClickHouse-627"><span class="linenos">627</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-628"><a href="#ClickHouse-628"><span class="linenos">628</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-629"><a href="#ClickHouse-629"><span class="linenos">629</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-630"><a href="#ClickHouse-630"><span class="linenos">630</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-631"><a href="#ClickHouse-631"><span class="linenos">631</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-632"><a href="#ClickHouse-632"><span class="linenos">632</span></a> <span class="p">}</span>
+</span><span id="ClickHouse-633"><a href="#ClickHouse-633"><span class="linenos">633</span></a>
+</span><span id="ClickHouse-634"><a href="#ClickHouse-634"><span class="linenos">634</span></a> <span class="k">def</span> <span class="nf">_jsonpathsubscript_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">JSONPathSubscript</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-635"><a href="#ClickHouse-635"><span class="linenos">635</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-636"><a href="#ClickHouse-636"><span class="linenos">636</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="ClickHouse-637"><a href="#ClickHouse-637"><span class="linenos">637</span></a>
+</span><span id="ClickHouse-638"><a href="#ClickHouse-638"><span class="linenos">638</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-639"><a href="#ClickHouse-639"><span class="linenos">639</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="ClickHouse-640"><a href="#ClickHouse-640"><span class="linenos">640</span></a>
+</span><span id="ClickHouse-641"><a href="#ClickHouse-641"><span class="linenos">641</span></a> <span class="k">def</span> <span class="nf">_any_to_has</span><span class="p">(</span>
+</span><span id="ClickHouse-642"><a href="#ClickHouse-642"><span class="linenos">642</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse-643"><a href="#ClickHouse-643"><span class="linenos">643</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="ClickHouse-644"><a href="#ClickHouse-644"><span class="linenos">644</span></a> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">],</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="ClickHouse-645"><a href="#ClickHouse-645"><span class="linenos">645</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse-646"><a href="#ClickHouse-646"><span class="linenos">646</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-647"><a href="#ClickHouse-647"><span class="linenos">647</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
+</span><span id="ClickHouse-648"><a href="#ClickHouse-648"><span class="linenos">648</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="ClickHouse-649"><a href="#ClickHouse-649"><span class="linenos">649</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="ClickHouse-650"><a href="#ClickHouse-650"><span class="linenos">650</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
+</span><span id="ClickHouse-651"><a href="#ClickHouse-651"><span class="linenos">651</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="ClickHouse-652"><a href="#ClickHouse-652"><span class="linenos">652</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="ClickHouse-653"><a href="#ClickHouse-653"><span class="linenos">653</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="ClickHouse-654"><a href="#ClickHouse-654"><span class="linenos">654</span></a> <span class="k">return</span> <span class="n">default</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-655"><a href="#ClickHouse-655"><span class="linenos">655</span></a> <span class="k">return</span> <span class="n">prefix</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;has&quot;</span><span class="p">,</span> <span class="n">arr</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-656"><a href="#ClickHouse-656"><span class="linenos">656</span></a>
+</span><span id="ClickHouse-657"><a href="#ClickHouse-657"><span class="linenos">657</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-658"><a href="#ClickHouse-658"><span class="linenos">658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
+</span><span id="ClickHouse-659"><a href="#ClickHouse-659"><span class="linenos">659</span></a>
+</span><span id="ClickHouse-660"><a href="#ClickHouse-660"><span class="linenos">660</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-661"><a href="#ClickHouse-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-662"><a href="#ClickHouse-662"><span class="linenos">662</span></a>
+</span><span id="ClickHouse-663"><a href="#ClickHouse-663"><span class="linenos">663</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-664"><a href="#ClickHouse-664"><span class="linenos">664</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
+</span><span id="ClickHouse-665"><a href="#ClickHouse-665"><span class="linenos">665</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-666"><a href="#ClickHouse-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse-667"><a href="#ClickHouse-667"><span class="linenos">667</span></a>
+</span><span id="ClickHouse-668"><a href="#ClickHouse-668"><span class="linenos">668</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-669"><a href="#ClickHouse-669"><span class="linenos">669</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="ClickHouse-670"><a href="#ClickHouse-670"><span class="linenos">670</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="ClickHouse-671"><a href="#ClickHouse-671"><span class="linenos">671</span></a> <span class="c1">#</span>
+</span><span id="ClickHouse-672"><a href="#ClickHouse-672"><span class="linenos">672</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="ClickHouse-673"><a href="#ClickHouse-673"><span class="linenos">673</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="ClickHouse-674"><a href="#ClickHouse-674"><span class="linenos">674</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
+</span><span id="ClickHouse-675"><a href="#ClickHouse-675"><span class="linenos">675</span></a>
+</span><span id="ClickHouse-676"><a href="#ClickHouse-676"><span class="linenos">676</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-677"><a href="#ClickHouse-677"><span class="linenos">677</span></a>
+</span><span id="ClickHouse-678"><a href="#ClickHouse-678"><span class="linenos">678</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-679"><a href="#ClickHouse-679"><span class="linenos">679</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
+</span><span id="ClickHouse-680"><a href="#ClickHouse-680"><span class="linenos">680</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-681"><a href="#ClickHouse-681"><span class="linenos">681</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-682"><a href="#ClickHouse-682"><span class="linenos">682</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="ClickHouse-683"><a href="#ClickHouse-683"><span class="linenos">683</span></a>
-</span><span id="ClickHouse-684"><a href="#ClickHouse-684"><span class="linenos">684</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-685"><a href="#ClickHouse-685"><span class="linenos">685</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="ClickHouse-686"><a href="#ClickHouse-686"><span class="linenos">686</span></a>
-</span><span id="ClickHouse-687"><a href="#ClickHouse-687"><span class="linenos">687</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-688"><a href="#ClickHouse-688"><span class="linenos">688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse-689"><a href="#ClickHouse-689"><span class="linenos">689</span></a>
-</span><span id="ClickHouse-690"><a href="#ClickHouse-690"><span class="linenos">690</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-691"><a href="#ClickHouse-691"><span class="linenos">691</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse-692"><a href="#ClickHouse-692"><span class="linenos">692</span></a>
-</span><span id="ClickHouse-693"><a href="#ClickHouse-693"><span class="linenos">693</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-694"><a href="#ClickHouse-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse-695"><a href="#ClickHouse-695"><span class="linenos">695</span></a>
-</span><span id="ClickHouse-696"><a href="#ClickHouse-696"><span class="linenos">696</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-697"><a href="#ClickHouse-697"><span class="linenos">697</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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="ClickHouse-698"><a href="#ClickHouse-698"><span class="linenos">698</span></a>
-</span><span id="ClickHouse-699"><a href="#ClickHouse-699"><span class="linenos">699</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse-700"><a href="#ClickHouse-700"><span class="linenos">700</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="ClickHouse-701"><a href="#ClickHouse-701"><span class="linenos">701</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="ClickHouse-702"><a href="#ClickHouse-702"><span class="linenos">702</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse-703"><a href="#ClickHouse-703"><span class="linenos">703</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="ClickHouse-704"><a href="#ClickHouse-704"><span class="linenos">704</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="ClickHouse-705"><a href="#ClickHouse-705"><span class="linenos">705</span></a> <span class="p">)</span>
-</span><span id="ClickHouse-706"><a href="#ClickHouse-706"><span class="linenos">706</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse-707"><a href="#ClickHouse-707"><span class="linenos">707</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse-708"><a href="#ClickHouse-708"><span class="linenos">708</span></a>
-</span><span id="ClickHouse-709"><a href="#ClickHouse-709"><span class="linenos">709</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+</span><span id="ClickHouse-684"><a href="#ClickHouse-684"><span class="linenos">684</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-685"><a href="#ClickHouse-685"><span class="linenos">685</span></a>
+</span><span id="ClickHouse-686"><a href="#ClickHouse-686"><span class="linenos">686</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="ClickHouse-687"><a href="#ClickHouse-687"><span class="linenos">687</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="ClickHouse-688"><a href="#ClickHouse-688"><span class="linenos">688</span></a> <span class="p">(</span>
+</span><span id="ClickHouse-689"><a href="#ClickHouse-689"><span class="linenos">689</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-690"><a href="#ClickHouse-690"><span class="linenos">690</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-691"><a href="#ClickHouse-691"><span class="linenos">691</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse-692"><a href="#ClickHouse-692"><span class="linenos">692</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-693"><a href="#ClickHouse-693"><span class="linenos">693</span></a> <span class="p">(</span>
+</span><span id="ClickHouse-694"><a href="#ClickHouse-694"><span class="linenos">694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-695"><a href="#ClickHouse-695"><span class="linenos">695</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-696"><a href="#ClickHouse-696"><span class="linenos">696</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse-697"><a href="#ClickHouse-697"><span class="linenos">697</span></a> <span class="p">),</span>
+</span><span id="ClickHouse-698"><a href="#ClickHouse-698"><span class="linenos">698</span></a> <span class="p">]</span>
+</span><span id="ClickHouse-699"><a href="#ClickHouse-699"><span class="linenos">699</span></a>
+</span><span id="ClickHouse-700"><a href="#ClickHouse-700"><span class="linenos">700</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-701"><a href="#ClickHouse-701"><span class="linenos">701</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse-702"><a href="#ClickHouse-702"><span class="linenos">702</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse-703"><a href="#ClickHouse-703"><span class="linenos">703</span></a>
+</span><span id="ClickHouse-704"><a href="#ClickHouse-704"><span class="linenos">704</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-705"><a href="#ClickHouse-705"><span class="linenos">705</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="ClickHouse-706"><a href="#ClickHouse-706"><span class="linenos">706</span></a>
+</span><span id="ClickHouse-707"><a href="#ClickHouse-707"><span class="linenos">707</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-708"><a href="#ClickHouse-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-709"><a href="#ClickHouse-709"><span class="linenos">709</span></a>
+</span><span id="ClickHouse-710"><a href="#ClickHouse-710"><span class="linenos">710</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-711"><a href="#ClickHouse-711"><span class="linenos">711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse-712"><a href="#ClickHouse-712"><span class="linenos">712</span></a>
+</span><span id="ClickHouse-713"><a href="#ClickHouse-713"><span class="linenos">713</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-714"><a href="#ClickHouse-714"><span class="linenos">714</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse-715"><a href="#ClickHouse-715"><span class="linenos">715</span></a>
+</span><span id="ClickHouse-716"><a href="#ClickHouse-716"><span class="linenos">716</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-717"><a href="#ClickHouse-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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="ClickHouse-718"><a href="#ClickHouse-718"><span class="linenos">718</span></a>
+</span><span id="ClickHouse-719"><a href="#ClickHouse-719"><span class="linenos">719</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse-720"><a href="#ClickHouse-720"><span class="linenos">720</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="ClickHouse-721"><a href="#ClickHouse-721"><span class="linenos">721</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="ClickHouse-722"><a href="#ClickHouse-722"><span class="linenos">722</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse-723"><a href="#ClickHouse-723"><span class="linenos">723</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="ClickHouse-724"><a href="#ClickHouse-724"><span class="linenos">724</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="ClickHouse-725"><a href="#ClickHouse-725"><span class="linenos">725</span></a> <span class="p">)</span>
+</span><span id="ClickHouse-726"><a href="#ClickHouse-726"><span class="linenos">726</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse-727"><a href="#ClickHouse-727"><span class="linenos">727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse-728"><a href="#ClickHouse-728"><span class="linenos">728</span></a>
+</span><span id="ClickHouse-729"><a href="#ClickHouse-729"><span class="linenos">729</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -2076,50 +2116,50 @@ Possible values: <code>"nulls_are_small"</code>, <code>"nulls_are_large"</code>,
</div>
<a class="headerlink" href="#ClickHouse.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Tokenizer-56"><a href="#ClickHouse.Tokenizer-56"><span class="linenos">56</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="ClickHouse.Tokenizer-57"><a href="#ClickHouse.Tokenizer-57"><span class="linenos">57</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</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="ClickHouse.Tokenizer-58"><a href="#ClickHouse.Tokenizer-58"><span class="linenos">58</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="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse.Tokenizer-59"><a href="#ClickHouse.Tokenizer-59"><span class="linenos">59</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse.Tokenizer-60"><a href="#ClickHouse.Tokenizer-60"><span class="linenos">60</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse.Tokenizer-61"><a href="#ClickHouse.Tokenizer-61"><span class="linenos">61</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
-</span><span id="ClickHouse.Tokenizer-62"><a href="#ClickHouse.Tokenizer-62"><span class="linenos">62</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="ClickHouse.Tokenizer-63"><a href="#ClickHouse.Tokenizer-63"><span class="linenos">63</span></a>
-</span><span id="ClickHouse.Tokenizer-64"><a href="#ClickHouse.Tokenizer-64"><span class="linenos">64</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Tokenizer-65"><a href="#ClickHouse.Tokenizer-65"><span class="linenos">65</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="ClickHouse.Tokenizer-66"><a href="#ClickHouse.Tokenizer-66"><span class="linenos">66</span></a> <span class="s2">&quot;ATTACH&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="ClickHouse.Tokenizer-67"><a href="#ClickHouse.Tokenizer-67"><span class="linenos">67</span></a> <span class="s2">&quot;DATE32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-68"><a href="#ClickHouse.Tokenizer-68"><span class="linenos">68</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-69"><a href="#ClickHouse.Tokenizer-69"><span class="linenos">69</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-70"><a href="#ClickHouse.Tokenizer-70"><span class="linenos">70</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-71"><a href="#ClickHouse.Tokenizer-71"><span class="linenos">71</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-72"><a href="#ClickHouse.Tokenizer-72"><span class="linenos">72</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-73"><a href="#ClickHouse.Tokenizer-73"><span class="linenos">73</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-74"><a href="#ClickHouse.Tokenizer-74"><span class="linenos">74</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-75"><a href="#ClickHouse.Tokenizer-75"><span class="linenos">75</span></a> <span class="s2">&quot;FLOAT32&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="ClickHouse.Tokenizer-76"><a href="#ClickHouse.Tokenizer-76"><span class="linenos">76</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-77"><a href="#ClickHouse.Tokenizer-77"><span class="linenos">77</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-78"><a href="#ClickHouse.Tokenizer-78"><span class="linenos">78</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-79"><a href="#ClickHouse.Tokenizer-79"><span class="linenos">79</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-80"><a href="#ClickHouse.Tokenizer-80"><span class="linenos">80</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-81"><a href="#ClickHouse.Tokenizer-81"><span class="linenos">81</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-82"><a href="#ClickHouse.Tokenizer-82"><span class="linenos">82</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-83"><a href="#ClickHouse.Tokenizer-83"><span class="linenos">83</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-84"><a href="#ClickHouse.Tokenizer-84"><span class="linenos">84</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-85"><a href="#ClickHouse.Tokenizer-85"><span class="linenos">85</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-86"><a href="#ClickHouse.Tokenizer-86"><span class="linenos">86</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-87"><a href="#ClickHouse.Tokenizer-87"><span class="linenos">87</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-88"><a href="#ClickHouse.Tokenizer-88"><span class="linenos">88</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-89"><a href="#ClickHouse.Tokenizer-89"><span class="linenos">89</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-90"><a href="#ClickHouse.Tokenizer-90"><span class="linenos">90</span></a> <span class="s2">&quot;IPV4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-91"><a href="#ClickHouse.Tokenizer-91"><span class="linenos">91</span></a> <span class="s2">&quot;IPV6&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-92"><a href="#ClickHouse.Tokenizer-92"><span class="linenos">92</span></a> <span class="s2">&quot;AGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-93"><a href="#ClickHouse.Tokenizer-93"><span class="linenos">93</span></a> <span class="s2">&quot;SIMPLEAGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-94"><a href="#ClickHouse.Tokenizer-94"><span class="linenos">94</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Tokenizer-95"><a href="#ClickHouse.Tokenizer-95"><span class="linenos">95</span></a>
-</span><span id="ClickHouse.Tokenizer-96"><a href="#ClickHouse.Tokenizer-96"><span class="linenos">96</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Tokenizer-97"><a href="#ClickHouse.Tokenizer-97"><span class="linenos">97</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">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-98"><a href="#ClickHouse.Tokenizer-98"><span class="linenos">98</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
-</span><span id="ClickHouse.Tokenizer-99"><a href="#ClickHouse.Tokenizer-99"><span class="linenos">99</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Tokenizer-59"><a href="#ClickHouse.Tokenizer-59"><span class="linenos"> 59</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="ClickHouse.Tokenizer-60"><a href="#ClickHouse.Tokenizer-60"><span class="linenos"> 60</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;#!&quot;</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="ClickHouse.Tokenizer-61"><a href="#ClickHouse.Tokenizer-61"><span class="linenos"> 61</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="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse.Tokenizer-62"><a href="#ClickHouse.Tokenizer-62"><span class="linenos"> 62</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse.Tokenizer-63"><a href="#ClickHouse.Tokenizer-63"><span class="linenos"> 63</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0b&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse.Tokenizer-64"><a href="#ClickHouse.Tokenizer-64"><span class="linenos"> 64</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;0x&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;0X&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)]</span>
+</span><span id="ClickHouse.Tokenizer-65"><a href="#ClickHouse.Tokenizer-65"><span class="linenos"> 65</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="ClickHouse.Tokenizer-66"><a href="#ClickHouse.Tokenizer-66"><span class="linenos"> 66</span></a>
+</span><span id="ClickHouse.Tokenizer-67"><a href="#ClickHouse.Tokenizer-67"><span class="linenos"> 67</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Tokenizer-68"><a href="#ClickHouse.Tokenizer-68"><span class="linenos"> 68</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="ClickHouse.Tokenizer-69"><a href="#ClickHouse.Tokenizer-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;ATTACH&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="ClickHouse.Tokenizer-70"><a href="#ClickHouse.Tokenizer-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;DATE32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-71"><a href="#ClickHouse.Tokenizer-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;DATETIME64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-72"><a href="#ClickHouse.Tokenizer-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-73"><a href="#ClickHouse.Tokenizer-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;ENUM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-74"><a href="#ClickHouse.Tokenizer-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;ENUM8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-75"><a href="#ClickHouse.Tokenizer-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;ENUM16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-76"><a href="#ClickHouse.Tokenizer-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;FINAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-77"><a href="#ClickHouse.Tokenizer-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;FIXEDSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-78"><a href="#ClickHouse.Tokenizer-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;FLOAT32&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="ClickHouse.Tokenizer-79"><a href="#ClickHouse.Tokenizer-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;FLOAT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-80"><a href="#ClickHouse.Tokenizer-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-81"><a href="#ClickHouse.Tokenizer-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;INT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-82"><a href="#ClickHouse.Tokenizer-82"><span class="linenos"> 82</span></a> <span class="s2">&quot;LOWCARDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-83"><a href="#ClickHouse.Tokenizer-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-84"><a href="#ClickHouse.Tokenizer-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;NESTED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-85"><a href="#ClickHouse.Tokenizer-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-86"><a href="#ClickHouse.Tokenizer-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;TUPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-87"><a href="#ClickHouse.Tokenizer-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;UINT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-88"><a href="#ClickHouse.Tokenizer-88"><span class="linenos"> 88</span></a> <span class="s2">&quot;UINT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-89"><a href="#ClickHouse.Tokenizer-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;UINT256&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-90"><a href="#ClickHouse.Tokenizer-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;UINT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-91"><a href="#ClickHouse.Tokenizer-91"><span class="linenos"> 91</span></a> <span class="s2">&quot;UINT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-92"><a href="#ClickHouse.Tokenizer-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;UINT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-93"><a href="#ClickHouse.Tokenizer-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;IPV4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-94"><a href="#ClickHouse.Tokenizer-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;IPV6&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-95"><a href="#ClickHouse.Tokenizer-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;AGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-96"><a href="#ClickHouse.Tokenizer-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;SIMPLEAGGREGATEFUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-97"><a href="#ClickHouse.Tokenizer-97"><span class="linenos"> 97</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Tokenizer-98"><a href="#ClickHouse.Tokenizer-98"><span class="linenos"> 98</span></a>
+</span><span id="ClickHouse.Tokenizer-99"><a href="#ClickHouse.Tokenizer-99"><span class="linenos"> 99</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Tokenizer-100"><a href="#ClickHouse.Tokenizer-100"><span class="linenos">100</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">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-101"><a href="#ClickHouse.Tokenizer-101"><span class="linenos">101</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
+</span><span id="ClickHouse.Tokenizer-102"><a href="#ClickHouse.Tokenizer-102"><span class="linenos">102</span></a> <span class="p">}</span>
</span></pre></div>
@@ -2234,6 +2274,8 @@ Possible values: <code>"nulls_are_small"</code>, <code>"nulls_are_large"</code>,
<dd id="ClickHouse.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="ClickHouse.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="ClickHouse.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="ClickHouse.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="ClickHouse.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="ClickHouse.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="ClickHouse.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="ClickHouse.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -2262,409 +2304,412 @@ Possible values: <code>"nulls_are_small"</code>, <code>"nulls_are_large"</code>,
</div>
<a class="headerlink" href="#ClickHouse.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Parser-101"><a href="#ClickHouse.Parser-101"><span class="linenos">101</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="ClickHouse.Parser-102"><a href="#ClickHouse.Parser-102"><span class="linenos">102</span></a> <span class="c1"># Tested in ClickHouse&#39;s playground, it seems that the following two queries do the same thing</span>
-</span><span id="ClickHouse.Parser-103"><a href="#ClickHouse.Parser-103"><span class="linenos">103</span></a> <span class="c1"># * select x from t1 union all select x from t2 limit 1;</span>
-</span><span id="ClickHouse.Parser-104"><a href="#ClickHouse.Parser-104"><span class="linenos">104</span></a> <span class="c1"># * select x from t1 union all (select x from t2 limit 1);</span>
-</span><span id="ClickHouse.Parser-105"><a href="#ClickHouse.Parser-105"><span class="linenos">105</span></a> <span class="n">MODIFIERS_ATTACHED_TO_UNION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Parser-106"><a href="#ClickHouse.Parser-106"><span class="linenos">106</span></a>
-</span><span id="ClickHouse.Parser-107"><a href="#ClickHouse.Parser-107"><span class="linenos">107</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-108"><a href="#ClickHouse.Parser-108"><span class="linenos">108</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><span id="ClickHouse.Parser-109"><a href="#ClickHouse.Parser-109"><span class="linenos">109</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-110"><a href="#ClickHouse.Parser-110"><span class="linenos">110</span></a> <span class="s2">&quot;ARRAYSUM&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-111"><a href="#ClickHouse.Parser-111"><span class="linenos">111</span></a> <span class="s2">&quot;COUNTIF&quot;</span><span class="p">:</span> <span class="n">_parse_count_if</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-112"><a href="#ClickHouse.Parser-112"><span class="linenos">112</span></a> <span class="s2">&quot;DATE_ADD&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">DateAdd</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-113"><a href="#ClickHouse.Parser-113"><span class="linenos">113</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse.Parser-114"><a href="#ClickHouse.Parser-114"><span class="linenos">114</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Parser-115"><a href="#ClickHouse.Parser-115"><span class="linenos">115</span></a> <span class="s2">&quot;DATEADD&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">DateAdd</span><span class="p">(</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Parser-104"><a href="#ClickHouse.Parser-104"><span class="linenos">104</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="ClickHouse.Parser-105"><a href="#ClickHouse.Parser-105"><span class="linenos">105</span></a> <span class="c1"># Tested in ClickHouse&#39;s playground, it seems that the following two queries do the same thing</span>
+</span><span id="ClickHouse.Parser-106"><a href="#ClickHouse.Parser-106"><span class="linenos">106</span></a> <span class="c1"># * select x from t1 union all select x from t2 limit 1;</span>
+</span><span id="ClickHouse.Parser-107"><a href="#ClickHouse.Parser-107"><span class="linenos">107</span></a> <span class="c1"># * select x from t1 union all (select x from t2 limit 1);</span>
+</span><span id="ClickHouse.Parser-108"><a href="#ClickHouse.Parser-108"><span class="linenos">108</span></a> <span class="n">MODIFIERS_ATTACHED_TO_UNION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Parser-109"><a href="#ClickHouse.Parser-109"><span class="linenos">109</span></a>
+</span><span id="ClickHouse.Parser-110"><a href="#ClickHouse.Parser-110"><span class="linenos">110</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-111"><a href="#ClickHouse.Parser-111"><span class="linenos">111</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><span id="ClickHouse.Parser-112"><a href="#ClickHouse.Parser-112"><span class="linenos">112</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-113"><a href="#ClickHouse.Parser-113"><span class="linenos">113</span></a> <span class="s2">&quot;ARRAYSUM&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-114"><a href="#ClickHouse.Parser-114"><span class="linenos">114</span></a> <span class="s2">&quot;COUNTIF&quot;</span><span class="p">:</span> <span class="n">_parse_count_if</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-115"><a href="#ClickHouse.Parser-115"><span class="linenos">115</span></a> <span class="s2">&quot;DATE_ADD&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">DateAdd</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-116"><a href="#ClickHouse.Parser-116"><span class="linenos">116</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse.Parser-117"><a href="#ClickHouse.Parser-117"><span class="linenos">117</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Parser-118"><a href="#ClickHouse.Parser-118"><span class="linenos">118</span></a> <span class="s2">&quot;DATE_DIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-118"><a href="#ClickHouse.Parser-118"><span class="linenos">118</span></a> <span class="s2">&quot;DATEADD&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">DateAdd</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-119"><a href="#ClickHouse.Parser-119"><span class="linenos">119</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse.Parser-120"><a href="#ClickHouse.Parser-120"><span class="linenos">120</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Parser-121"><a href="#ClickHouse.Parser-121"><span class="linenos">121</span></a> <span class="s2">&quot;DATEDIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-121"><a href="#ClickHouse.Parser-121"><span class="linenos">121</span></a> <span class="s2">&quot;DATE_DIFF&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">DateDiff</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-122"><a href="#ClickHouse.Parser-122"><span class="linenos">122</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse.Parser-123"><a href="#ClickHouse.Parser-123"><span class="linenos">123</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Parser-124"><a href="#ClickHouse.Parser-124"><span class="linenos">124</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-125"><a href="#ClickHouse.Parser-125"><span class="linenos">125</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-126"><a href="#ClickHouse.Parser-126"><span class="linenos">126</span></a> <span class="s2">&quot;RANDCANONICAL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-127"><a href="#ClickHouse.Parser-127"><span class="linenos">127</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-128"><a href="#ClickHouse.Parser-128"><span class="linenos">128</span></a> <span class="s2">&quot;XOR&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">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
-</span><span id="ClickHouse.Parser-129"><a href="#ClickHouse.Parser-129"><span class="linenos">129</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-130"><a href="#ClickHouse.Parser-130"><span class="linenos">130</span></a>
-</span><span id="ClickHouse.Parser-131"><a href="#ClickHouse.Parser-131"><span class="linenos">131</span></a> <span class="n">AGG_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-132"><a href="#ClickHouse.Parser-132"><span class="linenos">132</span></a> <span class="s2">&quot;count&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-133"><a href="#ClickHouse.Parser-133"><span class="linenos">133</span></a> <span class="s2">&quot;min&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-134"><a href="#ClickHouse.Parser-134"><span class="linenos">134</span></a> <span class="s2">&quot;max&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-135"><a href="#ClickHouse.Parser-135"><span class="linenos">135</span></a> <span class="s2">&quot;sum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-136"><a href="#ClickHouse.Parser-136"><span class="linenos">136</span></a> <span class="s2">&quot;avg&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-137"><a href="#ClickHouse.Parser-137"><span class="linenos">137</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-138"><a href="#ClickHouse.Parser-138"><span class="linenos">138</span></a> <span class="s2">&quot;stddevPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-139"><a href="#ClickHouse.Parser-139"><span class="linenos">139</span></a> <span class="s2">&quot;stddevSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-140"><a href="#ClickHouse.Parser-140"><span class="linenos">140</span></a> <span class="s2">&quot;varPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-141"><a href="#ClickHouse.Parser-141"><span class="linenos">141</span></a> <span class="s2">&quot;varSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-142"><a href="#ClickHouse.Parser-142"><span class="linenos">142</span></a> <span class="s2">&quot;corr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-143"><a href="#ClickHouse.Parser-143"><span class="linenos">143</span></a> <span class="s2">&quot;covarPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-144"><a href="#ClickHouse.Parser-144"><span class="linenos">144</span></a> <span class="s2">&quot;covarSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-145"><a href="#ClickHouse.Parser-145"><span class="linenos">145</span></a> <span class="s2">&quot;entropy&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-146"><a href="#ClickHouse.Parser-146"><span class="linenos">146</span></a> <span class="s2">&quot;exponentialMovingAverage&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-147"><a href="#ClickHouse.Parser-147"><span class="linenos">147</span></a> <span class="s2">&quot;intervalLengthSum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-148"><a href="#ClickHouse.Parser-148"><span class="linenos">148</span></a> <span class="s2">&quot;kolmogorovSmirnovTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-149"><a href="#ClickHouse.Parser-149"><span class="linenos">149</span></a> <span class="s2">&quot;mannWhitneyUTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-150"><a href="#ClickHouse.Parser-150"><span class="linenos">150</span></a> <span class="s2">&quot;median&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-151"><a href="#ClickHouse.Parser-151"><span class="linenos">151</span></a> <span class="s2">&quot;rankCorr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-152"><a href="#ClickHouse.Parser-152"><span class="linenos">152</span></a> <span class="s2">&quot;sumKahan&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-153"><a href="#ClickHouse.Parser-153"><span class="linenos">153</span></a> <span class="s2">&quot;studentTTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-154"><a href="#ClickHouse.Parser-154"><span class="linenos">154</span></a> <span class="s2">&quot;welchTTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-155"><a href="#ClickHouse.Parser-155"><span class="linenos">155</span></a> <span class="s2">&quot;anyHeavy&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-156"><a href="#ClickHouse.Parser-156"><span class="linenos">156</span></a> <span class="s2">&quot;anyLast&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-157"><a href="#ClickHouse.Parser-157"><span class="linenos">157</span></a> <span class="s2">&quot;boundingRatio&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-158"><a href="#ClickHouse.Parser-158"><span class="linenos">158</span></a> <span class="s2">&quot;first_value&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-159"><a href="#ClickHouse.Parser-159"><span class="linenos">159</span></a> <span class="s2">&quot;last_value&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-160"><a href="#ClickHouse.Parser-160"><span class="linenos">160</span></a> <span class="s2">&quot;argMin&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-161"><a href="#ClickHouse.Parser-161"><span class="linenos">161</span></a> <span class="s2">&quot;argMax&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-162"><a href="#ClickHouse.Parser-162"><span class="linenos">162</span></a> <span class="s2">&quot;avgWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-163"><a href="#ClickHouse.Parser-163"><span class="linenos">163</span></a> <span class="s2">&quot;topK&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-164"><a href="#ClickHouse.Parser-164"><span class="linenos">164</span></a> <span class="s2">&quot;topKWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-165"><a href="#ClickHouse.Parser-165"><span class="linenos">165</span></a> <span class="s2">&quot;deltaSum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-166"><a href="#ClickHouse.Parser-166"><span class="linenos">166</span></a> <span class="s2">&quot;deltaSumTimestamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-167"><a href="#ClickHouse.Parser-167"><span class="linenos">167</span></a> <span class="s2">&quot;groupArray&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-168"><a href="#ClickHouse.Parser-168"><span class="linenos">168</span></a> <span class="s2">&quot;groupArrayLast&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-169"><a href="#ClickHouse.Parser-169"><span class="linenos">169</span></a> <span class="s2">&quot;groupUniqArray&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-170"><a href="#ClickHouse.Parser-170"><span class="linenos">170</span></a> <span class="s2">&quot;groupArrayInsertAt&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-171"><a href="#ClickHouse.Parser-171"><span class="linenos">171</span></a> <span class="s2">&quot;groupArrayMovingAvg&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-172"><a href="#ClickHouse.Parser-172"><span class="linenos">172</span></a> <span class="s2">&quot;groupArrayMovingSum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-173"><a href="#ClickHouse.Parser-173"><span class="linenos">173</span></a> <span class="s2">&quot;groupArraySample&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-174"><a href="#ClickHouse.Parser-174"><span class="linenos">174</span></a> <span class="s2">&quot;groupBitAnd&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-175"><a href="#ClickHouse.Parser-175"><span class="linenos">175</span></a> <span class="s2">&quot;groupBitOr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-176"><a href="#ClickHouse.Parser-176"><span class="linenos">176</span></a> <span class="s2">&quot;groupBitXor&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-177"><a href="#ClickHouse.Parser-177"><span class="linenos">177</span></a> <span class="s2">&quot;groupBitmap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-178"><a href="#ClickHouse.Parser-178"><span class="linenos">178</span></a> <span class="s2">&quot;groupBitmapAnd&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-179"><a href="#ClickHouse.Parser-179"><span class="linenos">179</span></a> <span class="s2">&quot;groupBitmapOr&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-180"><a href="#ClickHouse.Parser-180"><span class="linenos">180</span></a> <span class="s2">&quot;groupBitmapXor&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-181"><a href="#ClickHouse.Parser-181"><span class="linenos">181</span></a> <span class="s2">&quot;sumWithOverflow&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-182"><a href="#ClickHouse.Parser-182"><span class="linenos">182</span></a> <span class="s2">&quot;sumMap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-183"><a href="#ClickHouse.Parser-183"><span class="linenos">183</span></a> <span class="s2">&quot;minMap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-184"><a href="#ClickHouse.Parser-184"><span class="linenos">184</span></a> <span class="s2">&quot;maxMap&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-185"><a href="#ClickHouse.Parser-185"><span class="linenos">185</span></a> <span class="s2">&quot;skewSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-186"><a href="#ClickHouse.Parser-186"><span class="linenos">186</span></a> <span class="s2">&quot;skewPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-187"><a href="#ClickHouse.Parser-187"><span class="linenos">187</span></a> <span class="s2">&quot;kurtSamp&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-188"><a href="#ClickHouse.Parser-188"><span class="linenos">188</span></a> <span class="s2">&quot;kurtPop&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-189"><a href="#ClickHouse.Parser-189"><span class="linenos">189</span></a> <span class="s2">&quot;uniq&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-190"><a href="#ClickHouse.Parser-190"><span class="linenos">190</span></a> <span class="s2">&quot;uniqExact&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-191"><a href="#ClickHouse.Parser-191"><span class="linenos">191</span></a> <span class="s2">&quot;uniqCombined&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-192"><a href="#ClickHouse.Parser-192"><span class="linenos">192</span></a> <span class="s2">&quot;uniqCombined64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-193"><a href="#ClickHouse.Parser-193"><span class="linenos">193</span></a> <span class="s2">&quot;uniqHLL12&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-194"><a href="#ClickHouse.Parser-194"><span class="linenos">194</span></a> <span class="s2">&quot;uniqTheta&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-195"><a href="#ClickHouse.Parser-195"><span class="linenos">195</span></a> <span class="s2">&quot;quantile&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-196"><a href="#ClickHouse.Parser-196"><span class="linenos">196</span></a> <span class="s2">&quot;quantiles&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-197"><a href="#ClickHouse.Parser-197"><span class="linenos">197</span></a> <span class="s2">&quot;quantileExact&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-198"><a href="#ClickHouse.Parser-198"><span class="linenos">198</span></a> <span class="s2">&quot;quantilesExact&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-199"><a href="#ClickHouse.Parser-199"><span class="linenos">199</span></a> <span class="s2">&quot;quantileExactLow&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-200"><a href="#ClickHouse.Parser-200"><span class="linenos">200</span></a> <span class="s2">&quot;quantilesExactLow&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-201"><a href="#ClickHouse.Parser-201"><span class="linenos">201</span></a> <span class="s2">&quot;quantileExactHigh&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-202"><a href="#ClickHouse.Parser-202"><span class="linenos">202</span></a> <span class="s2">&quot;quantilesExactHigh&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-203"><a href="#ClickHouse.Parser-203"><span class="linenos">203</span></a> <span class="s2">&quot;quantileExactWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-204"><a href="#ClickHouse.Parser-204"><span class="linenos">204</span></a> <span class="s2">&quot;quantilesExactWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-205"><a href="#ClickHouse.Parser-205"><span class="linenos">205</span></a> <span class="s2">&quot;quantileTiming&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-206"><a href="#ClickHouse.Parser-206"><span class="linenos">206</span></a> <span class="s2">&quot;quantilesTiming&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-207"><a href="#ClickHouse.Parser-207"><span class="linenos">207</span></a> <span class="s2">&quot;quantileTimingWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-208"><a href="#ClickHouse.Parser-208"><span class="linenos">208</span></a> <span class="s2">&quot;quantilesTimingWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-209"><a href="#ClickHouse.Parser-209"><span class="linenos">209</span></a> <span class="s2">&quot;quantileDeterministic&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-210"><a href="#ClickHouse.Parser-210"><span class="linenos">210</span></a> <span class="s2">&quot;quantilesDeterministic&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-211"><a href="#ClickHouse.Parser-211"><span class="linenos">211</span></a> <span class="s2">&quot;quantileTDigest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-212"><a href="#ClickHouse.Parser-212"><span class="linenos">212</span></a> <span class="s2">&quot;quantilesTDigest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-213"><a href="#ClickHouse.Parser-213"><span class="linenos">213</span></a> <span class="s2">&quot;quantileTDigestWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-214"><a href="#ClickHouse.Parser-214"><span class="linenos">214</span></a> <span class="s2">&quot;quantilesTDigestWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-215"><a href="#ClickHouse.Parser-215"><span class="linenos">215</span></a> <span class="s2">&quot;quantileBFloat16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-216"><a href="#ClickHouse.Parser-216"><span class="linenos">216</span></a> <span class="s2">&quot;quantilesBFloat16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-217"><a href="#ClickHouse.Parser-217"><span class="linenos">217</span></a> <span class="s2">&quot;quantileBFloat16Weighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-218"><a href="#ClickHouse.Parser-218"><span class="linenos">218</span></a> <span class="s2">&quot;quantilesBFloat16Weighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-219"><a href="#ClickHouse.Parser-219"><span class="linenos">219</span></a> <span class="s2">&quot;simpleLinearRegression&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-220"><a href="#ClickHouse.Parser-220"><span class="linenos">220</span></a> <span class="s2">&quot;stochasticLinearRegression&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-221"><a href="#ClickHouse.Parser-221"><span class="linenos">221</span></a> <span class="s2">&quot;stochasticLogisticRegression&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-222"><a href="#ClickHouse.Parser-222"><span class="linenos">222</span></a> <span class="s2">&quot;categoricalInformationValue&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-223"><a href="#ClickHouse.Parser-223"><span class="linenos">223</span></a> <span class="s2">&quot;contingency&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-224"><a href="#ClickHouse.Parser-224"><span class="linenos">224</span></a> <span class="s2">&quot;cramersV&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-225"><a href="#ClickHouse.Parser-225"><span class="linenos">225</span></a> <span class="s2">&quot;cramersVBiasCorrected&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-226"><a href="#ClickHouse.Parser-226"><span class="linenos">226</span></a> <span class="s2">&quot;theilsU&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-227"><a href="#ClickHouse.Parser-227"><span class="linenos">227</span></a> <span class="s2">&quot;maxIntersections&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-228"><a href="#ClickHouse.Parser-228"><span class="linenos">228</span></a> <span class="s2">&quot;maxIntersectionsPosition&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-229"><a href="#ClickHouse.Parser-229"><span class="linenos">229</span></a> <span class="s2">&quot;meanZTest&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-230"><a href="#ClickHouse.Parser-230"><span class="linenos">230</span></a> <span class="s2">&quot;quantileInterpolatedWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-231"><a href="#ClickHouse.Parser-231"><span class="linenos">231</span></a> <span class="s2">&quot;quantilesInterpolatedWeighted&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-232"><a href="#ClickHouse.Parser-232"><span class="linenos">232</span></a> <span class="s2">&quot;quantileGK&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-233"><a href="#ClickHouse.Parser-233"><span class="linenos">233</span></a> <span class="s2">&quot;quantilesGK&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-234"><a href="#ClickHouse.Parser-234"><span class="linenos">234</span></a> <span class="s2">&quot;sparkBar&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-235"><a href="#ClickHouse.Parser-235"><span class="linenos">235</span></a> <span class="s2">&quot;sumCount&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-236"><a href="#ClickHouse.Parser-236"><span class="linenos">236</span></a> <span class="s2">&quot;largestTriangleThreeBuckets&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-237"><a href="#ClickHouse.Parser-237"><span class="linenos">237</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-238"><a href="#ClickHouse.Parser-238"><span class="linenos">238</span></a>
-</span><span id="ClickHouse.Parser-239"><a href="#ClickHouse.Parser-239"><span class="linenos">239</span></a> <span class="n">AGG_FUNCTIONS_SUFFIXES</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="ClickHouse.Parser-240"><a href="#ClickHouse.Parser-240"><span class="linenos">240</span></a> <span class="s2">&quot;If&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-241"><a href="#ClickHouse.Parser-241"><span class="linenos">241</span></a> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-242"><a href="#ClickHouse.Parser-242"><span class="linenos">242</span></a> <span class="s2">&quot;ArrayIf&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-243"><a href="#ClickHouse.Parser-243"><span class="linenos">243</span></a> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-244"><a href="#ClickHouse.Parser-244"><span class="linenos">244</span></a> <span class="s2">&quot;SimpleState&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-245"><a href="#ClickHouse.Parser-245"><span class="linenos">245</span></a> <span class="s2">&quot;State&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-246"><a href="#ClickHouse.Parser-246"><span class="linenos">246</span></a> <span class="s2">&quot;Merge&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-247"><a href="#ClickHouse.Parser-247"><span class="linenos">247</span></a> <span class="s2">&quot;MergeState&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-248"><a href="#ClickHouse.Parser-248"><span class="linenos">248</span></a> <span class="s2">&quot;ForEach&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-249"><a href="#ClickHouse.Parser-249"><span class="linenos">249</span></a> <span class="s2">&quot;Distinct&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-250"><a href="#ClickHouse.Parser-250"><span class="linenos">250</span></a> <span class="s2">&quot;OrDefault&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-251"><a href="#ClickHouse.Parser-251"><span class="linenos">251</span></a> <span class="s2">&quot;OrNull&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-252"><a href="#ClickHouse.Parser-252"><span class="linenos">252</span></a> <span class="s2">&quot;Resample&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-253"><a href="#ClickHouse.Parser-253"><span class="linenos">253</span></a> <span class="s2">&quot;ArgMin&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-254"><a href="#ClickHouse.Parser-254"><span class="linenos">254</span></a> <span class="s2">&quot;ArgMax&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-255"><a href="#ClickHouse.Parser-255"><span class="linenos">255</span></a> <span class="p">]</span>
-</span><span id="ClickHouse.Parser-256"><a href="#ClickHouse.Parser-256"><span class="linenos">256</span></a>
-</span><span id="ClickHouse.Parser-257"><a href="#ClickHouse.Parser-257"><span class="linenos">257</span></a> <span class="n">AGG_FUNC_MAPPING</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="ClickHouse.Parser-258"><a href="#ClickHouse.Parser-258"><span class="linenos">258</span></a> <span class="k">lambda</span> <span class="n">functions</span><span class="p">,</span> <span class="n">suffixes</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-259"><a href="#ClickHouse.Parser-259"><span class="linenos">259</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">f</span><span class="si">}{</span><span class="n">sfx</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">sfx</span><span class="p">)</span> <span class="k">for</span> <span class="n">sfx</span> <span class="ow">in</span> <span class="p">(</span><span class="n">suffixes</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">])</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">functions</span>
-</span><span id="ClickHouse.Parser-260"><a href="#ClickHouse.Parser-260"><span class="linenos">260</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-261"><a href="#ClickHouse.Parser-261"><span class="linenos">261</span></a> <span class="p">)(</span><span class="n">AGG_FUNCTIONS</span><span class="p">,</span> <span class="n">AGG_FUNCTIONS_SUFFIXES</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-124"><a href="#ClickHouse.Parser-124"><span class="linenos">124</span></a> <span class="s2">&quot;DATEDIFF&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">DateDiff</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-125"><a href="#ClickHouse.Parser-125"><span class="linenos">125</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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="ClickHouse.Parser-126"><a href="#ClickHouse.Parser-126"><span class="linenos">126</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-127"><a href="#ClickHouse.Parser-127"><span class="linenos">127</span></a> <span class="s2">&quot;JSONEXTRACTSTRING&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-128"><a href="#ClickHouse.Parser-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span> <span class="n">zero_based_indexing</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="ClickHouse.Parser-129"><a href="#ClickHouse.Parser-129"><span class="linenos">129</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-130"><a href="#ClickHouse.Parser-130"><span class="linenos">130</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-131"><a href="#ClickHouse.Parser-131"><span class="linenos">131</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-132"><a href="#ClickHouse.Parser-132"><span class="linenos">132</span></a> <span class="s2">&quot;RANDCANONICAL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-133"><a href="#ClickHouse.Parser-133"><span class="linenos">133</span></a> <span class="s2">&quot;UNIQ&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-134"><a href="#ClickHouse.Parser-134"><span class="linenos">134</span></a> <span class="s2">&quot;XOR&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">Xor</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
+</span><span id="ClickHouse.Parser-135"><a href="#ClickHouse.Parser-135"><span class="linenos">135</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-136"><a href="#ClickHouse.Parser-136"><span class="linenos">136</span></a>
+</span><span id="ClickHouse.Parser-137"><a href="#ClickHouse.Parser-137"><span class="linenos">137</span></a> <span class="n">AGG_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-138"><a href="#ClickHouse.Parser-138"><span class="linenos">138</span></a> <span class="s2">&quot;count&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-139"><a href="#ClickHouse.Parser-139"><span class="linenos">139</span></a> <span class="s2">&quot;min&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-140"><a href="#ClickHouse.Parser-140"><span class="linenos">140</span></a> <span class="s2">&quot;max&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-141"><a href="#ClickHouse.Parser-141"><span class="linenos">141</span></a> <span class="s2">&quot;sum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-142"><a href="#ClickHouse.Parser-142"><span class="linenos">142</span></a> <span class="s2">&quot;avg&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-143"><a href="#ClickHouse.Parser-143"><span class="linenos">143</span></a> <span class="s2">&quot;any&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-144"><a href="#ClickHouse.Parser-144"><span class="linenos">144</span></a> <span class="s2">&quot;stddevPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-145"><a href="#ClickHouse.Parser-145"><span class="linenos">145</span></a> <span class="s2">&quot;stddevSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-146"><a href="#ClickHouse.Parser-146"><span class="linenos">146</span></a> <span class="s2">&quot;varPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-147"><a href="#ClickHouse.Parser-147"><span class="linenos">147</span></a> <span class="s2">&quot;varSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-148"><a href="#ClickHouse.Parser-148"><span class="linenos">148</span></a> <span class="s2">&quot;corr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-149"><a href="#ClickHouse.Parser-149"><span class="linenos">149</span></a> <span class="s2">&quot;covarPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-150"><a href="#ClickHouse.Parser-150"><span class="linenos">150</span></a> <span class="s2">&quot;covarSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-151"><a href="#ClickHouse.Parser-151"><span class="linenos">151</span></a> <span class="s2">&quot;entropy&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-152"><a href="#ClickHouse.Parser-152"><span class="linenos">152</span></a> <span class="s2">&quot;exponentialMovingAverage&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-153"><a href="#ClickHouse.Parser-153"><span class="linenos">153</span></a> <span class="s2">&quot;intervalLengthSum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-154"><a href="#ClickHouse.Parser-154"><span class="linenos">154</span></a> <span class="s2">&quot;kolmogorovSmirnovTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-155"><a href="#ClickHouse.Parser-155"><span class="linenos">155</span></a> <span class="s2">&quot;mannWhitneyUTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-156"><a href="#ClickHouse.Parser-156"><span class="linenos">156</span></a> <span class="s2">&quot;median&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-157"><a href="#ClickHouse.Parser-157"><span class="linenos">157</span></a> <span class="s2">&quot;rankCorr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-158"><a href="#ClickHouse.Parser-158"><span class="linenos">158</span></a> <span class="s2">&quot;sumKahan&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-159"><a href="#ClickHouse.Parser-159"><span class="linenos">159</span></a> <span class="s2">&quot;studentTTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-160"><a href="#ClickHouse.Parser-160"><span class="linenos">160</span></a> <span class="s2">&quot;welchTTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-161"><a href="#ClickHouse.Parser-161"><span class="linenos">161</span></a> <span class="s2">&quot;anyHeavy&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-162"><a href="#ClickHouse.Parser-162"><span class="linenos">162</span></a> <span class="s2">&quot;anyLast&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-163"><a href="#ClickHouse.Parser-163"><span class="linenos">163</span></a> <span class="s2">&quot;boundingRatio&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-164"><a href="#ClickHouse.Parser-164"><span class="linenos">164</span></a> <span class="s2">&quot;first_value&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-165"><a href="#ClickHouse.Parser-165"><span class="linenos">165</span></a> <span class="s2">&quot;last_value&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-166"><a href="#ClickHouse.Parser-166"><span class="linenos">166</span></a> <span class="s2">&quot;argMin&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-167"><a href="#ClickHouse.Parser-167"><span class="linenos">167</span></a> <span class="s2">&quot;argMax&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-168"><a href="#ClickHouse.Parser-168"><span class="linenos">168</span></a> <span class="s2">&quot;avgWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-169"><a href="#ClickHouse.Parser-169"><span class="linenos">169</span></a> <span class="s2">&quot;topK&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-170"><a href="#ClickHouse.Parser-170"><span class="linenos">170</span></a> <span class="s2">&quot;topKWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-171"><a href="#ClickHouse.Parser-171"><span class="linenos">171</span></a> <span class="s2">&quot;deltaSum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-172"><a href="#ClickHouse.Parser-172"><span class="linenos">172</span></a> <span class="s2">&quot;deltaSumTimestamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-173"><a href="#ClickHouse.Parser-173"><span class="linenos">173</span></a> <span class="s2">&quot;groupArray&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-174"><a href="#ClickHouse.Parser-174"><span class="linenos">174</span></a> <span class="s2">&quot;groupArrayLast&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-175"><a href="#ClickHouse.Parser-175"><span class="linenos">175</span></a> <span class="s2">&quot;groupUniqArray&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-176"><a href="#ClickHouse.Parser-176"><span class="linenos">176</span></a> <span class="s2">&quot;groupArrayInsertAt&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-177"><a href="#ClickHouse.Parser-177"><span class="linenos">177</span></a> <span class="s2">&quot;groupArrayMovingAvg&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-178"><a href="#ClickHouse.Parser-178"><span class="linenos">178</span></a> <span class="s2">&quot;groupArrayMovingSum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-179"><a href="#ClickHouse.Parser-179"><span class="linenos">179</span></a> <span class="s2">&quot;groupArraySample&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-180"><a href="#ClickHouse.Parser-180"><span class="linenos">180</span></a> <span class="s2">&quot;groupBitAnd&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-181"><a href="#ClickHouse.Parser-181"><span class="linenos">181</span></a> <span class="s2">&quot;groupBitOr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-182"><a href="#ClickHouse.Parser-182"><span class="linenos">182</span></a> <span class="s2">&quot;groupBitXor&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-183"><a href="#ClickHouse.Parser-183"><span class="linenos">183</span></a> <span class="s2">&quot;groupBitmap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-184"><a href="#ClickHouse.Parser-184"><span class="linenos">184</span></a> <span class="s2">&quot;groupBitmapAnd&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-185"><a href="#ClickHouse.Parser-185"><span class="linenos">185</span></a> <span class="s2">&quot;groupBitmapOr&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-186"><a href="#ClickHouse.Parser-186"><span class="linenos">186</span></a> <span class="s2">&quot;groupBitmapXor&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-187"><a href="#ClickHouse.Parser-187"><span class="linenos">187</span></a> <span class="s2">&quot;sumWithOverflow&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-188"><a href="#ClickHouse.Parser-188"><span class="linenos">188</span></a> <span class="s2">&quot;sumMap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-189"><a href="#ClickHouse.Parser-189"><span class="linenos">189</span></a> <span class="s2">&quot;minMap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-190"><a href="#ClickHouse.Parser-190"><span class="linenos">190</span></a> <span class="s2">&quot;maxMap&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-191"><a href="#ClickHouse.Parser-191"><span class="linenos">191</span></a> <span class="s2">&quot;skewSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-192"><a href="#ClickHouse.Parser-192"><span class="linenos">192</span></a> <span class="s2">&quot;skewPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-193"><a href="#ClickHouse.Parser-193"><span class="linenos">193</span></a> <span class="s2">&quot;kurtSamp&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-194"><a href="#ClickHouse.Parser-194"><span class="linenos">194</span></a> <span class="s2">&quot;kurtPop&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-195"><a href="#ClickHouse.Parser-195"><span class="linenos">195</span></a> <span class="s2">&quot;uniq&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-196"><a href="#ClickHouse.Parser-196"><span class="linenos">196</span></a> <span class="s2">&quot;uniqExact&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-197"><a href="#ClickHouse.Parser-197"><span class="linenos">197</span></a> <span class="s2">&quot;uniqCombined&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-198"><a href="#ClickHouse.Parser-198"><span class="linenos">198</span></a> <span class="s2">&quot;uniqCombined64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-199"><a href="#ClickHouse.Parser-199"><span class="linenos">199</span></a> <span class="s2">&quot;uniqHLL12&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-200"><a href="#ClickHouse.Parser-200"><span class="linenos">200</span></a> <span class="s2">&quot;uniqTheta&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-201"><a href="#ClickHouse.Parser-201"><span class="linenos">201</span></a> <span class="s2">&quot;quantile&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-202"><a href="#ClickHouse.Parser-202"><span class="linenos">202</span></a> <span class="s2">&quot;quantiles&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-203"><a href="#ClickHouse.Parser-203"><span class="linenos">203</span></a> <span class="s2">&quot;quantileExact&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-204"><a href="#ClickHouse.Parser-204"><span class="linenos">204</span></a> <span class="s2">&quot;quantilesExact&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-205"><a href="#ClickHouse.Parser-205"><span class="linenos">205</span></a> <span class="s2">&quot;quantileExactLow&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-206"><a href="#ClickHouse.Parser-206"><span class="linenos">206</span></a> <span class="s2">&quot;quantilesExactLow&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-207"><a href="#ClickHouse.Parser-207"><span class="linenos">207</span></a> <span class="s2">&quot;quantileExactHigh&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-208"><a href="#ClickHouse.Parser-208"><span class="linenos">208</span></a> <span class="s2">&quot;quantilesExactHigh&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-209"><a href="#ClickHouse.Parser-209"><span class="linenos">209</span></a> <span class="s2">&quot;quantileExactWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-210"><a href="#ClickHouse.Parser-210"><span class="linenos">210</span></a> <span class="s2">&quot;quantilesExactWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-211"><a href="#ClickHouse.Parser-211"><span class="linenos">211</span></a> <span class="s2">&quot;quantileTiming&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-212"><a href="#ClickHouse.Parser-212"><span class="linenos">212</span></a> <span class="s2">&quot;quantilesTiming&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-213"><a href="#ClickHouse.Parser-213"><span class="linenos">213</span></a> <span class="s2">&quot;quantileTimingWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-214"><a href="#ClickHouse.Parser-214"><span class="linenos">214</span></a> <span class="s2">&quot;quantilesTimingWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-215"><a href="#ClickHouse.Parser-215"><span class="linenos">215</span></a> <span class="s2">&quot;quantileDeterministic&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-216"><a href="#ClickHouse.Parser-216"><span class="linenos">216</span></a> <span class="s2">&quot;quantilesDeterministic&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-217"><a href="#ClickHouse.Parser-217"><span class="linenos">217</span></a> <span class="s2">&quot;quantileTDigest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-218"><a href="#ClickHouse.Parser-218"><span class="linenos">218</span></a> <span class="s2">&quot;quantilesTDigest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-219"><a href="#ClickHouse.Parser-219"><span class="linenos">219</span></a> <span class="s2">&quot;quantileTDigestWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-220"><a href="#ClickHouse.Parser-220"><span class="linenos">220</span></a> <span class="s2">&quot;quantilesTDigestWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-221"><a href="#ClickHouse.Parser-221"><span class="linenos">221</span></a> <span class="s2">&quot;quantileBFloat16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-222"><a href="#ClickHouse.Parser-222"><span class="linenos">222</span></a> <span class="s2">&quot;quantilesBFloat16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-223"><a href="#ClickHouse.Parser-223"><span class="linenos">223</span></a> <span class="s2">&quot;quantileBFloat16Weighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-224"><a href="#ClickHouse.Parser-224"><span class="linenos">224</span></a> <span class="s2">&quot;quantilesBFloat16Weighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-225"><a href="#ClickHouse.Parser-225"><span class="linenos">225</span></a> <span class="s2">&quot;simpleLinearRegression&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-226"><a href="#ClickHouse.Parser-226"><span class="linenos">226</span></a> <span class="s2">&quot;stochasticLinearRegression&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-227"><a href="#ClickHouse.Parser-227"><span class="linenos">227</span></a> <span class="s2">&quot;stochasticLogisticRegression&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-228"><a href="#ClickHouse.Parser-228"><span class="linenos">228</span></a> <span class="s2">&quot;categoricalInformationValue&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-229"><a href="#ClickHouse.Parser-229"><span class="linenos">229</span></a> <span class="s2">&quot;contingency&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-230"><a href="#ClickHouse.Parser-230"><span class="linenos">230</span></a> <span class="s2">&quot;cramersV&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-231"><a href="#ClickHouse.Parser-231"><span class="linenos">231</span></a> <span class="s2">&quot;cramersVBiasCorrected&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-232"><a href="#ClickHouse.Parser-232"><span class="linenos">232</span></a> <span class="s2">&quot;theilsU&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-233"><a href="#ClickHouse.Parser-233"><span class="linenos">233</span></a> <span class="s2">&quot;maxIntersections&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-234"><a href="#ClickHouse.Parser-234"><span class="linenos">234</span></a> <span class="s2">&quot;maxIntersectionsPosition&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-235"><a href="#ClickHouse.Parser-235"><span class="linenos">235</span></a> <span class="s2">&quot;meanZTest&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-236"><a href="#ClickHouse.Parser-236"><span class="linenos">236</span></a> <span class="s2">&quot;quantileInterpolatedWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-237"><a href="#ClickHouse.Parser-237"><span class="linenos">237</span></a> <span class="s2">&quot;quantilesInterpolatedWeighted&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-238"><a href="#ClickHouse.Parser-238"><span class="linenos">238</span></a> <span class="s2">&quot;quantileGK&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-239"><a href="#ClickHouse.Parser-239"><span class="linenos">239</span></a> <span class="s2">&quot;quantilesGK&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-240"><a href="#ClickHouse.Parser-240"><span class="linenos">240</span></a> <span class="s2">&quot;sparkBar&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-241"><a href="#ClickHouse.Parser-241"><span class="linenos">241</span></a> <span class="s2">&quot;sumCount&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-242"><a href="#ClickHouse.Parser-242"><span class="linenos">242</span></a> <span class="s2">&quot;largestTriangleThreeBuckets&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-243"><a href="#ClickHouse.Parser-243"><span class="linenos">243</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-244"><a href="#ClickHouse.Parser-244"><span class="linenos">244</span></a>
+</span><span id="ClickHouse.Parser-245"><a href="#ClickHouse.Parser-245"><span class="linenos">245</span></a> <span class="n">AGG_FUNCTIONS_SUFFIXES</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="ClickHouse.Parser-246"><a href="#ClickHouse.Parser-246"><span class="linenos">246</span></a> <span class="s2">&quot;If&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-247"><a href="#ClickHouse.Parser-247"><span class="linenos">247</span></a> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-248"><a href="#ClickHouse.Parser-248"><span class="linenos">248</span></a> <span class="s2">&quot;ArrayIf&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-249"><a href="#ClickHouse.Parser-249"><span class="linenos">249</span></a> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-250"><a href="#ClickHouse.Parser-250"><span class="linenos">250</span></a> <span class="s2">&quot;SimpleState&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-251"><a href="#ClickHouse.Parser-251"><span class="linenos">251</span></a> <span class="s2">&quot;State&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-252"><a href="#ClickHouse.Parser-252"><span class="linenos">252</span></a> <span class="s2">&quot;Merge&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-253"><a href="#ClickHouse.Parser-253"><span class="linenos">253</span></a> <span class="s2">&quot;MergeState&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-254"><a href="#ClickHouse.Parser-254"><span class="linenos">254</span></a> <span class="s2">&quot;ForEach&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-255"><a href="#ClickHouse.Parser-255"><span class="linenos">255</span></a> <span class="s2">&quot;Distinct&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-256"><a href="#ClickHouse.Parser-256"><span class="linenos">256</span></a> <span class="s2">&quot;OrDefault&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-257"><a href="#ClickHouse.Parser-257"><span class="linenos">257</span></a> <span class="s2">&quot;OrNull&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-258"><a href="#ClickHouse.Parser-258"><span class="linenos">258</span></a> <span class="s2">&quot;Resample&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-259"><a href="#ClickHouse.Parser-259"><span class="linenos">259</span></a> <span class="s2">&quot;ArgMin&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-260"><a href="#ClickHouse.Parser-260"><span class="linenos">260</span></a> <span class="s2">&quot;ArgMax&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-261"><a href="#ClickHouse.Parser-261"><span class="linenos">261</span></a> <span class="p">]</span>
</span><span id="ClickHouse.Parser-262"><a href="#ClickHouse.Parser-262"><span class="linenos">262</span></a>
-</span><span id="ClickHouse.Parser-263"><a href="#ClickHouse.Parser-263"><span class="linenos">263</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
-</span><span id="ClickHouse.Parser-264"><a href="#ClickHouse.Parser-264"><span class="linenos">264</span></a>
-</span><span id="ClickHouse.Parser-265"><a href="#ClickHouse.Parser-265"><span class="linenos">265</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-266"><a href="#ClickHouse.Parser-266"><span class="linenos">266</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-267"><a href="#ClickHouse.Parser-267"><span class="linenos">267</span></a> <span class="s2">&quot;ARRAYJOIN&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</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_expression</span><span class="p">()),</span>
-</span><span id="ClickHouse.Parser-268"><a href="#ClickHouse.Parser-268"><span class="linenos">268</span></a> <span class="s2">&quot;QUANTILE&quot;</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_quantile</span><span class="p">(),</span>
-</span><span id="ClickHouse.Parser-269"><a href="#ClickHouse.Parser-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-263"><a href="#ClickHouse.Parser-263"><span class="linenos">263</span></a> <span class="n">AGG_FUNC_MAPPING</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="ClickHouse.Parser-264"><a href="#ClickHouse.Parser-264"><span class="linenos">264</span></a> <span class="k">lambda</span> <span class="n">functions</span><span class="p">,</span> <span class="n">suffixes</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-265"><a href="#ClickHouse.Parser-265"><span class="linenos">265</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">f</span><span class="si">}{</span><span class="n">sfx</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">sfx</span><span class="p">)</span> <span class="k">for</span> <span class="n">sfx</span> <span class="ow">in</span> <span class="p">(</span><span class="n">suffixes</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">])</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">functions</span>
+</span><span id="ClickHouse.Parser-266"><a href="#ClickHouse.Parser-266"><span class="linenos">266</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-267"><a href="#ClickHouse.Parser-267"><span class="linenos">267</span></a> <span class="p">)(</span><span class="n">AGG_FUNCTIONS</span><span class="p">,</span> <span class="n">AGG_FUNCTIONS_SUFFIXES</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-268"><a href="#ClickHouse.Parser-268"><span class="linenos">268</span></a>
+</span><span id="ClickHouse.Parser-269"><a href="#ClickHouse.Parser-269"><span class="linenos">269</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span><span class="p">,</span> <span class="s2">&quot;TUPLE&quot;</span><span class="p">}</span>
</span><span id="ClickHouse.Parser-270"><a href="#ClickHouse.Parser-270"><span class="linenos">270</span></a>
-</span><span id="ClickHouse.Parser-271"><a href="#ClickHouse.Parser-271"><span class="linenos">271</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-272"><a href="#ClickHouse.Parser-272"><span class="linenos">272</span></a>
-</span><span id="ClickHouse.Parser-273"><a href="#ClickHouse.Parser-273"><span class="linenos">273</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-274"><a href="#ClickHouse.Parser-274"><span class="linenos">274</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-275"><a href="#ClickHouse.Parser-275"><span class="linenos">275</span></a>
-</span><span id="ClickHouse.Parser-276"><a href="#ClickHouse.Parser-276"><span class="linenos">276</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-277"><a href="#ClickHouse.Parser-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">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-278"><a href="#ClickHouse.Parser-278"><span class="linenos">278</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-279"><a href="#ClickHouse.Parser-279"><span class="linenos">279</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="ClickHouse.Parser-280"><a href="#ClickHouse.Parser-280"><span class="linenos">280</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-271"><a href="#ClickHouse.Parser-271"><span class="linenos">271</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-272"><a href="#ClickHouse.Parser-272"><span class="linenos">272</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-273"><a href="#ClickHouse.Parser-273"><span class="linenos">273</span></a> <span class="s2">&quot;ARRAYJOIN&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</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_expression</span><span class="p">()),</span>
+</span><span id="ClickHouse.Parser-274"><a href="#ClickHouse.Parser-274"><span class="linenos">274</span></a> <span class="s2">&quot;QUANTILE&quot;</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_quantile</span><span class="p">(),</span>
+</span><span id="ClickHouse.Parser-275"><a href="#ClickHouse.Parser-275"><span class="linenos">275</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-276"><a href="#ClickHouse.Parser-276"><span class="linenos">276</span></a>
+</span><span id="ClickHouse.Parser-277"><a href="#ClickHouse.Parser-277"><span class="linenos">277</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-278"><a href="#ClickHouse.Parser-278"><span class="linenos">278</span></a>
+</span><span id="ClickHouse.Parser-279"><a href="#ClickHouse.Parser-279"><span class="linenos">279</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-280"><a href="#ClickHouse.Parser-280"><span class="linenos">280</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;ANY&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-281"><a href="#ClickHouse.Parser-281"><span class="linenos">281</span></a>
-</span><span id="ClickHouse.Parser-282"><a href="#ClickHouse.Parser-282"><span class="linenos">282</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
-</span><span id="ClickHouse.Parser-283"><a href="#ClickHouse.Parser-283"><span class="linenos">283</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
-</span><span id="ClickHouse.Parser-284"><a href="#ClickHouse.Parser-284"><span class="linenos">284</span></a> <span class="n">COLUMN_OPERATORS</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">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-285"><a href="#ClickHouse.Parser-285"><span class="linenos">285</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-286"><a href="#ClickHouse.Parser-286"><span class="linenos">286</span></a>
-</span><span id="ClickHouse.Parser-287"><a href="#ClickHouse.Parser-287"><span class="linenos">287</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-288"><a href="#ClickHouse.Parser-288"><span class="linenos">288</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">JOIN_KINDS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-289"><a href="#ClickHouse.Parser-289"><span class="linenos">289</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-290"><a href="#ClickHouse.Parser-290"><span class="linenos">290</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-291"><a href="#ClickHouse.Parser-291"><span class="linenos">291</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-292"><a href="#ClickHouse.Parser-292"><span class="linenos">292</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-293"><a href="#ClickHouse.Parser-293"><span class="linenos">293</span></a>
-</span><span id="ClickHouse.Parser-294"><a href="#ClickHouse.Parser-294"><span class="linenos">294</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-282"><a href="#ClickHouse.Parser-282"><span class="linenos">282</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-283"><a href="#ClickHouse.Parser-283"><span class="linenos">283</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-284"><a href="#ClickHouse.Parser-284"><span class="linenos">284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-285"><a href="#ClickHouse.Parser-285"><span class="linenos">285</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="ClickHouse.Parser-286"><a href="#ClickHouse.Parser-286"><span class="linenos">286</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-287"><a href="#ClickHouse.Parser-287"><span class="linenos">287</span></a>
+</span><span id="ClickHouse.Parser-288"><a href="#ClickHouse.Parser-288"><span class="linenos">288</span></a> <span class="c1"># The PLACEHOLDER entry is popped because 1) it doesn&#39;t affect Clickhouse (it corresponds to</span>
+</span><span id="ClickHouse.Parser-289"><a href="#ClickHouse.Parser-289"><span class="linenos">289</span></a> <span class="c1"># the postgres-specific JSONBContains parser) and 2) it makes parsing the ternary op simpler.</span>
+</span><span id="ClickHouse.Parser-290"><a href="#ClickHouse.Parser-290"><span class="linenos">290</span></a> <span class="n">COLUMN_OPERATORS</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">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-291"><a href="#ClickHouse.Parser-291"><span class="linenos">291</span></a> <span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-292"><a href="#ClickHouse.Parser-292"><span class="linenos">292</span></a>
+</span><span id="ClickHouse.Parser-293"><a href="#ClickHouse.Parser-293"><span class="linenos">293</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-294"><a href="#ClickHouse.Parser-294"><span class="linenos">294</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">JOIN_KINDS</span><span class="p">,</span>
</span><span id="ClickHouse.Parser-295"><a href="#ClickHouse.Parser-295"><span class="linenos">295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-296"><a href="#ClickHouse.Parser-296"><span class="linenos">296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-297"><a href="#ClickHouse.Parser-297"><span class="linenos">297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-298"><a href="#ClickHouse.Parser-298"><span class="linenos">298</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-299"><a href="#ClickHouse.Parser-299"><span class="linenos">299</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-300"><a href="#ClickHouse.Parser-300"><span class="linenos">300</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-301"><a href="#ClickHouse.Parser-301"><span class="linenos">301</span></a>
-</span><span id="ClickHouse.Parser-302"><a href="#ClickHouse.Parser-302"><span class="linenos">302</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse.Parser-303"><a href="#ClickHouse.Parser-303"><span class="linenos">303</span></a>
-</span><span id="ClickHouse.Parser-304"><a href="#ClickHouse.Parser-304"><span class="linenos">304</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Parser-305"><a href="#ClickHouse.Parser-305"><span class="linenos">305</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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-306"><a href="#ClickHouse.Parser-306"><span class="linenos">306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="ClickHouse.Parser-307"><a href="#ClickHouse.Parser-307"><span class="linenos">307</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-308"><a href="#ClickHouse.Parser-308"><span class="linenos">308</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</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_conjunction</span><span class="p">),</span>
-</span><span id="ClickHouse.Parser-309"><a href="#ClickHouse.Parser-309"><span class="linenos">309</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Parser-310"><a href="#ClickHouse.Parser-310"><span class="linenos">310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
-</span><span id="ClickHouse.Parser-311"><a href="#ClickHouse.Parser-311"><span class="linenos">311</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Parser-312"><a href="#ClickHouse.Parser-312"><span class="linenos">312</span></a>
-</span><span id="ClickHouse.Parser-313"><a href="#ClickHouse.Parser-313"><span class="linenos">313</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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="ClickHouse.Parser-314"><a href="#ClickHouse.Parser-314"><span class="linenos">314</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_conjunction</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-315"><a href="#ClickHouse.Parser-315"><span class="linenos">315</span></a>
-</span><span id="ClickHouse.Parser-316"><a href="#ClickHouse.Parser-316"><span class="linenos">316</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">PLACEHOLDER</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-317"><a href="#ClickHouse.Parser-317"><span class="linenos">317</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="ClickHouse.Parser-318"><a href="#ClickHouse.Parser-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-319"><a href="#ClickHouse.Parser-319"><span class="linenos">319</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-320"><a href="#ClickHouse.Parser-320"><span class="linenos">320</span></a> <span class="n">true</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="ClickHouse.Parser-321"><a href="#ClickHouse.Parser-321"><span class="linenos">321</span></a> <span class="n">false</span><span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="ClickHouse.Parser-322"><a href="#ClickHouse.Parser-322"><span class="linenos">322</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-323"><a href="#ClickHouse.Parser-323"><span class="linenos">323</span></a>
-</span><span id="ClickHouse.Parser-324"><a href="#ClickHouse.Parser-324"><span class="linenos">324</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse.Parser-325"><a href="#ClickHouse.Parser-325"><span class="linenos">325</span></a>
-</span><span id="ClickHouse.Parser-326"><a href="#ClickHouse.Parser-326"><span class="linenos">326</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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="ClickHouse.Parser-327"><a href="#ClickHouse.Parser-327"><span class="linenos">327</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="ClickHouse.Parser-328"><a href="#ClickHouse.Parser-328"><span class="linenos">328</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
-</span><span id="ClickHouse.Parser-329"><a href="#ClickHouse.Parser-329"><span class="linenos">329</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
-</span><span id="ClickHouse.Parser-330"><a href="#ClickHouse.Parser-330"><span class="linenos">330</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="ClickHouse.Parser-331"><a href="#ClickHouse.Parser-331"><span class="linenos">331</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-332"><a href="#ClickHouse.Parser-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse.Parser-333"><a href="#ClickHouse.Parser-333"><span class="linenos">333</span></a>
-</span><span id="ClickHouse.Parser-334"><a href="#ClickHouse.Parser-334"><span class="linenos">334</span></a> <span class="n">this</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><span id="ClickHouse.Parser-335"><a href="#ClickHouse.Parser-335"><span class="linenos">335</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">COLON</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-336"><a href="#ClickHouse.Parser-336"><span class="linenos">336</span></a> <span class="n">kind</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 class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="ClickHouse.Parser-337"><a href="#ClickHouse.Parser-337"><span class="linenos">337</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
-</span><span id="ClickHouse.Parser-338"><a href="#ClickHouse.Parser-338"><span class="linenos">338</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-296"><a href="#ClickHouse.Parser-296"><span class="linenos">296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-297"><a href="#ClickHouse.Parser-297"><span class="linenos">297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-298"><a href="#ClickHouse.Parser-298"><span class="linenos">298</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-299"><a href="#ClickHouse.Parser-299"><span class="linenos">299</span></a>
+</span><span id="ClickHouse.Parser-300"><a href="#ClickHouse.Parser-300"><span class="linenos">300</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-301"><a href="#ClickHouse.Parser-301"><span class="linenos">301</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-302"><a href="#ClickHouse.Parser-302"><span class="linenos">302</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-303"><a href="#ClickHouse.Parser-303"><span class="linenos">303</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-304"><a href="#ClickHouse.Parser-304"><span class="linenos">304</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-305"><a href="#ClickHouse.Parser-305"><span class="linenos">305</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-306"><a href="#ClickHouse.Parser-306"><span class="linenos">306</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-307"><a href="#ClickHouse.Parser-307"><span class="linenos">307</span></a>
+</span><span id="ClickHouse.Parser-308"><a href="#ClickHouse.Parser-308"><span class="linenos">308</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse.Parser-309"><a href="#ClickHouse.Parser-309"><span class="linenos">309</span></a>
+</span><span id="ClickHouse.Parser-310"><a href="#ClickHouse.Parser-310"><span class="linenos">310</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Parser-311"><a href="#ClickHouse.Parser-311"><span class="linenos">311</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">QUERY_MODIFIER_PARSERS</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-312"><a href="#ClickHouse.Parser-312"><span class="linenos">312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="ClickHouse.Parser-313"><a href="#ClickHouse.Parser-313"><span class="linenos">313</span></a> <span class="s2">&quot;settings&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-314"><a href="#ClickHouse.Parser-314"><span class="linenos">314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</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_conjunction</span><span class="p">),</span>
+</span><span id="ClickHouse.Parser-315"><a href="#ClickHouse.Parser-315"><span class="linenos">315</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Parser-316"><a href="#ClickHouse.Parser-316"><span class="linenos">316</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="ClickHouse.Parser-317"><a href="#ClickHouse.Parser-317"><span class="linenos">317</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Parser-318"><a href="#ClickHouse.Parser-318"><span class="linenos">318</span></a>
+</span><span id="ClickHouse.Parser-319"><a href="#ClickHouse.Parser-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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="ClickHouse.Parser-320"><a href="#ClickHouse.Parser-320"><span class="linenos">320</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_conjunction</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-321"><a href="#ClickHouse.Parser-321"><span class="linenos">321</span></a>
+</span><span id="ClickHouse.Parser-322"><a href="#ClickHouse.Parser-322"><span class="linenos">322</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">PLACEHOLDER</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-323"><a href="#ClickHouse.Parser-323"><span class="linenos">323</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="ClickHouse.Parser-324"><a href="#ClickHouse.Parser-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-325"><a href="#ClickHouse.Parser-325"><span class="linenos">325</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-326"><a href="#ClickHouse.Parser-326"><span class="linenos">326</span></a> <span class="n">true</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="ClickHouse.Parser-327"><a href="#ClickHouse.Parser-327"><span class="linenos">327</span></a> <span class="n">false</span><span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="ClickHouse.Parser-328"><a href="#ClickHouse.Parser-328"><span class="linenos">328</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-329"><a href="#ClickHouse.Parser-329"><span class="linenos">329</span></a>
+</span><span id="ClickHouse.Parser-330"><a href="#ClickHouse.Parser-330"><span class="linenos">330</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse.Parser-331"><a href="#ClickHouse.Parser-331"><span class="linenos">331</span></a>
+</span><span id="ClickHouse.Parser-332"><a href="#ClickHouse.Parser-332"><span class="linenos">332</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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="ClickHouse.Parser-333"><a href="#ClickHouse.Parser-333"><span class="linenos">333</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="ClickHouse.Parser-334"><a href="#ClickHouse.Parser-334"><span class="linenos">334</span></a><span class="sd"> Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}</span>
+</span><span id="ClickHouse.Parser-335"><a href="#ClickHouse.Parser-335"><span class="linenos">335</span></a><span class="sd"> https://clickhouse.com/docs/en/sql-reference/syntax#defining-and-using-query-parameters</span>
+</span><span id="ClickHouse.Parser-336"><a href="#ClickHouse.Parser-336"><span class="linenos">336</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="ClickHouse.Parser-337"><a href="#ClickHouse.Parser-337"><span class="linenos">337</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-338"><a href="#ClickHouse.Parser-338"><span class="linenos">338</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="ClickHouse.Parser-339"><a href="#ClickHouse.Parser-339"><span class="linenos">339</span></a>
-</span><span id="ClickHouse.Parser-340"><a href="#ClickHouse.Parser-340"><span class="linenos">340</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-341"><a href="#ClickHouse.Parser-341"><span class="linenos">341</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;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-342"><a href="#ClickHouse.Parser-342"><span class="linenos">342</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-343"><a href="#ClickHouse.Parser-343"><span class="linenos">343</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;Expecting }&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-344"><a href="#ClickHouse.Parser-344"><span class="linenos">344</span></a>
-</span><span id="ClickHouse.Parser-345"><a href="#ClickHouse.Parser-345"><span class="linenos">345</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">Placeholder</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-346"><a href="#ClickHouse.Parser-346"><span class="linenos">346</span></a>
-</span><span id="ClickHouse.Parser-347"><a href="#ClickHouse.Parser-347"><span class="linenos">347</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-348"><a href="#ClickHouse.Parser-348"><span class="linenos">348</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-349"><a href="#ClickHouse.Parser-349"><span class="linenos">349</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-350"><a href="#ClickHouse.Parser-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse.Parser-351"><a href="#ClickHouse.Parser-351"><span class="linenos">351</span></a>
-</span><span id="ClickHouse.Parser-352"><a href="#ClickHouse.Parser-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-353"><a href="#ClickHouse.Parser-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-354"><a href="#ClickHouse.Parser-354"><span class="linenos">354</span></a> <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><span id="ClickHouse.Parser-355"><a href="#ClickHouse.Parser-355"><span class="linenos">355</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-356"><a href="#ClickHouse.Parser-356"><span class="linenos">356</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-357"><a href="#ClickHouse.Parser-357"><span class="linenos">357</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-358"><a href="#ClickHouse.Parser-358"><span class="linenos">358</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-359"><a href="#ClickHouse.Parser-359"><span class="linenos">359</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-360"><a href="#ClickHouse.Parser-360"><span class="linenos">360</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-361"><a href="#ClickHouse.Parser-361"><span class="linenos">361</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-362"><a href="#ClickHouse.Parser-362"><span class="linenos">362</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-363"><a href="#ClickHouse.Parser-363"><span class="linenos">363</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-364"><a href="#ClickHouse.Parser-364"><span class="linenos">364</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-365"><a href="#ClickHouse.Parser-365"><span class="linenos">365</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-366"><a href="#ClickHouse.Parser-366"><span class="linenos">366</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-367"><a href="#ClickHouse.Parser-367"><span class="linenos">367</span></a>
-</span><span id="ClickHouse.Parser-368"><a href="#ClickHouse.Parser-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-369"><a href="#ClickHouse.Parser-369"><span class="linenos">369</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-370"><a href="#ClickHouse.Parser-370"><span class="linenos">370</span></a>
-</span><span id="ClickHouse.Parser-371"><a href="#ClickHouse.Parser-371"><span class="linenos">371</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="ClickHouse.Parser-372"><a href="#ClickHouse.Parser-372"><span class="linenos">372</span></a>
-</span><span id="ClickHouse.Parser-373"><a href="#ClickHouse.Parser-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-374"><a href="#ClickHouse.Parser-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-375"><a href="#ClickHouse.Parser-375"><span class="linenos">375</span></a>
-</span><span id="ClickHouse.Parser-376"><a href="#ClickHouse.Parser-376"><span class="linenos">376</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
-</span><span id="ClickHouse.Parser-377"><a href="#ClickHouse.Parser-377"><span class="linenos">377</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-378"><a href="#ClickHouse.Parser-378"><span class="linenos">378</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse.Parser-379"><a href="#ClickHouse.Parser-379"><span class="linenos">379</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-380"><a href="#ClickHouse.Parser-380"><span class="linenos">380</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
-</span><span id="ClickHouse.Parser-381"><a href="#ClickHouse.Parser-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-382"><a href="#ClickHouse.Parser-382"><span class="linenos">382</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-383"><a href="#ClickHouse.Parser-383"><span class="linenos">383</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
-</span><span id="ClickHouse.Parser-384"><a href="#ClickHouse.Parser-384"><span class="linenos">384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-385"><a href="#ClickHouse.Parser-385"><span class="linenos">385</span></a>
-</span><span id="ClickHouse.Parser-386"><a href="#ClickHouse.Parser-386"><span class="linenos">386</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="ClickHouse.Parser-387"><a href="#ClickHouse.Parser-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-388"><a href="#ClickHouse.Parser-388"><span class="linenos">388</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(),</span>
-</span><span id="ClickHouse.Parser-389"><a href="#ClickHouse.Parser-389"><span class="linenos">389</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="ClickHouse.Parser-390"><a href="#ClickHouse.Parser-390"><span class="linenos">390</span></a> <span class="n">scalar</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-391"><a href="#ClickHouse.Parser-391"><span class="linenos">391</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-392"><a href="#ClickHouse.Parser-392"><span class="linenos">392</span></a>
-</span><span id="ClickHouse.Parser-393"><a href="#ClickHouse.Parser-393"><span class="linenos">393</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-394"><a href="#ClickHouse.Parser-394"><span class="linenos">394</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-395"><a href="#ClickHouse.Parser-395"><span class="linenos">395</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
-</span><span id="ClickHouse.Parser-396"><a href="#ClickHouse.Parser-396"><span class="linenos">396</span></a> <span class="n">is_global</span> <span class="o">=</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">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse.Parser-397"><a href="#ClickHouse.Parser-397"><span class="linenos">397</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-340"><a href="#ClickHouse.Parser-340"><span class="linenos">340</span></a> <span class="n">this</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><span id="ClickHouse.Parser-341"><a href="#ClickHouse.Parser-341"><span class="linenos">341</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">COLON</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-342"><a href="#ClickHouse.Parser-342"><span class="linenos">342</span></a> <span class="n">kind</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 class="n">check_func</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="ClickHouse.Parser-343"><a href="#ClickHouse.Parser-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;Identifier&quot;</span>
+</span><span id="ClickHouse.Parser-344"><a href="#ClickHouse.Parser-344"><span class="linenos">344</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-345"><a href="#ClickHouse.Parser-345"><span class="linenos">345</span></a>
+</span><span id="ClickHouse.Parser-346"><a href="#ClickHouse.Parser-346"><span class="linenos">346</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-347"><a href="#ClickHouse.Parser-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;Expecting a placeholder type or &#39;Identifier&#39; for tables&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-348"><a href="#ClickHouse.Parser-348"><span class="linenos">348</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-349"><a href="#ClickHouse.Parser-349"><span class="linenos">349</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;Expecting }&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-350"><a href="#ClickHouse.Parser-350"><span class="linenos">350</span></a>
+</span><span id="ClickHouse.Parser-351"><a href="#ClickHouse.Parser-351"><span class="linenos">351</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">Placeholder</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-352"><a href="#ClickHouse.Parser-352"><span class="linenos">352</span></a>
+</span><span id="ClickHouse.Parser-353"><a href="#ClickHouse.Parser-353"><span class="linenos">353</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-354"><a href="#ClickHouse.Parser-354"><span class="linenos">354</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-355"><a href="#ClickHouse.Parser-355"><span class="linenos">355</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-356"><a href="#ClickHouse.Parser-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse.Parser-357"><a href="#ClickHouse.Parser-357"><span class="linenos">357</span></a>
+</span><span id="ClickHouse.Parser-358"><a href="#ClickHouse.Parser-358"><span class="linenos">358</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-359"><a href="#ClickHouse.Parser-359"><span class="linenos">359</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-360"><a href="#ClickHouse.Parser-360"><span class="linenos">360</span></a> <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><span id="ClickHouse.Parser-361"><a href="#ClickHouse.Parser-361"><span class="linenos">361</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-362"><a href="#ClickHouse.Parser-362"><span class="linenos">362</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-363"><a href="#ClickHouse.Parser-363"><span class="linenos">363</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-364"><a href="#ClickHouse.Parser-364"><span class="linenos">364</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-365"><a href="#ClickHouse.Parser-365"><span class="linenos">365</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-366"><a href="#ClickHouse.Parser-366"><span class="linenos">366</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-367"><a href="#ClickHouse.Parser-367"><span class="linenos">367</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-368"><a href="#ClickHouse.Parser-368"><span class="linenos">368</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-369"><a href="#ClickHouse.Parser-369"><span class="linenos">369</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-370"><a href="#ClickHouse.Parser-370"><span class="linenos">370</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-371"><a href="#ClickHouse.Parser-371"><span class="linenos">371</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-372"><a href="#ClickHouse.Parser-372"><span class="linenos">372</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-373"><a href="#ClickHouse.Parser-373"><span class="linenos">373</span></a>
+</span><span id="ClickHouse.Parser-374"><a href="#ClickHouse.Parser-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-375"><a href="#ClickHouse.Parser-375"><span class="linenos">375</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-376"><a href="#ClickHouse.Parser-376"><span class="linenos">376</span></a>
+</span><span id="ClickHouse.Parser-377"><a href="#ClickHouse.Parser-377"><span class="linenos">377</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="ClickHouse.Parser-378"><a href="#ClickHouse.Parser-378"><span class="linenos">378</span></a>
+</span><span id="ClickHouse.Parser-379"><a href="#ClickHouse.Parser-379"><span class="linenos">379</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-380"><a href="#ClickHouse.Parser-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-381"><a href="#ClickHouse.Parser-381"><span class="linenos">381</span></a>
+</span><span id="ClickHouse.Parser-382"><a href="#ClickHouse.Parser-382"><span class="linenos">382</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
+</span><span id="ClickHouse.Parser-383"><a href="#ClickHouse.Parser-383"><span class="linenos">383</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-384"><a href="#ClickHouse.Parser-384"><span class="linenos">384</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse.Parser-385"><a href="#ClickHouse.Parser-385"><span class="linenos">385</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-386"><a href="#ClickHouse.Parser-386"><span class="linenos">386</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
+</span><span id="ClickHouse.Parser-387"><a href="#ClickHouse.Parser-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-388"><a href="#ClickHouse.Parser-388"><span class="linenos">388</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-389"><a href="#ClickHouse.Parser-389"><span class="linenos">389</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
+</span><span id="ClickHouse.Parser-390"><a href="#ClickHouse.Parser-390"><span class="linenos">390</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-391"><a href="#ClickHouse.Parser-391"><span class="linenos">391</span></a>
+</span><span id="ClickHouse.Parser-392"><a href="#ClickHouse.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><span id="ClickHouse.Parser-393"><a href="#ClickHouse.Parser-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-394"><a href="#ClickHouse.Parser-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_field</span><span class="p">(),</span>
+</span><span id="ClickHouse.Parser-395"><a href="#ClickHouse.Parser-395"><span class="linenos">395</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="ClickHouse.Parser-396"><a href="#ClickHouse.Parser-396"><span class="linenos">396</span></a> <span class="n">scalar</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-397"><a href="#ClickHouse.Parser-397"><span class="linenos">397</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Parser-398"><a href="#ClickHouse.Parser-398"><span class="linenos">398</span></a>
-</span><span id="ClickHouse.Parser-399"><a href="#ClickHouse.Parser-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-400"><a href="#ClickHouse.Parser-400"><span class="linenos">400</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse.Parser-401"><a href="#ClickHouse.Parser-401"><span class="linenos">401</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="ClickHouse.Parser-402"><a href="#ClickHouse.Parser-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
-</span><span id="ClickHouse.Parser-403"><a href="#ClickHouse.Parser-403"><span class="linenos">403</span></a>
-</span><span id="ClickHouse.Parser-404"><a href="#ClickHouse.Parser-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="ClickHouse.Parser-405"><a href="#ClickHouse.Parser-405"><span class="linenos">405</span></a> <span class="n">is_global</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-406"><a href="#ClickHouse.Parser-406"><span class="linenos">406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-407"><a href="#ClickHouse.Parser-407"><span class="linenos">407</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-408"><a href="#ClickHouse.Parser-408"><span class="linenos">408</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-399"><a href="#ClickHouse.Parser-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-400"><a href="#ClickHouse.Parser-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-401"><a href="#ClickHouse.Parser-401"><span class="linenos">401</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
+</span><span id="ClickHouse.Parser-402"><a href="#ClickHouse.Parser-402"><span class="linenos">402</span></a> <span class="n">is_global</span> <span class="o">=</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">GLOBAL</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-403"><a href="#ClickHouse.Parser-403"><span class="linenos">403</span></a> <span class="n">kind_pre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-404"><a href="#ClickHouse.Parser-404"><span class="linenos">404</span></a>
+</span><span id="ClickHouse.Parser-405"><a href="#ClickHouse.Parser-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="n">kind_pre</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-406"><a href="#ClickHouse.Parser-406"><span class="linenos">406</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-407"><a href="#ClickHouse.Parser-407"><span class="linenos">407</span></a> <span class="n">side</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="ClickHouse.Parser-408"><a href="#ClickHouse.Parser-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="n">is_global</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span>
</span><span id="ClickHouse.Parser-409"><a href="#ClickHouse.Parser-409"><span class="linenos">409</span></a>
-</span><span id="ClickHouse.Parser-410"><a href="#ClickHouse.Parser-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-411"><a href="#ClickHouse.Parser-411"><span class="linenos">411</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Parser-412"><a href="#ClickHouse.Parser-412"><span class="linenos">412</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">Join</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-413"><a href="#ClickHouse.Parser-413"><span class="linenos">413</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-414"><a href="#ClickHouse.Parser-414"><span class="linenos">414</span></a>
-</span><span id="ClickHouse.Parser-415"><a href="#ClickHouse.Parser-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-416"><a href="#ClickHouse.Parser-416"><span class="linenos">416</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
-</span><span id="ClickHouse.Parser-417"><a href="#ClickHouse.Parser-417"><span class="linenos">417</span></a> <span class="k">return</span> <span class="n">join</span>
-</span><span id="ClickHouse.Parser-418"><a href="#ClickHouse.Parser-418"><span class="linenos">418</span></a>
-</span><span id="ClickHouse.Parser-419"><a href="#ClickHouse.Parser-419"><span class="linenos">419</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-420"><a href="#ClickHouse.Parser-420"><span class="linenos">420</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-421"><a href="#ClickHouse.Parser-421"><span class="linenos">421</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-422"><a href="#ClickHouse.Parser-422"><span class="linenos">422</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-423"><a href="#ClickHouse.Parser-423"><span class="linenos">423</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-424"><a href="#ClickHouse.Parser-424"><span class="linenos">424</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-425"><a href="#ClickHouse.Parser-425"><span class="linenos">425</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-426"><a href="#ClickHouse.Parser-426"><span class="linenos">426</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="ClickHouse.Parser-427"><a href="#ClickHouse.Parser-427"><span class="linenos">427</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-428"><a href="#ClickHouse.Parser-428"><span class="linenos">428</span></a>
-</span><span id="ClickHouse.Parser-429"><a href="#ClickHouse.Parser-429"><span class="linenos">429</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-430"><a href="#ClickHouse.Parser-430"><span class="linenos">430</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGG_FUNC_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-431"><a href="#ClickHouse.Parser-431"><span class="linenos">431</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-432"><a href="#ClickHouse.Parser-432"><span class="linenos">432</span></a>
-</span><span id="ClickHouse.Parser-433"><a href="#ClickHouse.Parser-433"><span class="linenos">433</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-434"><a href="#ClickHouse.Parser-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-435"><a href="#ClickHouse.Parser-435"><span class="linenos">435</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="ClickHouse.Parser-436"><a href="#ClickHouse.Parser-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedParameterizedAgg</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-437"><a href="#ClickHouse.Parser-437"><span class="linenos">437</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-438"><a href="#ClickHouse.Parser-438"><span class="linenos">438</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-439"><a href="#ClickHouse.Parser-439"><span class="linenos">439</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-440"><a href="#ClickHouse.Parser-440"><span class="linenos">440</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-441"><a href="#ClickHouse.Parser-441"><span class="linenos">441</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-442"><a href="#ClickHouse.Parser-442"><span class="linenos">442</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="ClickHouse.Parser-443"><a href="#ClickHouse.Parser-443"><span class="linenos">443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-444"><a href="#ClickHouse.Parser-444"><span class="linenos">444</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-445"><a href="#ClickHouse.Parser-445"><span class="linenos">445</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-446"><a href="#ClickHouse.Parser-446"><span class="linenos">446</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-447"><a href="#ClickHouse.Parser-447"><span class="linenos">447</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-448"><a href="#ClickHouse.Parser-448"><span class="linenos">448</span></a>
-</span><span id="ClickHouse.Parser-449"><a href="#ClickHouse.Parser-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-450"><a href="#ClickHouse.Parser-450"><span class="linenos">450</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-451"><a href="#ClickHouse.Parser-451"><span class="linenos">451</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="ClickHouse.Parser-452"><a href="#ClickHouse.Parser-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-453"><a href="#ClickHouse.Parser-453"><span class="linenos">453</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-454"><a href="#ClickHouse.Parser-454"><span class="linenos">454</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-455"><a href="#ClickHouse.Parser-455"><span class="linenos">455</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-456"><a href="#ClickHouse.Parser-456"><span class="linenos">456</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-457"><a href="#ClickHouse.Parser-457"><span class="linenos">457</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="ClickHouse.Parser-458"><a href="#ClickHouse.Parser-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnonymousAggFunc</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-459"><a href="#ClickHouse.Parser-459"><span class="linenos">459</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-460"><a href="#ClickHouse.Parser-460"><span class="linenos">460</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="ClickHouse.Parser-461"><a href="#ClickHouse.Parser-461"><span class="linenos">461</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-462"><a href="#ClickHouse.Parser-462"><span class="linenos">462</span></a>
-</span><span id="ClickHouse.Parser-463"><a href="#ClickHouse.Parser-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="ClickHouse.Parser-464"><a href="#ClickHouse.Parser-464"><span class="linenos">464</span></a>
-</span><span id="ClickHouse.Parser-465"><a href="#ClickHouse.Parser-465"><span class="linenos">465</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-466"><a href="#ClickHouse.Parser-466"><span class="linenos">466</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="ClickHouse.Parser-467"><a href="#ClickHouse.Parser-467"><span class="linenos">467</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="ClickHouse.Parser-468"><a href="#ClickHouse.Parser-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-469"><a href="#ClickHouse.Parser-469"><span class="linenos">469</span></a> <span class="k">return</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_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-410"><a href="#ClickHouse.Parser-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="ClickHouse.Parser-411"><a href="#ClickHouse.Parser-411"><span class="linenos">411</span></a> <span class="n">is_global</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-412"><a href="#ClickHouse.Parser-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-413"><a href="#ClickHouse.Parser-413"><span class="linenos">413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-414"><a href="#ClickHouse.Parser-414"><span class="linenos">414</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-415"><a href="#ClickHouse.Parser-415"><span class="linenos">415</span></a>
+</span><span id="ClickHouse.Parser-416"><a href="#ClickHouse.Parser-416"><span class="linenos">416</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-417"><a href="#ClickHouse.Parser-417"><span class="linenos">417</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Parser-418"><a href="#ClickHouse.Parser-418"><span class="linenos">418</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">Join</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-419"><a href="#ClickHouse.Parser-419"><span class="linenos">419</span></a> <span class="n">join</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(</span><span class="n">skip_join_token</span><span class="o">=</span><span class="n">skip_join_token</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-420"><a href="#ClickHouse.Parser-420"><span class="linenos">420</span></a>
+</span><span id="ClickHouse.Parser-421"><a href="#ClickHouse.Parser-421"><span class="linenos">421</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-422"><a href="#ClickHouse.Parser-422"><span class="linenos">422</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;method&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span>
+</span><span id="ClickHouse.Parser-423"><a href="#ClickHouse.Parser-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="ClickHouse.Parser-424"><a href="#ClickHouse.Parser-424"><span class="linenos">424</span></a>
+</span><span id="ClickHouse.Parser-425"><a href="#ClickHouse.Parser-425"><span class="linenos">425</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-426"><a href="#ClickHouse.Parser-426"><span class="linenos">426</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-427"><a href="#ClickHouse.Parser-427"><span class="linenos">427</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-428"><a href="#ClickHouse.Parser-428"><span class="linenos">428</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-429"><a href="#ClickHouse.Parser-429"><span class="linenos">429</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-430"><a href="#ClickHouse.Parser-430"><span class="linenos">430</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-431"><a href="#ClickHouse.Parser-431"><span class="linenos">431</span></a> <span class="n">func</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-432"><a href="#ClickHouse.Parser-432"><span class="linenos">432</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="ClickHouse.Parser-433"><a href="#ClickHouse.Parser-433"><span class="linenos">433</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-434"><a href="#ClickHouse.Parser-434"><span class="linenos">434</span></a>
+</span><span id="ClickHouse.Parser-435"><a href="#ClickHouse.Parser-435"><span class="linenos">435</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-436"><a href="#ClickHouse.Parser-436"><span class="linenos">436</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGG_FUNC_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-437"><a href="#ClickHouse.Parser-437"><span class="linenos">437</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-438"><a href="#ClickHouse.Parser-438"><span class="linenos">438</span></a>
+</span><span id="ClickHouse.Parser-439"><a href="#ClickHouse.Parser-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-440"><a href="#ClickHouse.Parser-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-441"><a href="#ClickHouse.Parser-441"><span class="linenos">441</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="ClickHouse.Parser-442"><a href="#ClickHouse.Parser-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedParameterizedAgg</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-443"><a href="#ClickHouse.Parser-443"><span class="linenos">443</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-444"><a href="#ClickHouse.Parser-444"><span class="linenos">444</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-445"><a href="#ClickHouse.Parser-445"><span class="linenos">445</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-446"><a href="#ClickHouse.Parser-446"><span class="linenos">446</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-447"><a href="#ClickHouse.Parser-447"><span class="linenos">447</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-448"><a href="#ClickHouse.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><span id="ClickHouse.Parser-449"><a href="#ClickHouse.Parser-449"><span class="linenos">449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParameterizedAgg</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-450"><a href="#ClickHouse.Parser-450"><span class="linenos">450</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-451"><a href="#ClickHouse.Parser-451"><span class="linenos">451</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-452"><a href="#ClickHouse.Parser-452"><span class="linenos">452</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-453"><a href="#ClickHouse.Parser-453"><span class="linenos">453</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-454"><a href="#ClickHouse.Parser-454"><span class="linenos">454</span></a>
+</span><span id="ClickHouse.Parser-455"><a href="#ClickHouse.Parser-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-456"><a href="#ClickHouse.Parser-456"><span class="linenos">456</span></a> <span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-457"><a href="#ClickHouse.Parser-457"><span class="linenos">457</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="ClickHouse.Parser-458"><a href="#ClickHouse.Parser-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CombinedAggFunc</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-459"><a href="#ClickHouse.Parser-459"><span class="linenos">459</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-460"><a href="#ClickHouse.Parser-460"><span class="linenos">460</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-461"><a href="#ClickHouse.Parser-461"><span class="linenos">461</span></a> <span class="n">parts</span><span class="o">=</span><span class="n">parts</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-462"><a href="#ClickHouse.Parser-462"><span class="linenos">462</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-463"><a href="#ClickHouse.Parser-463"><span class="linenos">463</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="ClickHouse.Parser-464"><a href="#ClickHouse.Parser-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnonymousAggFunc</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-465"><a href="#ClickHouse.Parser-465"><span class="linenos">465</span></a> <span class="n">this</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-466"><a href="#ClickHouse.Parser-466"><span class="linenos">466</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">func</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="ClickHouse.Parser-467"><a href="#ClickHouse.Parser-467"><span class="linenos">467</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-468"><a href="#ClickHouse.Parser-468"><span class="linenos">468</span></a>
+</span><span id="ClickHouse.Parser-469"><a href="#ClickHouse.Parser-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="ClickHouse.Parser-470"><a href="#ClickHouse.Parser-470"><span class="linenos">470</span></a>
-</span><span id="ClickHouse.Parser-471"><a href="#ClickHouse.Parser-471"><span class="linenos">471</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">L_PAREN</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-472"><a href="#ClickHouse.Parser-472"><span class="linenos">472</span></a> <span class="n">params</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_lambda</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-473"><a href="#ClickHouse.Parser-473"><span class="linenos">473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-474"><a href="#ClickHouse.Parser-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="n">params</span>
-</span><span id="ClickHouse.Parser-475"><a href="#ClickHouse.Parser-475"><span class="linenos">475</span></a>
-</span><span id="ClickHouse.Parser-476"><a href="#ClickHouse.Parser-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="ClickHouse.Parser-477"><a href="#ClickHouse.Parser-477"><span class="linenos">477</span></a>
-</span><span id="ClickHouse.Parser-478"><a href="#ClickHouse.Parser-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</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">Quantile</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-479"><a href="#ClickHouse.Parser-479"><span class="linenos">479</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-480"><a href="#ClickHouse.Parser-480"><span class="linenos">480</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
-</span><span id="ClickHouse.Parser-481"><a href="#ClickHouse.Parser-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-482"><a href="#ClickHouse.Parser-482"><span class="linenos">482</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">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-483"><a href="#ClickHouse.Parser-483"><span class="linenos">483</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">Quantile</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">quantile</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="mf">0.5</span><span class="p">))</span>
-</span><span id="ClickHouse.Parser-484"><a href="#ClickHouse.Parser-484"><span class="linenos">484</span></a>
-</span><span id="ClickHouse.Parser-485"><a href="#ClickHouse.Parser-485"><span class="linenos">485</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="ClickHouse.Parser-486"><a href="#ClickHouse.Parser-486"><span class="linenos">486</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-487"><a href="#ClickHouse.Parser-487"><span class="linenos">487</span></a>
-</span><span id="ClickHouse.Parser-488"><a href="#ClickHouse.Parser-488"><span class="linenos">488</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-489"><a href="#ClickHouse.Parser-489"><span class="linenos">489</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Parser-490"><a href="#ClickHouse.Parser-490"><span class="linenos">490</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-491"><a href="#ClickHouse.Parser-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
-</span><span id="ClickHouse.Parser-492"><a href="#ClickHouse.Parser-492"><span class="linenos">492</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
-</span><span id="ClickHouse.Parser-493"><a href="#ClickHouse.Parser-493"><span class="linenos">493</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Parser-494"><a href="#ClickHouse.Parser-494"><span class="linenos">494</span></a>
-</span><span id="ClickHouse.Parser-495"><a href="#ClickHouse.Parser-495"><span class="linenos">495</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</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="ClickHouse.Parser-496"><a href="#ClickHouse.Parser-496"><span class="linenos">496</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="ClickHouse.Parser-497"><a href="#ClickHouse.Parser-497"><span class="linenos">497</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;CLUSTER&quot;</span><span class="p">):</span>
-</span><span id="ClickHouse.Parser-498"><a href="#ClickHouse.Parser-498"><span class="linenos">498</span></a> <span class="n">this</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><span id="ClickHouse.Parser-499"><a href="#ClickHouse.Parser-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-500"><a href="#ClickHouse.Parser-500"><span class="linenos">500</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">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-501"><a href="#ClickHouse.Parser-501"><span class="linenos">501</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="ClickHouse.Parser-502"><a href="#ClickHouse.Parser-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="ClickHouse.Parser-503"><a href="#ClickHouse.Parser-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse.Parser-471"><a href="#ClickHouse.Parser-471"><span class="linenos">471</span></a> <span class="k">def</span> <span class="nf">_parse_func_params</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-472"><a href="#ClickHouse.Parser-472"><span class="linenos">472</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="ClickHouse.Parser-473"><a href="#ClickHouse.Parser-473"><span class="linenos">473</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="ClickHouse.Parser-474"><a href="#ClickHouse.Parser-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-475"><a href="#ClickHouse.Parser-475"><span class="linenos">475</span></a> <span class="k">return</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_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-476"><a href="#ClickHouse.Parser-476"><span class="linenos">476</span></a>
+</span><span id="ClickHouse.Parser-477"><a href="#ClickHouse.Parser-477"><span class="linenos">477</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">L_PAREN</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-478"><a href="#ClickHouse.Parser-478"><span class="linenos">478</span></a> <span class="n">params</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_lambda</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-479"><a href="#ClickHouse.Parser-479"><span class="linenos">479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-480"><a href="#ClickHouse.Parser-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="n">params</span>
+</span><span id="ClickHouse.Parser-481"><a href="#ClickHouse.Parser-481"><span class="linenos">481</span></a>
+</span><span id="ClickHouse.Parser-482"><a href="#ClickHouse.Parser-482"><span class="linenos">482</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="ClickHouse.Parser-483"><a href="#ClickHouse.Parser-483"><span class="linenos">483</span></a>
+</span><span id="ClickHouse.Parser-484"><a href="#ClickHouse.Parser-484"><span class="linenos">484</span></a> <span class="k">def</span> <span class="nf">_parse_quantile</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">Quantile</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-485"><a href="#ClickHouse.Parser-485"><span class="linenos">485</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-486"><a href="#ClickHouse.Parser-486"><span class="linenos">486</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_func_params</span><span class="p">()</span>
+</span><span id="ClickHouse.Parser-487"><a href="#ClickHouse.Parser-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-488"><a href="#ClickHouse.Parser-488"><span class="linenos">488</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">Quantile</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">params</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">quantile</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-489"><a href="#ClickHouse.Parser-489"><span class="linenos">489</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">Quantile</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">quantile</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="mf">0.5</span><span class="p">))</span>
+</span><span id="ClickHouse.Parser-490"><a href="#ClickHouse.Parser-490"><span class="linenos">490</span></a>
+</span><span id="ClickHouse.Parser-491"><a href="#ClickHouse.Parser-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="ClickHouse.Parser-492"><a href="#ClickHouse.Parser-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(</span><span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-493"><a href="#ClickHouse.Parser-493"><span class="linenos">493</span></a>
+</span><span id="ClickHouse.Parser-494"><a href="#ClickHouse.Parser-494"><span class="linenos">494</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-495"><a href="#ClickHouse.Parser-495"><span class="linenos">495</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Parser-496"><a href="#ClickHouse.Parser-496"><span class="linenos">496</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-497"><a href="#ClickHouse.Parser-497"><span class="linenos">497</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span>
+</span><span id="ClickHouse.Parser-498"><a href="#ClickHouse.Parser-498"><span class="linenos">498</span></a> <span class="n">wrapped_optional</span><span class="o">=</span><span class="n">wrapped_optional</span> <span class="ow">or</span> <span class="n">in_props</span><span class="p">,</span> <span class="n">in_props</span><span class="o">=</span><span class="n">in_props</span>
+</span><span id="ClickHouse.Parser-499"><a href="#ClickHouse.Parser-499"><span class="linenos">499</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Parser-500"><a href="#ClickHouse.Parser-500"><span class="linenos">500</span></a>
+</span><span id="ClickHouse.Parser-501"><a href="#ClickHouse.Parser-501"><span class="linenos">501</span></a> <span class="k">def</span> <span class="nf">_parse_on_property</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="ClickHouse.Parser-502"><a href="#ClickHouse.Parser-502"><span class="linenos">502</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="ClickHouse.Parser-503"><a href="#ClickHouse.Parser-503"><span class="linenos">503</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;CLUSTER&quot;</span><span class="p">):</span>
+</span><span id="ClickHouse.Parser-504"><a href="#ClickHouse.Parser-504"><span class="linenos">504</span></a> <span class="n">this</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><span id="ClickHouse.Parser-505"><a href="#ClickHouse.Parser-505"><span class="linenos">505</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-506"><a href="#ClickHouse.Parser-506"><span class="linenos">506</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">OnCluster</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-507"><a href="#ClickHouse.Parser-507"><span class="linenos">507</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="ClickHouse.Parser-508"><a href="#ClickHouse.Parser-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="ClickHouse.Parser-509"><a href="#ClickHouse.Parser-509"><span class="linenos">509</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -2701,7 +2746,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNCTIONS</span> =
<input id="ClickHouse.Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANONYMOUS_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnonymousAggFunc">sqlglot.expressions.AnonymousAggFunc</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;APPROX_TOP_K&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxTopK">sqlglot.expressions.ApproxTopK</a>&#39;&gt;&gt;, &#39;ARG_MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARGMAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;MAX_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARG_MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARGMIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;MIN_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_OVERLAPS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;ARRAY_UNIQUE_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUniqueAgg">sqlglot.expressions.ArrayUniqueAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CHR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;COLLATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;&gt;, &#39;COMBINED_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedAggFunc">sqlglot.expressions.CombinedAggFunc</a>&#39;&gt;&gt;, &#39;COMBINED_PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedParameterizedAgg">sqlglot.expressions.CombinedParameterizedAgg</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;COUNTIF&#39;: &lt;function _parse_count_if&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ExplodeOuter">sqlglot.expressions.ExplodeOuter</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FIRST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FirstValue">sqlglot.expressions.FirstValue</a>&#39;&gt;&gt;, &#39;FLATTEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Flatten">sqlglot.expressions.Flatten</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_INF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;ISINF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArray">sqlglot.expressions.JSONArray</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayAgg">sqlglot.expressions.JSONArrayAgg</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;function parse_extract_json_with_path.&lt;locals&gt;._parser&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;function parse_extract_json_with_path.&lt;locals&gt;._parser&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObjectAgg">sqlglot.expressions.JSONObjectAgg</a>&#39;&gt;&gt;, &#39;J_S_O_N_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONTable">sqlglot.expressions.JSONTable</a>&#39;&gt;&gt;, &#39;LAG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lag">sqlglot.expressions.Lag</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastValue">sqlglot.expressions.LastValue</a>&#39;&gt;&gt;, &#39;LEAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lead">sqlglot.expressions.Lead</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;function parse_logarithm&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NTH_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NthValue">sqlglot.expressions.NthValue</a>&#39;&gt;&gt;, &#39;NULLIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PARSE_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;JSON_PARSE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POSEXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PosexplodeOuter">sqlglot.expressions.PosexplodeOuter</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;PREDICT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Predict">sqlglot.expressions.Predict</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RAND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDOM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Randn">sqlglot.expressions.Randn</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIMEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMPDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMPFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToArray">sqlglot.expressions.ToArray</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TO_DAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToDays">sqlglot.expressions.ToDays</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TS_OR_DS_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToTime">sqlglot.expressions.TsOrDsToTime</a>&#39;&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixDate">sqlglot.expressions.UnixDate</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JSON_EXTRACT_PATH_TEXT&#39;: &lt;function parse_extract_json_with_path.&lt;locals&gt;._parser&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;ARRAYSUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;DATEADD&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;MATCH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;RANDCANONICAL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;UNIQ&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ANONYMOUS_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnonymousAggFunc">sqlglot.expressions.AnonymousAggFunc</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;APPROX_TOP_K&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxTopK">sqlglot.expressions.ApproxTopK</a>&#39;&gt;&gt;, &#39;ARG_MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARGMAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;MAX_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARG_MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARGMIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;MIN_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayJoin">sqlglot.expressions.ArrayJoin</a>&#39;&gt;&gt;, &#39;ARRAY_OVERLAPS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;ARRAY_UNIQUE_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUniqueAgg">sqlglot.expressions.ArrayUniqueAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CHR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;COLLATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;&gt;, &#39;COMBINED_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedAggFunc">sqlglot.expressions.CombinedAggFunc</a>&#39;&gt;&gt;, &#39;COMBINED_PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedParameterizedAgg">sqlglot.expressions.CombinedParameterizedAgg</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COUNT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;COUNTIF&#39;: &lt;function _parse_count_if&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATEDIFF&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;DATE_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ExplodeOuter">sqlglot.expressions.ExplodeOuter</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FIRST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FirstValue">sqlglot.expressions.FirstValue</a>&#39;&gt;&gt;, &#39;FLATTEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Flatten">sqlglot.expressions.Flatten</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hex">sqlglot.expressions.Hex</a>&#39;&gt;&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_INF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;ISINF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArray">sqlglot.expressions.JSONArray</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayAgg">sqlglot.expressions.JSONArrayAgg</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;function parse_extract_json_with_path.&lt;locals&gt;._parser&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;function parse_extract_json_with_path.&lt;locals&gt;._parser&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObjectAgg">sqlglot.expressions.JSONObjectAgg</a>&#39;&gt;&gt;, &#39;J_S_O_N_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONTable">sqlglot.expressions.JSONTable</a>&#39;&gt;&gt;, &#39;LAG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lag">sqlglot.expressions.Lag</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastValue">sqlglot.expressions.LastValue</a>&#39;&gt;&gt;, &#39;LEAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lead">sqlglot.expressions.Lead</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;function parse_logarithm&gt;, &#39;LOG10&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;&gt;, &#39;LOG2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;function parse_var_map&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NTH_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NthValue">sqlglot.expressions.NthValue</a>&#39;&gt;&gt;, &#39;NULLIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PARSE_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;JSON_PARSE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POSEXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PosexplodeOuter">sqlglot.expressions.PosexplodeOuter</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;PREDICT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Predict">sqlglot.expressions.Predict</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;RAND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDOM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Randn">sqlglot.expressions.Randn</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIMEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMPDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMPFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToArray">sqlglot.expressions.ToArray</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TO_DAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToDays">sqlglot.expressions.ToDays</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TS_OR_DS_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToTime">sqlglot.expressions.TsOrDsToTime</a>&#39;&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixDate">sqlglot.expressions.UnixDate</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UPPER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function parse_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WHEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#When">sqlglot.expressions.When</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JSON_EXTRACT_PATH_TEXT&#39;: &lt;function parse_extract_json_with_path.&lt;locals&gt;._parser&gt;, &#39;LIKE&#39;: &lt;function parse_like&gt;, &#39;ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;ARRAYSUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;DATEADD&#39;: &lt;function <a href="#ClickHouse.Parser">ClickHouse.Parser</a>.&lt;lambda&gt;&gt;, &#39;JSONEXTRACTSTRING&#39;: &lt;function parse_json_extract_path.&lt;locals&gt;._parse_json_extract_path&gt;, &#39;MATCH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;RANDCANONICAL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;UNIQ&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;}</span>
</div>
@@ -2714,7 +2759,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">AGG_FUNCTIONS</span> =
<input id="ClickHouse.Parser.AGG_FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.AGG_FUNCTIONS-view-value"></label><span class="default_value">{&#39;sumKahan&#39;, &#39;uniq&#39;, &#39;sumWithOverflow&#39;, &#39;maxMap&#39;, &#39;varPop&#39;, &#39;last_value&#39;, &#39;quantilesInterpolatedWeighted&#39;, &#39;quantilesExact&#39;, &#39;quantileBFloat16&#39;, &#39;stochasticLogisticRegression&#39;, &#39;rankCorr&#39;, &#39;quantileTimingWeighted&#39;, &#39;simpleLinearRegression&#39;, &#39;quantilesGK&#39;, &#39;kolmogorovSmirnovTest&#39;, &#39;stddevPop&#39;, &#39;uniqExact&#39;, &#39;sparkBar&#39;, &#39;quantilesTDigestWeighted&#39;, &#39;kurtSamp&#39;, &#39;sumCount&#39;, &#39;cramersVBiasCorrected&#39;, &#39;quantileExactWeighted&#39;, &#39;quantileInterpolatedWeighted&#39;, &#39;kurtPop&#39;, &#39;quantileBFloat16Weighted&#39;, &#39;groupBitOr&#39;, &#39;boundingRatio&#39;, &#39;skewPop&#39;, &#39;maxIntersectionsPosition&#39;, &#39;quantilesExactHigh&#39;, &#39;topK&#39;, &#39;maxIntersections&#39;, &#39;quantileExactLow&#39;, &#39;groupArrayMovingAvg&#39;, &#39;corr&#39;, &#39;quantileDeterministic&#39;, &#39;exponentialMovingAverage&#39;, &#39;quantileExact&#39;, &#39;quantilesBFloat16&#39;, &#39;quantileGK&#39;, &#39;quantilesTimingWeighted&#39;, &#39;minMap&#39;, &#39;quantile&#39;, &#39;welchTTest&#39;, &#39;groupArraySample&#39;, &#39;groupBitXor&#39;, &#39;cramersV&#39;, &#39;topKWeighted&#39;, &#39;count&#39;, &#39;quantileExactHigh&#39;, &#39;argMin&#39;, &#39;stochasticLinearRegression&#39;, &#39;uniqTheta&#39;, &#39;intervalLengthSum&#39;, &#39;groupArrayMovingSum&#39;, &#39;mannWhitneyUTest&#39;, &#39;uniqCombined64&#39;, &#39;stddevSamp&#39;, &#39;skewSamp&#39;, &#39;quantilesTDigest&#39;, &#39;groupArray&#39;, &#39;groupBitmapAnd&#39;, &#39;min&#39;, &#39;quantiles&#39;, &#39;theilsU&#39;, &#39;anyLast&#39;, &#39;quantileTDigest&#39;, &#39;meanZTest&#39;, &#39;anyHeavy&#39;, &#39;sum&#39;, &#39;quantileTDigestWeighted&#39;, &#39;quantileTiming&#39;, &#39;covarPop&#39;, &#39;groupUniqArray&#39;, &#39;first_value&#39;, &#39;uniqHLL12&#39;, &#39;sumMap&#39;, &#39;quantilesTiming&#39;, &#39;any&#39;, &#39;contingency&#39;, &#39;largestTriangleThreeBuckets&#39;, &#39;groupBitmapXor&#39;, &#39;argMax&#39;, &#39;groupArrayLast&#39;, &#39;quantilesExactWeighted&#39;, &#39;quantilesExactLow&#39;, &#39;median&#39;, &#39;groupArrayInsertAt&#39;, &#39;varSamp&#39;, &#39;categoricalInformationValue&#39;, &#39;groupBitAnd&#39;, &#39;deltaSumTimestamp&#39;, &#39;covarSamp&#39;, &#39;quantilesBFloat16Weighted&#39;, &#39;studentTTest&#39;, &#39;avg&#39;, &#39;max&#39;, &#39;avgWeighted&#39;, &#39;groupBitmap&#39;, &#39;groupBitmapOr&#39;, &#39;entropy&#39;, &#39;uniqCombined&#39;, &#39;deltaSum&#39;, &#39;quantilesDeterministic&#39;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.AGG_FUNCTIONS-view-value"></label><span class="default_value">{&#39;groupArrayMovingSum&#39;, &#39;count&#39;, &#39;sumCount&#39;, &#39;simpleLinearRegression&#39;, &#39;groupBitmapAnd&#39;, &#39;maxIntersectionsPosition&#39;, &#39;varPop&#39;, &#39;quantileInterpolatedWeighted&#39;, &#39;covarSamp&#39;, &#39;groupArraySample&#39;, &#39;quantilesInterpolatedWeighted&#39;, &#39;stddevPop&#39;, &#39;groupArrayInsertAt&#39;, &#39;mannWhitneyUTest&#39;, &#39;max&#39;, &#39;studentTTest&#39;, &#39;sumWithOverflow&#39;, &#39;quantilesTDigest&#39;, &#39;uniqCombined64&#39;, &#39;groupArray&#39;, &#39;quantilesExactWeighted&#39;, &#39;quantileDeterministic&#39;, &#39;last_value&#39;, &#39;groupBitAnd&#39;, &#39;sum&#39;, &#39;quantileTimingWeighted&#39;, &#39;groupUniqArray&#39;, &#39;quantileBFloat16Weighted&#39;, &#39;quantileExactLow&#39;, &#39;quantilesExactLow&#39;, &#39;groupBitXor&#39;, &#39;uniqHLL12&#39;, &#39;groupBitmapOr&#39;, &#39;uniqCombined&#39;, &#39;quantileTDigestWeighted&#39;, &#39;stochasticLogisticRegression&#39;, &#39;quantilesBFloat16&#39;, &#39;groupBitmap&#39;, &#39;groupBitmapXor&#39;, &#39;argMax&#39;, &#39;groupArrayMovingAvg&#39;, &#39;boundingRatio&#39;, &#39;quantileTDigest&#39;, &#39;kurtSamp&#39;, &#39;quantilesTDigestWeighted&#39;, &#39;stddevSamp&#39;, &#39;quantilesExactHigh&#39;, &#39;sumKahan&#39;, &#39;uniq&#39;, &#39;quantilesTimingWeighted&#39;, &#39;topK&#39;, &#39;quantilesTiming&#39;, &#39;quantileExactWeighted&#39;, &#39;stochasticLinearRegression&#39;, &#39;varSamp&#39;, &#39;groupArrayLast&#39;, &#39;quantilesGK&#39;, &#39;any&#39;, &#39;rankCorr&#39;, &#39;quantilesExact&#39;, &#39;argMin&#39;, &#39;anyHeavy&#39;, &#39;quantileGK&#39;, &#39;anyLast&#39;, &#39;maxIntersections&#39;, &#39;corr&#39;, &#39;deltaSum&#39;, &#39;topKWeighted&#39;, &#39;welchTTest&#39;, &#39;uniqExact&#39;, &#39;uniqTheta&#39;, &#39;deltaSumTimestamp&#39;, &#39;quantileExactHigh&#39;, &#39;quantileExact&#39;, &#39;skewSamp&#39;, &#39;maxMap&#39;, &#39;covarPop&#39;, &#39;kolmogorovSmirnovTest&#39;, &#39;quantile&#39;, &#39;theilsU&#39;, &#39;largestTriangleThreeBuckets&#39;, &#39;median&#39;, &#39;avg&#39;, &#39;quantileBFloat16&#39;, &#39;avgWeighted&#39;, &#39;quantiles&#39;, &#39;categoricalInformationValue&#39;, &#39;quantilesBFloat16Weighted&#39;, &#39;cramersV&#39;, &#39;exponentialMovingAverage&#39;, &#39;groupBitOr&#39;, &#39;contingency&#39;, &#39;quantilesDeterministic&#39;, &#39;skewPop&#39;, &#39;entropy&#39;, &#39;sumMap&#39;, &#39;min&#39;, &#39;meanZTest&#39;, &#39;first_value&#39;, &#39;quantileTiming&#39;, &#39;sparkBar&#39;, &#39;intervalLengthSum&#39;, &#39;minMap&#39;, &#39;kurtPop&#39;, &#39;cramersVBiasCorrected&#39;}</span>
</div>
@@ -2740,7 +2785,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">AGG_FUNC_MAPPING</span> =
<input id="ClickHouse.Parser.AGG_FUNC_MAPPING-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.AGG_FUNC_MAPPING-view-value"></label><span class="default_value">{&#39;sumKahanIf&#39;: (&#39;sumKahan&#39;, &#39;If&#39;), &#39;uniqIf&#39;: (&#39;uniq&#39;, &#39;If&#39;), &#39;sumWithOverflowIf&#39;: (&#39;sumWithOverflow&#39;, &#39;If&#39;), &#39;maxMapIf&#39;: (&#39;maxMap&#39;, &#39;If&#39;), &#39;varPopIf&#39;: (&#39;varPop&#39;, &#39;If&#39;), &#39;last_valueIf&#39;: (&#39;last_value&#39;, &#39;If&#39;), &#39;quantilesInterpolatedWeightedIf&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;If&#39;), &#39;quantilesExactIf&#39;: (&#39;quantilesExact&#39;, &#39;If&#39;), &#39;quantileBFloat16If&#39;: (&#39;quantileBFloat16&#39;, &#39;If&#39;), &#39;stochasticLogisticRegressionIf&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;If&#39;), &#39;rankCorrIf&#39;: (&#39;rankCorr&#39;, &#39;If&#39;), &#39;quantileTimingWeightedIf&#39;: (&#39;quantileTimingWeighted&#39;, &#39;If&#39;), &#39;simpleLinearRegressionIf&#39;: (&#39;simpleLinearRegression&#39;, &#39;If&#39;), &#39;quantilesGKIf&#39;: (&#39;quantilesGK&#39;, &#39;If&#39;), &#39;kolmogorovSmirnovTestIf&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;If&#39;), &#39;stddevPopIf&#39;: (&#39;stddevPop&#39;, &#39;If&#39;), &#39;uniqExactIf&#39;: (&#39;uniqExact&#39;, &#39;If&#39;), &#39;sparkBarIf&#39;: (&#39;sparkBar&#39;, &#39;If&#39;), &#39;quantilesTDigestWeightedIf&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;If&#39;), &#39;kurtSampIf&#39;: (&#39;kurtSamp&#39;, &#39;If&#39;), &#39;sumCountIf&#39;: (&#39;sumCount&#39;, &#39;If&#39;), &#39;cramersVBiasCorrectedIf&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;If&#39;), &#39;quantileExactWeightedIf&#39;: (&#39;quantileExactWeighted&#39;, &#39;If&#39;), &#39;quantileInterpolatedWeightedIf&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;If&#39;), &#39;kurtPopIf&#39;: (&#39;kurtPop&#39;, &#39;If&#39;), &#39;quantileBFloat16WeightedIf&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;If&#39;), &#39;groupBitOrIf&#39;: (&#39;groupBitOr&#39;, &#39;If&#39;), &#39;boundingRatioIf&#39;: (&#39;boundingRatio&#39;, &#39;If&#39;), &#39;skewPopIf&#39;: (&#39;skewPop&#39;, &#39;If&#39;), &#39;maxIntersectionsPositionIf&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;If&#39;), &#39;quantilesExactHighIf&#39;: (&#39;quantilesExactHigh&#39;, &#39;If&#39;), &#39;topKIf&#39;: (&#39;topK&#39;, &#39;If&#39;), &#39;maxIntersectionsIf&#39;: (&#39;maxIntersections&#39;, &#39;If&#39;), &#39;quantileExactLowIf&#39;: (&#39;quantileExactLow&#39;, &#39;If&#39;), &#39;groupArrayMovingAvgIf&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;If&#39;), &#39;corrIf&#39;: (&#39;corr&#39;, &#39;If&#39;), &#39;quantileDeterministicIf&#39;: (&#39;quantileDeterministic&#39;, &#39;If&#39;), &#39;exponentialMovingAverageIf&#39;: (&#39;exponentialMovingAverage&#39;, &#39;If&#39;), &#39;quantileExactIf&#39;: (&#39;quantileExact&#39;, &#39;If&#39;), &#39;quantilesBFloat16If&#39;: (&#39;quantilesBFloat16&#39;, &#39;If&#39;), &#39;quantileGKIf&#39;: (&#39;quantileGK&#39;, &#39;If&#39;), &#39;quantilesTimingWeightedIf&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;If&#39;), &#39;minMapIf&#39;: (&#39;minMap&#39;, &#39;If&#39;), &#39;quantileIf&#39;: (&#39;quantile&#39;, &#39;If&#39;), &#39;welchTTestIf&#39;: (&#39;welchTTest&#39;, &#39;If&#39;), &#39;groupArraySampleIf&#39;: (&#39;groupArraySample&#39;, &#39;If&#39;), &#39;groupBitXorIf&#39;: (&#39;groupBitXor&#39;, &#39;If&#39;), &#39;cramersVIf&#39;: (&#39;cramersV&#39;, &#39;If&#39;), &#39;topKWeightedIf&#39;: (&#39;topKWeighted&#39;, &#39;If&#39;), &#39;countIf&#39;: (&#39;count&#39;, &#39;If&#39;), &#39;quantileExactHighIf&#39;: (&#39;quantileExactHigh&#39;, &#39;If&#39;), &#39;argMinIf&#39;: (&#39;argMin&#39;, &#39;If&#39;), &#39;stochasticLinearRegressionIf&#39;: (&#39;stochasticLinearRegression&#39;, &#39;If&#39;), &#39;uniqThetaIf&#39;: (&#39;uniqTheta&#39;, &#39;If&#39;), &#39;intervalLengthSumIf&#39;: (&#39;intervalLengthSum&#39;, &#39;If&#39;), &#39;groupArrayMovingSumIf&#39;: (&#39;groupArrayMovingSum&#39;, &#39;If&#39;), &#39;mannWhitneyUTestIf&#39;: (&#39;mannWhitneyUTest&#39;, &#39;If&#39;), &#39;uniqCombined64If&#39;: (&#39;uniqCombined64&#39;, &#39;If&#39;), &#39;stddevSampIf&#39;: (&#39;stddevSamp&#39;, &#39;If&#39;), &#39;skewSampIf&#39;: (&#39;skewSamp&#39;, &#39;If&#39;), &#39;quantilesTDigestIf&#39;: (&#39;quantilesTDigest&#39;, &#39;If&#39;), &#39;groupArrayIf&#39;: (&#39;groupArray&#39;, &#39;If&#39;), &#39;groupBitmapAndIf&#39;: (&#39;groupBitmapAnd&#39;, &#39;If&#39;), &#39;minIf&#39;: (&#39;min&#39;, &#39;If&#39;), &#39;quantilesIf&#39;: (&#39;quantiles&#39;, &#39;If&#39;), &#39;theilsUIf&#39;: (&#39;theilsU&#39;, &#39;If&#39;), &#39;anyLastIf&#39;: (&#39;anyLast&#39;, &#39;If&#39;), &#39;quantileTDigestIf&#39;: (&#39;quantileTDigest&#39;, &#39;If&#39;), &#39;meanZTestIf&#39;: (&#39;meanZTest&#39;, &#39;If&#39;), &#39;anyHeavyIf&#39;: (&#39;anyHeavy&#39;, &#39;If&#39;), &#39;sumIf&#39;: (&#39;sum&#39;, &#39;If&#39;), &#39;quantileTDigestWeightedIf&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;If&#39;), &#39;quantileTimingIf&#39;: (&#39;quantileTiming&#39;, &#39;If&#39;), &#39;covarPopIf&#39;: (&#39;covarPop&#39;, &#39;If&#39;), &#39;groupUniqArrayIf&#39;: (&#39;groupUniqArray&#39;, &#39;If&#39;), &#39;first_valueIf&#39;: (&#39;first_value&#39;, &#39;If&#39;), &#39;uniqHLL12If&#39;: (&#39;uniqHLL12&#39;, &#39;If&#39;), &#39;sumMapIf&#39;: (&#39;sumMap&#39;, &#39;If&#39;), &#39;quantilesTimingIf&#39;: (&#39;quantilesTiming&#39;, &#39;If&#39;), &#39;anyIf&#39;: (&#39;any&#39;, &#39;If&#39;), &#39;contingencyIf&#39;: (&#39;contingency&#39;, &#39;If&#39;), &#39;largestTriangleThreeBucketsIf&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;If&#39;), &#39;groupBitmapXorIf&#39;: (&#39;groupBitmapXor&#39;, &#39;If&#39;), &#39;argMaxIf&#39;: (&#39;argMax&#39;, &#39;If&#39;), &#39;groupArrayLastIf&#39;: (&#39;groupArrayLast&#39;, &#39;If&#39;), &#39;quantilesExactWeightedIf&#39;: (&#39;quantilesExactWeighted&#39;, &#39;If&#39;), &#39;quantilesExactLowIf&#39;: (&#39;quantilesExactLow&#39;, &#39;If&#39;), &#39;medianIf&#39;: (&#39;median&#39;, &#39;If&#39;), &#39;groupArrayInsertAtIf&#39;: (&#39;groupArrayInsertAt&#39;, &#39;If&#39;), &#39;varSampIf&#39;: (&#39;varSamp&#39;, &#39;If&#39;), &#39;categoricalInformationValueIf&#39;: (&#39;categoricalInformationValue&#39;, &#39;If&#39;), &#39;groupBitAndIf&#39;: (&#39;groupBitAnd&#39;, &#39;If&#39;), &#39;deltaSumTimestampIf&#39;: (&#39;deltaSumTimestamp&#39;, &#39;If&#39;), &#39;covarSampIf&#39;: (&#39;covarSamp&#39;, &#39;If&#39;), &#39;quantilesBFloat16WeightedIf&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;If&#39;), &#39;studentTTestIf&#39;: (&#39;studentTTest&#39;, &#39;If&#39;), &#39;avgIf&#39;: (&#39;avg&#39;, &#39;If&#39;), &#39;maxIf&#39;: (&#39;max&#39;, &#39;If&#39;), &#39;avgWeightedIf&#39;: (&#39;avgWeighted&#39;, &#39;If&#39;), &#39;groupBitmapIf&#39;: (&#39;groupBitmap&#39;, &#39;If&#39;), &#39;groupBitmapOrIf&#39;: (&#39;groupBitmapOr&#39;, &#39;If&#39;), &#39;entropyIf&#39;: (&#39;entropy&#39;, &#39;If&#39;), &#39;uniqCombinedIf&#39;: (&#39;uniqCombined&#39;, &#39;If&#39;), &#39;deltaSumIf&#39;: (&#39;deltaSum&#39;, &#39;If&#39;), &#39;quantilesDeterministicIf&#39;: (&#39;quantilesDeterministic&#39;, &#39;If&#39;), &#39;sumKahanArray&#39;: (&#39;sumKahan&#39;, &#39;Array&#39;), &#39;uniqArray&#39;: (&#39;uniq&#39;, &#39;Array&#39;), &#39;sumWithOverflowArray&#39;: (&#39;sumWithOverflow&#39;, &#39;Array&#39;), &#39;maxMapArray&#39;: (&#39;maxMap&#39;, &#39;Array&#39;), &#39;varPopArray&#39;: (&#39;varPop&#39;, &#39;Array&#39;), &#39;last_valueArray&#39;: (&#39;last_value&#39;, &#39;Array&#39;), &#39;quantilesInterpolatedWeightedArray&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Array&#39;), &#39;quantilesExactArray&#39;: (&#39;quantilesExact&#39;, &#39;Array&#39;), &#39;quantileBFloat16Array&#39;: (&#39;quantileBFloat16&#39;, &#39;Array&#39;), &#39;stochasticLogisticRegressionArray&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Array&#39;), &#39;rankCorrArray&#39;: (&#39;rankCorr&#39;, &#39;Array&#39;), &#39;quantileTimingWeightedArray&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Array&#39;), &#39;simpleLinearRegressionArray&#39;: (&#39;simpleLinearRegression&#39;, &#39;Array&#39;), &#39;quantilesGKArray&#39;: (&#39;quantilesGK&#39;, &#39;Array&#39;), &#39;kolmogorovSmirnovTestArray&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Array&#39;), &#39;stddevPopArray&#39;: (&#39;stddevPop&#39;, &#39;Array&#39;), &#39;uniqExactArray&#39;: (&#39;uniqExact&#39;, &#39;Array&#39;), &#39;sparkBarArray&#39;: (&#39;sparkBar&#39;, &#39;Array&#39;), &#39;quantilesTDigestWeightedArray&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Array&#39;), &#39;kurtSampArray&#39;: (&#39;kurtSamp&#39;, &#39;Array&#39;), &#39;sumCountArray&#39;: (&#39;sumCount&#39;, &#39;Array&#39;), &#39;cramersVBiasCorrectedArray&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Array&#39;), &#39;quantileExactWeightedArray&#39;: (&#39;quantileExactWeighted&#39;, &#39;Array&#39;), &#39;quantileInterpolatedWeightedArray&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Array&#39;), &#39;kurtPopArray&#39;: (&#39;kurtPop&#39;, &#39;Array&#39;), &#39;quantileBFloat16WeightedArray&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Array&#39;), &#39;groupBitOrArray&#39;: (&#39;groupBitOr&#39;, &#39;Array&#39;), &#39;boundingRatioArray&#39;: (&#39;boundingRatio&#39;, &#39;Array&#39;), &#39;skewPopArray&#39;: (&#39;skewPop&#39;, &#39;Array&#39;), &#39;maxIntersectionsPositionArray&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Array&#39;), &#39;quantilesExactHighArray&#39;: (&#39;quantilesExactHigh&#39;, &#39;Array&#39;), &#39;topKArray&#39;: (&#39;topK&#39;, &#39;Array&#39;), &#39;maxIntersectionsArray&#39;: (&#39;maxIntersections&#39;, &#39;Array&#39;), &#39;quantileExactLowArray&#39;: (&#39;quantileExactLow&#39;, &#39;Array&#39;), &#39;groupArrayMovingAvgArray&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Array&#39;), &#39;corrArray&#39;: (&#39;corr&#39;, &#39;Array&#39;), &#39;quantileDeterministicArray&#39;: (&#39;quantileDeterministic&#39;, &#39;Array&#39;), &#39;exponentialMovingAverageArray&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Array&#39;), &#39;quantileExactArray&#39;: (&#39;quantileExact&#39;, &#39;Array&#39;), &#39;quantilesBFloat16Array&#39;: (&#39;quantilesBFloat16&#39;, &#39;Array&#39;), &#39;quantileGKArray&#39;: (&#39;quantileGK&#39;, &#39;Array&#39;), &#39;quantilesTimingWeightedArray&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Array&#39;), &#39;minMapArray&#39;: (&#39;minMap&#39;, &#39;Array&#39;), &#39;quantileArray&#39;: (&#39;quantile&#39;, &#39;Array&#39;), &#39;welchTTestArray&#39;: (&#39;welchTTest&#39;, &#39;Array&#39;), &#39;groupArraySampleArray&#39;: (&#39;groupArraySample&#39;, &#39;Array&#39;), &#39;groupBitXorArray&#39;: (&#39;groupBitXor&#39;, &#39;Array&#39;), &#39;cramersVArray&#39;: (&#39;cramersV&#39;, &#39;Array&#39;), &#39;topKWeightedArray&#39;: (&#39;topKWeighted&#39;, &#39;Array&#39;), &#39;countArray&#39;: (&#39;count&#39;, &#39;Array&#39;), &#39;quantileExactHighArray&#39;: (&#39;quantileExactHigh&#39;, &#39;Array&#39;), &#39;argMinArray&#39;: (&#39;argMin&#39;, &#39;Array&#39;), &#39;stochasticLinearRegressionArray&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Array&#39;), &#39;uniqThetaArray&#39;: (&#39;uniqTheta&#39;, &#39;Array&#39;), &#39;intervalLengthSumArray&#39;: (&#39;intervalLengthSum&#39;, &#39;Array&#39;), &#39;groupArrayMovingSumArray&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Array&#39;), &#39;mannWhitneyUTestArray&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Array&#39;), &#39;uniqCombined64Array&#39;: (&#39;uniqCombined64&#39;, &#39;Array&#39;), &#39;stddevSampArray&#39;: (&#39;stddevSamp&#39;, &#39;Array&#39;), &#39;skewSampArray&#39;: (&#39;skewSamp&#39;, &#39;Array&#39;), &#39;quantilesTDigestArray&#39;: (&#39;quantilesTDigest&#39;, &#39;Array&#39;), &#39;groupArrayArray&#39;: (&#39;groupArray&#39;, &#39;Array&#39;), &#39;groupBitmapAndArray&#39;: (&#39;groupBitmapAnd&#39;, &#39;Array&#39;), &#39;minArray&#39;: (&#39;min&#39;, &#39;Array&#39;), &#39;quantilesArray&#39;: (&#39;quantiles&#39;, &#39;Array&#39;), &#39;theilsUArray&#39;: (&#39;theilsU&#39;, &#39;Array&#39;), &#39;anyLastArray&#39;: (&#39;anyLast&#39;, &#39;Array&#39;), &#39;quantileTDigestArray&#39;: (&#39;quantileTDigest&#39;, &#39;Array&#39;), &#39;meanZTestArray&#39;: (&#39;meanZTest&#39;, &#39;Array&#39;), &#39;anyHeavyArray&#39;: (&#39;anyHeavy&#39;, &#39;Array&#39;), &#39;sumArray&#39;: (&#39;sum&#39;, &#39;Array&#39;), &#39;quantileTDigestWeightedArray&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Array&#39;), &#39;quantileTimingArray&#39;: (&#39;quantileTiming&#39;, &#39;Array&#39;), &#39;covarPopArray&#39;: (&#39;covarPop&#39;, &#39;Array&#39;), &#39;groupUniqArrayArray&#39;: (&#39;groupUniqArray&#39;, &#39;Array&#39;), &#39;first_valueArray&#39;: (&#39;first_value&#39;, &#39;Array&#39;), &#39;uniqHLL12Array&#39;: (&#39;uniqHLL12&#39;, &#39;Array&#39;), &#39;sumMapArray&#39;: (&#39;sumMap&#39;, &#39;Array&#39;), &#39;quantilesTimingArray&#39;: (&#39;quantilesTiming&#39;, &#39;Array&#39;), &#39;anyArray&#39;: (&#39;any&#39;, &#39;Array&#39;), &#39;contingencyArray&#39;: (&#39;contingency&#39;, &#39;Array&#39;), &#39;largestTriangleThreeBucketsArray&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Array&#39;), &#39;groupBitmapXorArray&#39;: (&#39;groupBitmapXor&#39;, &#39;Array&#39;), &#39;argMaxArray&#39;: (&#39;argMax&#39;, &#39;Array&#39;), &#39;groupArrayLastArray&#39;: (&#39;groupArrayLast&#39;, &#39;Array&#39;), &#39;quantilesExactWeightedArray&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Array&#39;), &#39;quantilesExactLowArray&#39;: (&#39;quantilesExactLow&#39;, &#39;Array&#39;), &#39;medianArray&#39;: (&#39;median&#39;, &#39;Array&#39;), &#39;groupArrayInsertAtArray&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Array&#39;), &#39;varSampArray&#39;: (&#39;varSamp&#39;, &#39;Array&#39;), &#39;categoricalInformationValueArray&#39;: (&#39;categoricalInformationValue&#39;, &#39;Array&#39;), &#39;groupBitAndArray&#39;: (&#39;groupBitAnd&#39;, &#39;Array&#39;), &#39;deltaSumTimestampArray&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Array&#39;), &#39;covarSampArray&#39;: (&#39;covarSamp&#39;, &#39;Array&#39;), &#39;quantilesBFloat16WeightedArray&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Array&#39;), &#39;studentTTestArray&#39;: (&#39;studentTTest&#39;, &#39;Array&#39;), &#39;avgArray&#39;: (&#39;avg&#39;, &#39;Array&#39;), &#39;maxArray&#39;: (&#39;max&#39;, &#39;Array&#39;), &#39;avgWeightedArray&#39;: (&#39;avgWeighted&#39;, &#39;Array&#39;), &#39;groupBitmapArray&#39;: (&#39;groupBitmap&#39;, &#39;Array&#39;), &#39;groupBitmapOrArray&#39;: (&#39;groupBitmapOr&#39;, &#39;Array&#39;), &#39;entropyArray&#39;: (&#39;entropy&#39;, &#39;Array&#39;), &#39;uniqCombinedArray&#39;: (&#39;uniqCombined&#39;, &#39;Array&#39;), &#39;deltaSumArray&#39;: (&#39;deltaSum&#39;, &#39;Array&#39;), &#39;quantilesDeterministicArray&#39;: (&#39;quantilesDeterministic&#39;, &#39;Array&#39;), &#39;sumKahanArrayIf&#39;: (&#39;sumKahan&#39;, &#39;ArrayIf&#39;), &#39;uniqArrayIf&#39;: (&#39;uniq&#39;, &#39;ArrayIf&#39;), &#39;sumWithOverflowArrayIf&#39;: (&#39;sumWithOverflow&#39;, &#39;ArrayIf&#39;), &#39;maxMapArrayIf&#39;: (&#39;maxMap&#39;, &#39;ArrayIf&#39;), &#39;varPopArrayIf&#39;: (&#39;varPop&#39;, &#39;ArrayIf&#39;), &#39;last_valueArrayIf&#39;: (&#39;last_value&#39;, &#39;ArrayIf&#39;), &#39;quantilesInterpolatedWeightedArrayIf&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactArrayIf&#39;: (&#39;quantilesExact&#39;, &#39;ArrayIf&#39;), &#39;quantileBFloat16ArrayIf&#39;: (&#39;quantileBFloat16&#39;, &#39;ArrayIf&#39;), &#39;stochasticLogisticRegressionArrayIf&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ArrayIf&#39;), &#39;rankCorrArrayIf&#39;: (&#39;rankCorr&#39;, &#39;ArrayIf&#39;), &#39;quantileTimingWeightedArrayIf&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ArrayIf&#39;), &#39;simpleLinearRegressionArrayIf&#39;: (&#39;simpleLinearRegression&#39;, &#39;ArrayIf&#39;), &#39;quantilesGKArrayIf&#39;: (&#39;quantilesGK&#39;, &#39;ArrayIf&#39;), &#39;kolmogorovSmirnovTestArrayIf&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ArrayIf&#39;), &#39;stddevPopArrayIf&#39;: (&#39;stddevPop&#39;, &#39;ArrayIf&#39;), &#39;uniqExactArrayIf&#39;: (&#39;uniqExact&#39;, &#39;ArrayIf&#39;), &#39;sparkBarArrayIf&#39;: (&#39;sparkBar&#39;, &#39;ArrayIf&#39;), &#39;quantilesTDigestWeightedArrayIf&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ArrayIf&#39;), &#39;kurtSampArrayIf&#39;: (&#39;kurtSamp&#39;, &#39;ArrayIf&#39;), &#39;sumCountArrayIf&#39;: (&#39;sumCount&#39;, &#39;ArrayIf&#39;), &#39;cramersVBiasCorrectedArrayIf&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ArrayIf&#39;), &#39;quantileExactWeightedArrayIf&#39;: (&#39;quantileExactWeighted&#39;, &#39;ArrayIf&#39;), &#39;quantileInterpolatedWeightedArrayIf&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ArrayIf&#39;), &#39;kurtPopArrayIf&#39;: (&#39;kurtPop&#39;, &#39;ArrayIf&#39;), &#39;quantileBFloat16WeightedArrayIf&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ArrayIf&#39;), &#39;groupBitOrArrayIf&#39;: (&#39;groupBitOr&#39;, &#39;ArrayIf&#39;), &#39;boundingRatioArrayIf&#39;: (&#39;boundingRatio&#39;, &#39;ArrayIf&#39;), &#39;skewPopArrayIf&#39;: (&#39;skewPop&#39;, &#39;ArrayIf&#39;), &#39;maxIntersectionsPositionArrayIf&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactHighArrayIf&#39;: (&#39;quantilesExactHigh&#39;, &#39;ArrayIf&#39;), &#39;topKArrayIf&#39;: (&#39;topK&#39;, &#39;ArrayIf&#39;), &#39;maxIntersectionsArrayIf&#39;: (&#39;maxIntersections&#39;, &#39;ArrayIf&#39;), &#39;quantileExactLowArrayIf&#39;: (&#39;quantileExactLow&#39;, &#39;ArrayIf&#39;), &#39;groupArrayMovingAvgArrayIf&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ArrayIf&#39;), &#39;corrArrayIf&#39;: (&#39;corr&#39;, &#39;ArrayIf&#39;), &#39;quantileDeterministicArrayIf&#39;: (&#39;quantileDeterministic&#39;, &#39;ArrayIf&#39;), &#39;exponentialMovingAverageArrayIf&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ArrayIf&#39;), &#39;quantileExactArrayIf&#39;: (&#39;quantileExact&#39;, &#39;ArrayIf&#39;), &#39;quantilesBFloat16ArrayIf&#39;: (&#39;quantilesBFloat16&#39;, &#39;ArrayIf&#39;), &#39;quantileGKArrayIf&#39;: (&#39;quantileGK&#39;, &#39;ArrayIf&#39;), &#39;quantilesTimingWeightedArrayIf&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ArrayIf&#39;), &#39;minMapArrayIf&#39;: (&#39;minMap&#39;, &#39;ArrayIf&#39;), &#39;quantileArrayIf&#39;: (&#39;quantile&#39;, &#39;ArrayIf&#39;), &#39;welchTTestArrayIf&#39;: (&#39;welchTTest&#39;, &#39;ArrayIf&#39;), &#39;groupArraySampleArrayIf&#39;: (&#39;groupArraySample&#39;, &#39;ArrayIf&#39;), &#39;groupBitXorArrayIf&#39;: (&#39;groupBitXor&#39;, &#39;ArrayIf&#39;), &#39;cramersVArrayIf&#39;: (&#39;cramersV&#39;, &#39;ArrayIf&#39;), &#39;topKWeightedArrayIf&#39;: (&#39;topKWeighted&#39;, &#39;ArrayIf&#39;), &#39;countArrayIf&#39;: (&#39;count&#39;, &#39;ArrayIf&#39;), &#39;quantileExactHighArrayIf&#39;: (&#39;quantileExactHigh&#39;, &#39;ArrayIf&#39;), &#39;argMinArrayIf&#39;: (&#39;argMin&#39;, &#39;ArrayIf&#39;), &#39;stochasticLinearRegressionArrayIf&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ArrayIf&#39;), &#39;uniqThetaArrayIf&#39;: (&#39;uniqTheta&#39;, &#39;ArrayIf&#39;), &#39;intervalLengthSumArrayIf&#39;: (&#39;intervalLengthSum&#39;, &#39;ArrayIf&#39;), &#39;groupArrayMovingSumArrayIf&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ArrayIf&#39;), &#39;mannWhitneyUTestArrayIf&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ArrayIf&#39;), &#39;uniqCombined64ArrayIf&#39;: (&#39;uniqCombined64&#39;, &#39;ArrayIf&#39;), &#39;stddevSampArrayIf&#39;: (&#39;stddevSamp&#39;, &#39;ArrayIf&#39;), &#39;skewSampArrayIf&#39;: (&#39;skewSamp&#39;, &#39;ArrayIf&#39;), &#39;quantilesTDigestArrayIf&#39;: (&#39;quantilesTDigest&#39;, &#39;ArrayIf&#39;), &#39;groupArrayArrayIf&#39;: (&#39;groupArray&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapAndArrayIf&#39;: (&#39;groupBitmapAnd&#39;, &#39;ArrayIf&#39;), &#39;minArrayIf&#39;: (&#39;min&#39;, &#39;ArrayIf&#39;), &#39;quantilesArrayIf&#39;: (&#39;quantiles&#39;, &#39;ArrayIf&#39;), &#39;theilsUArrayIf&#39;: (&#39;theilsU&#39;, &#39;ArrayIf&#39;), &#39;anyLastArrayIf&#39;: (&#39;anyLast&#39;, &#39;ArrayIf&#39;), &#39;quantileTDigestArrayIf&#39;: (&#39;quantileTDigest&#39;, &#39;ArrayIf&#39;), &#39;meanZTestArrayIf&#39;: (&#39;meanZTest&#39;, &#39;ArrayIf&#39;), &#39;anyHeavyArrayIf&#39;: (&#39;anyHeavy&#39;, &#39;ArrayIf&#39;), &#39;sumArrayIf&#39;: (&#39;sum&#39;, &#39;ArrayIf&#39;), &#39;quantileTDigestWeightedArrayIf&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ArrayIf&#39;), &#39;quantileTimingArrayIf&#39;: (&#39;quantileTiming&#39;, &#39;ArrayIf&#39;), &#39;covarPopArrayIf&#39;: (&#39;covarPop&#39;, &#39;ArrayIf&#39;), &#39;groupUniqArrayArrayIf&#39;: (&#39;groupUniqArray&#39;, &#39;ArrayIf&#39;), &#39;first_valueArrayIf&#39;: (&#39;first_value&#39;, &#39;ArrayIf&#39;), &#39;uniqHLL12ArrayIf&#39;: (&#39;uniqHLL12&#39;, &#39;ArrayIf&#39;), &#39;sumMapArrayIf&#39;: (&#39;sumMap&#39;, &#39;ArrayIf&#39;), &#39;quantilesTimingArrayIf&#39;: (&#39;quantilesTiming&#39;, &#39;ArrayIf&#39;), &#39;anyArrayIf&#39;: (&#39;any&#39;, &#39;ArrayIf&#39;), &#39;contingencyArrayIf&#39;: (&#39;contingency&#39;, &#39;ArrayIf&#39;), &#39;largestTriangleThreeBucketsArrayIf&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapXorArrayIf&#39;: (&#39;groupBitmapXor&#39;, &#39;ArrayIf&#39;), &#39;argMaxArrayIf&#39;: (&#39;argMax&#39;, &#39;ArrayIf&#39;), &#39;groupArrayLastArrayIf&#39;: (&#39;groupArrayLast&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactWeightedArrayIf&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactLowArrayIf&#39;: (&#39;quantilesExactLow&#39;, &#39;ArrayIf&#39;), &#39;medianArrayIf&#39;: (&#39;median&#39;, &#39;ArrayIf&#39;), &#39;groupArrayInsertAtArrayIf&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ArrayIf&#39;), &#39;varSampArrayIf&#39;: (&#39;varSamp&#39;, &#39;ArrayIf&#39;), &#39;categoricalInformationValueArrayIf&#39;: (&#39;categoricalInformationValue&#39;, &#39;ArrayIf&#39;), &#39;groupBitAndArrayIf&#39;: (&#39;groupBitAnd&#39;, &#39;ArrayIf&#39;), &#39;deltaSumTimestampArrayIf&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ArrayIf&#39;), &#39;covarSampArrayIf&#39;: (&#39;covarSamp&#39;, &#39;ArrayIf&#39;), &#39;quantilesBFloat16WeightedArrayIf&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ArrayIf&#39;), &#39;studentTTestArrayIf&#39;: (&#39;studentTTest&#39;, &#39;ArrayIf&#39;), &#39;avgArrayIf&#39;: (&#39;avg&#39;, &#39;ArrayIf&#39;), &#39;maxArrayIf&#39;: (&#39;max&#39;, &#39;ArrayIf&#39;), &#39;avgWeightedArrayIf&#39;: (&#39;avgWeighted&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapArrayIf&#39;: (&#39;groupBitmap&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapOrArrayIf&#39;: (&#39;groupBitmapOr&#39;, &#39;ArrayIf&#39;), &#39;entropyArrayIf&#39;: (&#39;entropy&#39;, &#39;ArrayIf&#39;), &#39;uniqCombinedArrayIf&#39;: (&#39;uniqCombined&#39;, &#39;ArrayIf&#39;), &#39;deltaSumArrayIf&#39;: (&#39;deltaSum&#39;, &#39;ArrayIf&#39;), &#39;quantilesDeterministicArrayIf&#39;: (&#39;quantilesDeterministic&#39;, &#39;ArrayIf&#39;), &#39;sumKahanMap&#39;: (&#39;sumKahan&#39;, &#39;Map&#39;), &#39;uniqMap&#39;: (&#39;uniq&#39;, &#39;Map&#39;), &#39;sumWithOverflowMap&#39;: (&#39;sumWithOverflow&#39;, &#39;Map&#39;), &#39;maxMapMap&#39;: (&#39;maxMap&#39;, &#39;Map&#39;), &#39;varPopMap&#39;: (&#39;varPop&#39;, &#39;Map&#39;), &#39;last_valueMap&#39;: (&#39;last_value&#39;, &#39;Map&#39;), &#39;quantilesInterpolatedWeightedMap&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Map&#39;), &#39;quantilesExactMap&#39;: (&#39;quantilesExact&#39;, &#39;Map&#39;), &#39;quantileBFloat16Map&#39;: (&#39;quantileBFloat16&#39;, &#39;Map&#39;), &#39;stochasticLogisticRegressionMap&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Map&#39;), &#39;rankCorrMap&#39;: (&#39;rankCorr&#39;, &#39;Map&#39;), &#39;quantileTimingWeightedMap&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Map&#39;), &#39;simpleLinearRegressionMap&#39;: (&#39;simpleLinearRegression&#39;, &#39;Map&#39;), &#39;quantilesGKMap&#39;: (&#39;quantilesGK&#39;, &#39;Map&#39;), &#39;kolmogorovSmirnovTestMap&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Map&#39;), &#39;stddevPopMap&#39;: (&#39;stddevPop&#39;, &#39;Map&#39;), &#39;uniqExactMap&#39;: (&#39;uniqExact&#39;, &#39;Map&#39;), &#39;sparkBarMap&#39;: (&#39;sparkBar&#39;, &#39;Map&#39;), &#39;quantilesTDigestWeightedMap&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Map&#39;), &#39;kurtSampMap&#39;: (&#39;kurtSamp&#39;, &#39;Map&#39;), &#39;sumCountMap&#39;: (&#39;sumCount&#39;, &#39;Map&#39;), &#39;cramersVBiasCorrectedMap&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Map&#39;), &#39;quantileExactWeightedMap&#39;: (&#39;quantileExactWeighted&#39;, &#39;Map&#39;), &#39;quantileInterpolatedWeightedMap&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Map&#39;), &#39;kurtPopMap&#39;: (&#39;kurtPop&#39;, &#39;Map&#39;), &#39;quantileBFloat16WeightedMap&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Map&#39;), &#39;groupBitOrMap&#39;: (&#39;groupBitOr&#39;, &#39;Map&#39;), &#39;boundingRatioMap&#39;: (&#39;boundingRatio&#39;, &#39;Map&#39;), &#39;skewPopMap&#39;: (&#39;skewPop&#39;, &#39;Map&#39;), &#39;maxIntersectionsPositionMap&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Map&#39;), &#39;quantilesExactHighMap&#39;: (&#39;quantilesExactHigh&#39;, &#39;Map&#39;), &#39;topKMap&#39;: (&#39;topK&#39;, &#39;Map&#39;), &#39;maxIntersectionsMap&#39;: (&#39;maxIntersections&#39;, &#39;Map&#39;), &#39;quantileExactLowMap&#39;: (&#39;quantileExactLow&#39;, &#39;Map&#39;), &#39;groupArrayMovingAvgMap&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Map&#39;), &#39;corrMap&#39;: (&#39;corr&#39;, &#39;Map&#39;), &#39;quantileDeterministicMap&#39;: (&#39;quantileDeterministic&#39;, &#39;Map&#39;), &#39;exponentialMovingAverageMap&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Map&#39;), &#39;quantileExactMap&#39;: (&#39;quantileExact&#39;, &#39;Map&#39;), &#39;quantilesBFloat16Map&#39;: (&#39;quantilesBFloat16&#39;, &#39;Map&#39;), &#39;quantileGKMap&#39;: (&#39;quantileGK&#39;, &#39;Map&#39;), &#39;quantilesTimingWeightedMap&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Map&#39;), &#39;minMapMap&#39;: (&#39;minMap&#39;, &#39;Map&#39;), &#39;quantileMap&#39;: (&#39;quantile&#39;, &#39;Map&#39;), &#39;welchTTestMap&#39;: (&#39;welchTTest&#39;, &#39;Map&#39;), &#39;groupArraySampleMap&#39;: (&#39;groupArraySample&#39;, &#39;Map&#39;), &#39;groupBitXorMap&#39;: (&#39;groupBitXor&#39;, &#39;Map&#39;), &#39;cramersVMap&#39;: (&#39;cramersV&#39;, &#39;Map&#39;), &#39;topKWeightedMap&#39;: (&#39;topKWeighted&#39;, &#39;Map&#39;), &#39;countMap&#39;: (&#39;count&#39;, &#39;Map&#39;), &#39;quantileExactHighMap&#39;: (&#39;quantileExactHigh&#39;, &#39;Map&#39;), &#39;argMinMap&#39;: (&#39;argMin&#39;, &#39;Map&#39;), &#39;stochasticLinearRegressionMap&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Map&#39;), &#39;uniqThetaMap&#39;: (&#39;uniqTheta&#39;, &#39;Map&#39;), &#39;intervalLengthSumMap&#39;: (&#39;intervalLengthSum&#39;, &#39;Map&#39;), &#39;groupArrayMovingSumMap&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Map&#39;), &#39;mannWhitneyUTestMap&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Map&#39;), &#39;uniqCombined64Map&#39;: (&#39;uniqCombined64&#39;, &#39;Map&#39;), &#39;stddevSampMap&#39;: (&#39;stddevSamp&#39;, &#39;Map&#39;), &#39;skewSampMap&#39;: (&#39;skewSamp&#39;, &#39;Map&#39;), &#39;quantilesTDigestMap&#39;: (&#39;quantilesTDigest&#39;, &#39;Map&#39;), &#39;groupArrayMap&#39;: (&#39;groupArray&#39;, &#39;Map&#39;), &#39;groupBitmapAndMap&#39;: (&#39;groupBitmapAnd&#39;, &#39;Map&#39;), &#39;minMap&#39;: (&#39;minMap&#39;, &#39;&#39;), &#39;quantilesMap&#39;: (&#39;quantiles&#39;, &#39;Map&#39;), &#39;theilsUMap&#39;: (&#39;theilsU&#39;, &#39;Map&#39;), &#39;anyLastMap&#39;: (&#39;anyLast&#39;, &#39;Map&#39;), &#39;quantileTDigestMap&#39;: (&#39;quantileTDigest&#39;, &#39;Map&#39;), &#39;meanZTestMap&#39;: (&#39;meanZTest&#39;, &#39;Map&#39;), &#39;anyHeavyMap&#39;: (&#39;anyHeavy&#39;, &#39;Map&#39;), &#39;sumMap&#39;: (&#39;sumMap&#39;, &#39;&#39;), &#39;quantileTDigestWeightedMap&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Map&#39;), &#39;quantileTimingMap&#39;: (&#39;quantileTiming&#39;, &#39;Map&#39;), &#39;covarPopMap&#39;: (&#39;covarPop&#39;, &#39;Map&#39;), &#39;groupUniqArrayMap&#39;: (&#39;groupUniqArray&#39;, &#39;Map&#39;), &#39;first_valueMap&#39;: (&#39;first_value&#39;, &#39;Map&#39;), &#39;uniqHLL12Map&#39;: (&#39;uniqHLL12&#39;, &#39;Map&#39;), &#39;sumMapMap&#39;: (&#39;sumMap&#39;, &#39;Map&#39;), &#39;quantilesTimingMap&#39;: (&#39;quantilesTiming&#39;, &#39;Map&#39;), &#39;anyMap&#39;: (&#39;any&#39;, &#39;Map&#39;), &#39;contingencyMap&#39;: (&#39;contingency&#39;, &#39;Map&#39;), &#39;largestTriangleThreeBucketsMap&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Map&#39;), &#39;groupBitmapXorMap&#39;: (&#39;groupBitmapXor&#39;, &#39;Map&#39;), &#39;argMaxMap&#39;: (&#39;argMax&#39;, &#39;Map&#39;), &#39;groupArrayLastMap&#39;: (&#39;groupArrayLast&#39;, &#39;Map&#39;), &#39;quantilesExactWeightedMap&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Map&#39;), &#39;quantilesExactLowMap&#39;: (&#39;quantilesExactLow&#39;, &#39;Map&#39;), &#39;medianMap&#39;: (&#39;median&#39;, &#39;Map&#39;), &#39;groupArrayInsertAtMap&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Map&#39;), &#39;varSampMap&#39;: (&#39;varSamp&#39;, &#39;Map&#39;), &#39;categoricalInformationValueMap&#39;: (&#39;categoricalInformationValue&#39;, &#39;Map&#39;), &#39;groupBitAndMap&#39;: (&#39;groupBitAnd&#39;, &#39;Map&#39;), &#39;deltaSumTimestampMap&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Map&#39;), &#39;covarSampMap&#39;: (&#39;covarSamp&#39;, &#39;Map&#39;), &#39;quantilesBFloat16WeightedMap&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Map&#39;), &#39;studentTTestMap&#39;: (&#39;studentTTest&#39;, &#39;Map&#39;), &#39;avgMap&#39;: (&#39;avg&#39;, &#39;Map&#39;), &#39;maxMap&#39;: (&#39;maxMap&#39;, &#39;&#39;), &#39;avgWeightedMap&#39;: (&#39;avgWeighted&#39;, &#39;Map&#39;), &#39;groupBitmapMap&#39;: (&#39;groupBitmap&#39;, &#39;Map&#39;), &#39;groupBitmapOrMap&#39;: (&#39;groupBitmapOr&#39;, &#39;Map&#39;), &#39;entropyMap&#39;: (&#39;entropy&#39;, &#39;Map&#39;), &#39;uniqCombinedMap&#39;: (&#39;uniqCombined&#39;, &#39;Map&#39;), &#39;deltaSumMap&#39;: (&#39;deltaSum&#39;, &#39;Map&#39;), &#39;quantilesDeterministicMap&#39;: (&#39;quantilesDeterministic&#39;, &#39;Map&#39;), &#39;sumKahanSimpleState&#39;: (&#39;sumKahan&#39;, &#39;SimpleState&#39;), &#39;uniqSimpleState&#39;: (&#39;uniq&#39;, &#39;SimpleState&#39;), &#39;sumWithOverflowSimpleState&#39;: (&#39;sumWithOverflow&#39;, &#39;SimpleState&#39;), &#39;maxMapSimpleState&#39;: (&#39;maxMap&#39;, &#39;SimpleState&#39;), &#39;varPopSimpleState&#39;: (&#39;varPop&#39;, &#39;SimpleState&#39;), &#39;last_valueSimpleState&#39;: (&#39;last_value&#39;, &#39;SimpleState&#39;), &#39;quantilesInterpolatedWeightedSimpleState&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;SimpleState&#39;), &#39;quantilesExactSimpleState&#39;: (&#39;quantilesExact&#39;, &#39;SimpleState&#39;), &#39;quantileBFloat16SimpleState&#39;: (&#39;quantileBFloat16&#39;, &#39;SimpleState&#39;), &#39;stochasticLogisticRegressionSimpleState&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;SimpleState&#39;), &#39;rankCorrSimpleState&#39;: (&#39;rankCorr&#39;, &#39;SimpleState&#39;), &#39;quantileTimingWeightedSimpleState&#39;: (&#39;quantileTimingWeighted&#39;, &#39;SimpleState&#39;), &#39;simpleLinearRegressionSimpleState&#39;: (&#39;simpleLinearRegression&#39;, &#39;SimpleState&#39;), &#39;quantilesGKSimpleState&#39;: (&#39;quantilesGK&#39;, &#39;SimpleState&#39;), &#39;kolmogorovSmirnovTestSimpleState&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;SimpleState&#39;), &#39;stddevPopSimpleState&#39;: (&#39;stddevPop&#39;, &#39;SimpleState&#39;), &#39;uniqExactSimpleState&#39;: (&#39;uniqExact&#39;, &#39;SimpleState&#39;), &#39;sparkBarSimpleState&#39;: (&#39;sparkBar&#39;, &#39;SimpleState&#39;), &#39;quantilesTDigestWeightedSimpleState&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;SimpleState&#39;), &#39;kurtSampSimpleState&#39;: (&#39;kurtSamp&#39;, &#39;SimpleState&#39;), &#39;sumCountSimpleState&#39;: (&#39;sumCount&#39;, &#39;SimpleState&#39;), &#39;cramersVBiasCorrectedSimpleState&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;SimpleState&#39;), &#39;quantileExactWeightedSimpleState&#39;: (&#39;quantileExactWeighted&#39;, &#39;SimpleState&#39;), &#39;quantileInterpolatedWeightedSimpleState&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;SimpleState&#39;), &#39;kurtPopSimpleState&#39;: (&#39;kurtPop&#39;, &#39;SimpleState&#39;), &#39;quantileBFloat16WeightedSimpleState&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;SimpleState&#39;), &#39;groupBitOrSimpleState&#39;: (&#39;groupBitOr&#39;, &#39;SimpleState&#39;), &#39;boundingRatioSimpleState&#39;: (&#39;boundingRatio&#39;, &#39;SimpleState&#39;), &#39;skewPopSimpleState&#39;: (&#39;skewPop&#39;, &#39;SimpleState&#39;), &#39;maxIntersectionsPositionSimpleState&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;SimpleState&#39;), &#39;quantilesExactHighSimpleState&#39;: (&#39;quantilesExactHigh&#39;, &#39;SimpleState&#39;), &#39;topKSimpleState&#39;: (&#39;topK&#39;, &#39;SimpleState&#39;), &#39;maxIntersectionsSimpleState&#39;: (&#39;maxIntersections&#39;, &#39;SimpleState&#39;), &#39;quantileExactLowSimpleState&#39;: (&#39;quantileExactLow&#39;, &#39;SimpleState&#39;), &#39;groupArrayMovingAvgSimpleState&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;SimpleState&#39;), &#39;corrSimpleState&#39;: (&#39;corr&#39;, &#39;SimpleState&#39;), &#39;quantileDeterministicSimpleState&#39;: (&#39;quantileDeterministic&#39;, &#39;SimpleState&#39;), &#39;exponentialMovingAverageSimpleState&#39;: (&#39;exponentialMovingAverage&#39;, &#39;SimpleState&#39;), &#39;quantileExactSimpleState&#39;: (&#39;quantileExact&#39;, &#39;SimpleState&#39;), &#39;quantilesBFloat16SimpleState&#39;: (&#39;quantilesBFloat16&#39;, &#39;SimpleState&#39;), &#39;quantileGKSimpleState&#39;: (&#39;quantileGK&#39;, &#39;SimpleState&#39;), &#39;quantilesTimingWeightedSimpleState&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;SimpleState&#39;), &#39;minMapSimpleState&#39;: (&#39;minMap&#39;, &#39;SimpleState&#39;), &#39;quantileSimpleState&#39;: (&#39;quantile&#39;, &#39;SimpleState&#39;), &#39;welchTTestSimpleState&#39;: (&#39;welchTTest&#39;, &#39;SimpleState&#39;), &#39;groupArraySampleSimpleState&#39;: (&#39;groupArraySample&#39;, &#39;SimpleState&#39;), &#39;groupBitXorSimpleState&#39;: (&#39;groupBitXor&#39;, &#39;SimpleState&#39;), &#39;cramersVSimpleState&#39;: (&#39;cramersV&#39;, &#39;SimpleState&#39;), &#39;topKWeightedSimpleState&#39;: (&#39;topKWeighted&#39;, &#39;SimpleState&#39;), &#39;countSimpleState&#39;: (&#39;count&#39;, &#39;SimpleState&#39;), &#39;quantileExactHighSimpleState&#39;: (&#39;quantileExactHigh&#39;, &#39;SimpleState&#39;), &#39;argMinSimpleState&#39;: (&#39;argMin&#39;, &#39;SimpleState&#39;), &#39;stochasticLinearRegressionSimpleState&#39;: (&#39;stochasticLinearRegression&#39;, &#39;SimpleState&#39;), &#39;uniqThetaSimpleState&#39;: (&#39;uniqTheta&#39;, &#39;SimpleState&#39;), &#39;intervalLengthSumSimpleState&#39;: (&#39;intervalLengthSum&#39;, &#39;SimpleState&#39;), &#39;groupArrayMovingSumSimpleState&#39;: (&#39;groupArrayMovingSum&#39;, &#39;SimpleState&#39;), &#39;mannWhitneyUTestSimpleState&#39;: (&#39;mannWhitneyUTest&#39;, &#39;SimpleState&#39;), &#39;uniqCombined64SimpleState&#39;: (&#39;uniqCombined64&#39;, &#39;SimpleState&#39;), &#39;stddevSampSimpleState&#39;: (&#39;stddevSamp&#39;, &#39;SimpleState&#39;), &#39;skewSampSimpleState&#39;: (&#39;skewSamp&#39;, &#39;SimpleState&#39;), &#39;quantilesTDigestSimpleState&#39;: (&#39;quantilesTDigest&#39;, &#39;SimpleState&#39;), &#39;groupArraySimpleState&#39;: (&#39;groupArray&#39;, &#39;SimpleState&#39;), &#39;groupBitmapAndSimpleState&#39;: (&#39;groupBitmapAnd&#39;, &#39;SimpleState&#39;), &#39;minSimpleState&#39;: (&#39;min&#39;, &#39;SimpleState&#39;), &#39;quantilesSimpleState&#39;: (&#39;quantiles&#39;, &#39;SimpleState&#39;), &#39;theilsUSimpleState&#39;: (&#39;theilsU&#39;, &#39;SimpleState&#39;), &#39;anyLastSimpleState&#39;: (&#39;anyLast&#39;, &#39;SimpleState&#39;), &#39;quantileTDigestSimpleState&#39;: (&#39;quantileTDigest&#39;, &#39;SimpleState&#39;), &#39;meanZTestSimpleState&#39;: (&#39;meanZTest&#39;, &#39;SimpleState&#39;), &#39;anyHeavySimpleState&#39;: (&#39;anyHeavy&#39;, &#39;SimpleState&#39;), &#39;sumSimpleState&#39;: (&#39;sum&#39;, &#39;SimpleState&#39;), &#39;quantileTDigestWeightedSimpleState&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;SimpleState&#39;), &#39;quantileTimingSimpleState&#39;: (&#39;quantileTiming&#39;, &#39;SimpleState&#39;), &#39;covarPopSimpleState&#39;: (&#39;covarPop&#39;, &#39;SimpleState&#39;), &#39;groupUniqArraySimpleState&#39;: (&#39;groupUniqArray&#39;, &#39;SimpleState&#39;), &#39;first_valueSimpleState&#39;: (&#39;first_value&#39;, &#39;SimpleState&#39;), &#39;uniqHLL12SimpleState&#39;: (&#39;uniqHLL12&#39;, &#39;SimpleState&#39;), &#39;sumMapSimpleState&#39;: (&#39;sumMap&#39;, &#39;SimpleState&#39;), &#39;quantilesTimingSimpleState&#39;: (&#39;quantilesTiming&#39;, &#39;SimpleState&#39;), &#39;anySimpleState&#39;: (&#39;any&#39;, &#39;SimpleState&#39;), &#39;contingencySimpleState&#39;: (&#39;contingency&#39;, &#39;SimpleState&#39;), &#39;largestTriangleThreeBucketsSimpleState&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;SimpleState&#39;), &#39;groupBitmapXorSimpleState&#39;: (&#39;groupBitmapXor&#39;, &#39;SimpleState&#39;), &#39;argMaxSimpleState&#39;: (&#39;argMax&#39;, &#39;SimpleState&#39;), &#39;groupArrayLastSimpleState&#39;: (&#39;groupArrayLast&#39;, &#39;SimpleState&#39;), &#39;quantilesExactWeightedSimpleState&#39;: (&#39;quantilesExactWeighted&#39;, &#39;SimpleState&#39;), &#39;quantilesExactLowSimpleState&#39;: (&#39;quantilesExactLow&#39;, &#39;SimpleState&#39;), &#39;medianSimpleState&#39;: (&#39;median&#39;, &#39;SimpleState&#39;), &#39;groupArrayInsertAtSimpleState&#39;: (&#39;groupArrayInsertAt&#39;, &#39;SimpleState&#39;), &#39;varSampSimpleState&#39;: (&#39;varSamp&#39;, &#39;SimpleState&#39;), &#39;categoricalInformationValueSimpleState&#39;: (&#39;categoricalInformationValue&#39;, &#39;SimpleState&#39;), &#39;groupBitAndSimpleState&#39;: (&#39;groupBitAnd&#39;, &#39;SimpleState&#39;), &#39;deltaSumTimestampSimpleState&#39;: (&#39;deltaSumTimestamp&#39;, &#39;SimpleState&#39;), &#39;covarSampSimpleState&#39;: (&#39;covarSamp&#39;, &#39;SimpleState&#39;), &#39;quantilesBFloat16WeightedSimpleState&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;SimpleState&#39;), &#39;studentTTestSimpleState&#39;: (&#39;studentTTest&#39;, &#39;SimpleState&#39;), &#39;avgSimpleState&#39;: (&#39;avg&#39;, &#39;SimpleState&#39;), &#39;maxSimpleState&#39;: (&#39;max&#39;, &#39;SimpleState&#39;), &#39;avgWeightedSimpleState&#39;: (&#39;avgWeighted&#39;, &#39;SimpleState&#39;), &#39;groupBitmapSimpleState&#39;: (&#39;groupBitmap&#39;, &#39;SimpleState&#39;), &#39;groupBitmapOrSimpleState&#39;: (&#39;groupBitmapOr&#39;, &#39;SimpleState&#39;), &#39;entropySimpleState&#39;: (&#39;entropy&#39;, &#39;SimpleState&#39;), &#39;uniqCombinedSimpleState&#39;: (&#39;uniqCombined&#39;, &#39;SimpleState&#39;), &#39;deltaSumSimpleState&#39;: (&#39;deltaSum&#39;, &#39;SimpleState&#39;), &#39;quantilesDeterministicSimpleState&#39;: (&#39;quantilesDeterministic&#39;, &#39;SimpleState&#39;), &#39;sumKahanState&#39;: (&#39;sumKahan&#39;, &#39;State&#39;), &#39;uniqState&#39;: (&#39;uniq&#39;, &#39;State&#39;), &#39;sumWithOverflowState&#39;: (&#39;sumWithOverflow&#39;, &#39;State&#39;), &#39;maxMapState&#39;: (&#39;maxMap&#39;, &#39;State&#39;), &#39;varPopState&#39;: (&#39;varPop&#39;, &#39;State&#39;), &#39;last_valueState&#39;: (&#39;last_value&#39;, &#39;State&#39;), &#39;quantilesInterpolatedWeightedState&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;State&#39;), &#39;quantilesExactState&#39;: (&#39;quantilesExact&#39;, &#39;State&#39;), &#39;quantileBFloat16State&#39;: (&#39;quantileBFloat16&#39;, &#39;State&#39;), &#39;stochasticLogisticRegressionState&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;State&#39;), &#39;rankCorrState&#39;: (&#39;rankCorr&#39;, &#39;State&#39;), &#39;quantileTimingWeightedState&#39;: (&#39;quantileTimingWeighted&#39;, &#39;State&#39;), &#39;simpleLinearRegressionState&#39;: (&#39;simpleLinearRegression&#39;, &#39;State&#39;), &#39;quantilesGKState&#39;: (&#39;quantilesGK&#39;, &#39;State&#39;), &#39;kolmogorovSmirnovTestState&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;State&#39;), &#39;stddevPopState&#39;: (&#39;stddevPop&#39;, &#39;State&#39;), &#39;uniqExactState&#39;: (&#39;uniqExact&#39;, &#39;State&#39;), &#39;sparkBarState&#39;: (&#39;sparkBar&#39;, &#39;State&#39;), &#39;quantilesTDigestWeightedState&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;State&#39;), &#39;kurtSampState&#39;: (&#39;kurtSamp&#39;, &#39;State&#39;), &#39;sumCountState&#39;: (&#39;sumCount&#39;, &#39;State&#39;), &#39;cramersVBiasCorrectedState&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;State&#39;), &#39;quantileExactWeightedState&#39;: (&#39;quantileExactWeighted&#39;, &#39;State&#39;), &#39;quantileInterpolatedWeightedState&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;State&#39;), &#39;kurtPopState&#39;: (&#39;kurtPop&#39;, &#39;State&#39;), &#39;quantileBFloat16WeightedState&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;State&#39;), &#39;groupBitOrState&#39;: (&#39;groupBitOr&#39;, &#39;State&#39;), &#39;boundingRatioState&#39;: (&#39;boundingRatio&#39;, &#39;State&#39;), &#39;skewPopState&#39;: (&#39;skewPop&#39;, &#39;State&#39;), &#39;maxIntersectionsPositionState&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;State&#39;), &#39;quantilesExactHighState&#39;: (&#39;quantilesExactHigh&#39;, &#39;State&#39;), &#39;topKState&#39;: (&#39;topK&#39;, &#39;State&#39;), &#39;maxIntersectionsState&#39;: (&#39;maxIntersections&#39;, &#39;State&#39;), &#39;quantileExactLowState&#39;: (&#39;quantileExactLow&#39;, &#39;State&#39;), &#39;groupArrayMovingAvgState&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;State&#39;), &#39;corrState&#39;: (&#39;corr&#39;, &#39;State&#39;), &#39;quantileDeterministicState&#39;: (&#39;quantileDeterministic&#39;, &#39;State&#39;), &#39;exponentialMovingAverageState&#39;: (&#39;exponentialMovingAverage&#39;, &#39;State&#39;), &#39;quantileExactState&#39;: (&#39;quantileExact&#39;, &#39;State&#39;), &#39;quantilesBFloat16State&#39;: (&#39;quantilesBFloat16&#39;, &#39;State&#39;), &#39;quantileGKState&#39;: (&#39;quantileGK&#39;, &#39;State&#39;), &#39;quantilesTimingWeightedState&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;State&#39;), &#39;minMapState&#39;: (&#39;minMap&#39;, &#39;State&#39;), &#39;quantileState&#39;: (&#39;quantile&#39;, &#39;State&#39;), &#39;welchTTestState&#39;: (&#39;welchTTest&#39;, &#39;State&#39;), &#39;groupArraySampleState&#39;: (&#39;groupArraySample&#39;, &#39;State&#39;), &#39;groupBitXorState&#39;: (&#39;groupBitXor&#39;, &#39;State&#39;), &#39;cramersVState&#39;: (&#39;cramersV&#39;, &#39;State&#39;), &#39;topKWeightedState&#39;: (&#39;topKWeighted&#39;, &#39;State&#39;), &#39;countState&#39;: (&#39;count&#39;, &#39;State&#39;), &#39;quantileExactHighState&#39;: (&#39;quantileExactHigh&#39;, &#39;State&#39;), &#39;argMinState&#39;: (&#39;argMin&#39;, &#39;State&#39;), &#39;stochasticLinearRegressionState&#39;: (&#39;stochasticLinearRegression&#39;, &#39;State&#39;), &#39;uniqThetaState&#39;: (&#39;uniqTheta&#39;, &#39;State&#39;), &#39;intervalLengthSumState&#39;: (&#39;intervalLengthSum&#39;, &#39;State&#39;), &#39;groupArrayMovingSumState&#39;: (&#39;groupArrayMovingSum&#39;, &#39;State&#39;), &#39;mannWhitneyUTestState&#39;: (&#39;mannWhitneyUTest&#39;, &#39;State&#39;), &#39;uniqCombined64State&#39;: (&#39;uniqCombined64&#39;, &#39;State&#39;), &#39;stddevSampState&#39;: (&#39;stddevSamp&#39;, &#39;State&#39;), &#39;skewSampState&#39;: (&#39;skewSamp&#39;, &#39;State&#39;), &#39;quantilesTDigestState&#39;: (&#39;quantilesTDigest&#39;, &#39;State&#39;), &#39;groupArrayState&#39;: (&#39;groupArray&#39;, &#39;State&#39;), &#39;groupBitmapAndState&#39;: (&#39;groupBitmapAnd&#39;, &#39;State&#39;), &#39;minState&#39;: (&#39;min&#39;, &#39;State&#39;), &#39;quantilesState&#39;: (&#39;quantiles&#39;, &#39;State&#39;), &#39;theilsUState&#39;: (&#39;theilsU&#39;, &#39;State&#39;), &#39;anyLastState&#39;: (&#39;anyLast&#39;, &#39;State&#39;), &#39;quantileTDigestState&#39;: (&#39;quantileTDigest&#39;, &#39;State&#39;), &#39;meanZTestState&#39;: (&#39;meanZTest&#39;, &#39;State&#39;), &#39;anyHeavyState&#39;: (&#39;anyHeavy&#39;, &#39;State&#39;), &#39;sumState&#39;: (&#39;sum&#39;, &#39;State&#39;), &#39;quantileTDigestWeightedState&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;State&#39;), &#39;quantileTimingState&#39;: (&#39;quantileTiming&#39;, &#39;State&#39;), &#39;covarPopState&#39;: (&#39;covarPop&#39;, &#39;State&#39;), &#39;groupUniqArrayState&#39;: (&#39;groupUniqArray&#39;, &#39;State&#39;), &#39;first_valueState&#39;: (&#39;first_value&#39;, &#39;State&#39;), &#39;uniqHLL12State&#39;: (&#39;uniqHLL12&#39;, &#39;State&#39;), &#39;sumMapState&#39;: (&#39;sumMap&#39;, &#39;State&#39;), &#39;quantilesTimingState&#39;: (&#39;quantilesTiming&#39;, &#39;State&#39;), &#39;anyState&#39;: (&#39;any&#39;, &#39;State&#39;), &#39;contingencyState&#39;: (&#39;contingency&#39;, &#39;State&#39;), &#39;largestTriangleThreeBucketsState&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;State&#39;), &#39;groupBitmapXorState&#39;: (&#39;groupBitmapXor&#39;, &#39;State&#39;), &#39;argMaxState&#39;: (&#39;argMax&#39;, &#39;State&#39;), &#39;groupArrayLastState&#39;: (&#39;groupArrayLast&#39;, &#39;State&#39;), &#39;quantilesExactWeightedState&#39;: (&#39;quantilesExactWeighted&#39;, &#39;State&#39;), &#39;quantilesExactLowState&#39;: (&#39;quantilesExactLow&#39;, &#39;State&#39;), &#39;medianState&#39;: (&#39;median&#39;, &#39;State&#39;), &#39;groupArrayInsertAtState&#39;: (&#39;groupArrayInsertAt&#39;, &#39;State&#39;), &#39;varSampState&#39;: (&#39;varSamp&#39;, &#39;State&#39;), &#39;categoricalInformationValueState&#39;: (&#39;categoricalInformationValue&#39;, &#39;State&#39;), &#39;groupBitAndState&#39;: (&#39;groupBitAnd&#39;, &#39;State&#39;), &#39;deltaSumTimestampState&#39;: (&#39;deltaSumTimestamp&#39;, &#39;State&#39;), &#39;covarSampState&#39;: (&#39;covarSamp&#39;, &#39;State&#39;), &#39;quantilesBFloat16WeightedState&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;State&#39;), &#39;studentTTestState&#39;: (&#39;studentTTest&#39;, &#39;State&#39;), &#39;avgState&#39;: (&#39;avg&#39;, &#39;State&#39;), &#39;maxState&#39;: (&#39;max&#39;, &#39;State&#39;), &#39;avgWeightedState&#39;: (&#39;avgWeighted&#39;, &#39;State&#39;), &#39;groupBitmapState&#39;: (&#39;groupBitmap&#39;, &#39;State&#39;), &#39;groupBitmapOrState&#39;: (&#39;groupBitmapOr&#39;, &#39;State&#39;), &#39;entropyState&#39;: (&#39;entropy&#39;, &#39;State&#39;), &#39;uniqCombinedState&#39;: (&#39;uniqCombined&#39;, &#39;State&#39;), &#39;deltaSumState&#39;: (&#39;deltaSum&#39;, &#39;State&#39;), &#39;quantilesDeterministicState&#39;: (&#39;quantilesDeterministic&#39;, &#39;State&#39;), &#39;sumKahanMerge&#39;: (&#39;sumKahan&#39;, &#39;Merge&#39;), &#39;uniqMerge&#39;: (&#39;uniq&#39;, &#39;Merge&#39;), &#39;sumWithOverflowMerge&#39;: (&#39;sumWithOverflow&#39;, &#39;Merge&#39;), &#39;maxMapMerge&#39;: (&#39;maxMap&#39;, &#39;Merge&#39;), &#39;varPopMerge&#39;: (&#39;varPop&#39;, &#39;Merge&#39;), &#39;last_valueMerge&#39;: (&#39;last_value&#39;, &#39;Merge&#39;), &#39;quantilesInterpolatedWeightedMerge&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Merge&#39;), &#39;quantilesExactMerge&#39;: (&#39;quantilesExact&#39;, &#39;Merge&#39;), &#39;quantileBFloat16Merge&#39;: (&#39;quantileBFloat16&#39;, &#39;Merge&#39;), &#39;stochasticLogisticRegressionMerge&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Merge&#39;), &#39;rankCorrMerge&#39;: (&#39;rankCorr&#39;, &#39;Merge&#39;), &#39;quantileTimingWeightedMerge&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Merge&#39;), &#39;simpleLinearRegressionMerge&#39;: (&#39;simpleLinearRegression&#39;, &#39;Merge&#39;), &#39;quantilesGKMerge&#39;: (&#39;quantilesGK&#39;, &#39;Merge&#39;), &#39;kolmogorovSmirnovTestMerge&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Merge&#39;), &#39;stddevPopMerge&#39;: (&#39;stddevPop&#39;, &#39;Merge&#39;), &#39;uniqExactMerge&#39;: (&#39;uniqExact&#39;, &#39;Merge&#39;), &#39;sparkBarMerge&#39;: (&#39;sparkBar&#39;, &#39;Merge&#39;), &#39;quantilesTDigestWeightedMerge&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Merge&#39;), &#39;kurtSampMerge&#39;: (&#39;kurtSamp&#39;, &#39;Merge&#39;), &#39;sumCountMerge&#39;: (&#39;sumCount&#39;, &#39;Merge&#39;), &#39;cramersVBiasCorrectedMerge&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Merge&#39;), &#39;quantileExactWeightedMerge&#39;: (&#39;quantileExactWeighted&#39;, &#39;Merge&#39;), &#39;quantileInterpolatedWeightedMerge&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Merge&#39;), &#39;kurtPopMerge&#39;: (&#39;kurtPop&#39;, &#39;Merge&#39;), &#39;quantileBFloat16WeightedMerge&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Merge&#39;), &#39;groupBitOrMerge&#39;: (&#39;groupBitOr&#39;, &#39;Merge&#39;), &#39;boundingRatioMerge&#39;: (&#39;boundingRatio&#39;, &#39;Merge&#39;), &#39;skewPopMerge&#39;: (&#39;skewPop&#39;, &#39;Merge&#39;), &#39;maxIntersectionsPositionMerge&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Merge&#39;), &#39;quantilesExactHighMerge&#39;: (&#39;quantilesExactHigh&#39;, &#39;Merge&#39;), &#39;topKMerge&#39;: (&#39;topK&#39;, &#39;Merge&#39;), &#39;maxIntersectionsMerge&#39;: (&#39;maxIntersections&#39;, &#39;Merge&#39;), &#39;quantileExactLowMerge&#39;: (&#39;quantileExactLow&#39;, &#39;Merge&#39;), &#39;groupArrayMovingAvgMerge&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Merge&#39;), &#39;corrMerge&#39;: (&#39;corr&#39;, &#39;Merge&#39;), &#39;quantileDeterministicMerge&#39;: (&#39;quantileDeterministic&#39;, &#39;Merge&#39;), &#39;exponentialMovingAverageMerge&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Merge&#39;), &#39;quantileExactMerge&#39;: (&#39;quantileExact&#39;, &#39;Merge&#39;), &#39;quantilesBFloat16Merge&#39;: (&#39;quantilesBFloat16&#39;, &#39;Merge&#39;), &#39;quantileGKMerge&#39;: (&#39;quantileGK&#39;, &#39;Merge&#39;), &#39;quantilesTimingWeightedMerge&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Merge&#39;), &#39;minMapMerge&#39;: (&#39;minMap&#39;, &#39;Merge&#39;), &#39;quantileMerge&#39;: (&#39;quantile&#39;, &#39;Merge&#39;), &#39;welchTTestMerge&#39;: (&#39;welchTTest&#39;, &#39;Merge&#39;), &#39;groupArraySampleMerge&#39;: (&#39;groupArraySample&#39;, &#39;Merge&#39;), &#39;groupBitXorMerge&#39;: (&#39;groupBitXor&#39;, &#39;Merge&#39;), &#39;cramersVMerge&#39;: (&#39;cramersV&#39;, &#39;Merge&#39;), &#39;topKWeightedMerge&#39;: (&#39;topKWeighted&#39;, &#39;Merge&#39;), &#39;countMerge&#39;: (&#39;count&#39;, &#39;Merge&#39;), &#39;quantileExactHighMerge&#39;: (&#39;quantileExactHigh&#39;, &#39;Merge&#39;), &#39;argMinMerge&#39;: (&#39;argMin&#39;, &#39;Merge&#39;), &#39;stochasticLinearRegressionMerge&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Merge&#39;), &#39;uniqThetaMerge&#39;: (&#39;uniqTheta&#39;, &#39;Merge&#39;), &#39;intervalLengthSumMerge&#39;: (&#39;intervalLengthSum&#39;, &#39;Merge&#39;), &#39;groupArrayMovingSumMerge&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Merge&#39;), &#39;mannWhitneyUTestMerge&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Merge&#39;), &#39;uniqCombined64Merge&#39;: (&#39;uniqCombined64&#39;, &#39;Merge&#39;), &#39;stddevSampMerge&#39;: (&#39;stddevSamp&#39;, &#39;Merge&#39;), &#39;skewSampMerge&#39;: (&#39;skewSamp&#39;, &#39;Merge&#39;), &#39;quantilesTDigestMerge&#39;: (&#39;quantilesTDigest&#39;, &#39;Merge&#39;), &#39;groupArrayMerge&#39;: (&#39;groupArray&#39;, &#39;Merge&#39;), &#39;groupBitmapAndMerge&#39;: (&#39;groupBitmapAnd&#39;, &#39;Merge&#39;), &#39;minMerge&#39;: (&#39;min&#39;, &#39;Merge&#39;), &#39;quantilesMerge&#39;: (&#39;quantiles&#39;, &#39;Merge&#39;), &#39;theilsUMerge&#39;: (&#39;theilsU&#39;, &#39;Merge&#39;), &#39;anyLastMerge&#39;: (&#39;anyLast&#39;, &#39;Merge&#39;), &#39;quantileTDigestMerge&#39;: (&#39;quantileTDigest&#39;, &#39;Merge&#39;), &#39;meanZTestMerge&#39;: (&#39;meanZTest&#39;, &#39;Merge&#39;), &#39;anyHeavyMerge&#39;: (&#39;anyHeavy&#39;, &#39;Merge&#39;), &#39;sumMerge&#39;: (&#39;sum&#39;, &#39;Merge&#39;), &#39;quantileTDigestWeightedMerge&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Merge&#39;), &#39;quantileTimingMerge&#39;: (&#39;quantileTiming&#39;, &#39;Merge&#39;), &#39;covarPopMerge&#39;: (&#39;covarPop&#39;, &#39;Merge&#39;), &#39;groupUniqArrayMerge&#39;: (&#39;groupUniqArray&#39;, &#39;Merge&#39;), &#39;first_valueMerge&#39;: (&#39;first_value&#39;, &#39;Merge&#39;), &#39;uniqHLL12Merge&#39;: (&#39;uniqHLL12&#39;, &#39;Merge&#39;), &#39;sumMapMerge&#39;: (&#39;sumMap&#39;, &#39;Merge&#39;), &#39;quantilesTimingMerge&#39;: (&#39;quantilesTiming&#39;, &#39;Merge&#39;), &#39;anyMerge&#39;: (&#39;any&#39;, &#39;Merge&#39;), &#39;contingencyMerge&#39;: (&#39;contingency&#39;, &#39;Merge&#39;), &#39;largestTriangleThreeBucketsMerge&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Merge&#39;), &#39;groupBitmapXorMerge&#39;: (&#39;groupBitmapXor&#39;, &#39;Merge&#39;), &#39;argMaxMerge&#39;: (&#39;argMax&#39;, &#39;Merge&#39;), &#39;groupArrayLastMerge&#39;: (&#39;groupArrayLast&#39;, &#39;Merge&#39;), &#39;quantilesExactWeightedMerge&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Merge&#39;), &#39;quantilesExactLowMerge&#39;: (&#39;quantilesExactLow&#39;, &#39;Merge&#39;), &#39;medianMerge&#39;: (&#39;median&#39;, &#39;Merge&#39;), &#39;groupArrayInsertAtMerge&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Merge&#39;), &#39;varSampMerge&#39;: (&#39;varSamp&#39;, &#39;Merge&#39;), &#39;categoricalInformationValueMerge&#39;: (&#39;categoricalInformationValue&#39;, &#39;Merge&#39;), &#39;groupBitAndMerge&#39;: (&#39;groupBitAnd&#39;, &#39;Merge&#39;), &#39;deltaSumTimestampMerge&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Merge&#39;), &#39;covarSampMerge&#39;: (&#39;covarSamp&#39;, &#39;Merge&#39;), &#39;quantilesBFloat16WeightedMerge&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Merge&#39;), &#39;studentTTestMerge&#39;: (&#39;studentTTest&#39;, &#39;Merge&#39;), &#39;avgMerge&#39;: (&#39;avg&#39;, &#39;Merge&#39;), &#39;maxMerge&#39;: (&#39;max&#39;, &#39;Merge&#39;), &#39;avgWeightedMerge&#39;: (&#39;avgWeighted&#39;, &#39;Merge&#39;), &#39;groupBitmapMerge&#39;: (&#39;groupBitmap&#39;, &#39;Merge&#39;), &#39;groupBitmapOrMerge&#39;: (&#39;groupBitmapOr&#39;, &#39;Merge&#39;), &#39;entropyMerge&#39;: (&#39;entropy&#39;, &#39;Merge&#39;), &#39;uniqCombinedMerge&#39;: (&#39;uniqCombined&#39;, &#39;Merge&#39;), &#39;deltaSumMerge&#39;: (&#39;deltaSum&#39;, &#39;Merge&#39;), &#39;quantilesDeterministicMerge&#39;: (&#39;quantilesDeterministic&#39;, &#39;Merge&#39;), &#39;sumKahanMergeState&#39;: (&#39;sumKahan&#39;, &#39;MergeState&#39;), &#39;uniqMergeState&#39;: (&#39;uniq&#39;, &#39;MergeState&#39;), &#39;sumWithOverflowMergeState&#39;: (&#39;sumWithOverflow&#39;, &#39;MergeState&#39;), &#39;maxMapMergeState&#39;: (&#39;maxMap&#39;, &#39;MergeState&#39;), &#39;varPopMergeState&#39;: (&#39;varPop&#39;, &#39;MergeState&#39;), &#39;last_valueMergeState&#39;: (&#39;last_value&#39;, &#39;MergeState&#39;), &#39;quantilesInterpolatedWeightedMergeState&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;MergeState&#39;), &#39;quantilesExactMergeState&#39;: (&#39;quantilesExact&#39;, &#39;MergeState&#39;), &#39;quantileBFloat16MergeState&#39;: (&#39;quantileBFloat16&#39;, &#39;MergeState&#39;), &#39;stochasticLogisticRegressionMergeState&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;MergeState&#39;), &#39;rankCorrMergeState&#39;: (&#39;rankCorr&#39;, &#39;MergeState&#39;), &#39;quantileTimingWeightedMergeState&#39;: (&#39;quantileTimingWeighted&#39;, &#39;MergeState&#39;), &#39;simpleLinearRegressionMergeState&#39;: (&#39;simpleLinearRegression&#39;, &#39;MergeState&#39;), &#39;quantilesGKMergeState&#39;: (&#39;quantilesGK&#39;, &#39;MergeState&#39;), &#39;kolmogorovSmirnovTestMergeState&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;MergeState&#39;), &#39;stddevPopMergeState&#39;: (&#39;stddevPop&#39;, &#39;MergeState&#39;), &#39;uniqExactMergeState&#39;: (&#39;uniqExact&#39;, &#39;MergeState&#39;), &#39;sparkBarMergeState&#39;: (&#39;sparkBar&#39;, &#39;MergeState&#39;), &#39;quantilesTDigestWeightedMergeState&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;MergeState&#39;), &#39;kurtSampMergeState&#39;: (&#39;kurtSamp&#39;, &#39;MergeState&#39;), &#39;sumCountMergeState&#39;: (&#39;sumCount&#39;, &#39;MergeState&#39;), &#39;cramersVBiasCorrectedMergeState&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;MergeState&#39;), &#39;quantileExactWeightedMergeState&#39;: (&#39;quantileExactWeighted&#39;, &#39;MergeState&#39;), &#39;quantileInterpolatedWeightedMergeState&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;MergeState&#39;), &#39;kurtPopMergeState&#39;: (&#39;kurtPop&#39;, &#39;MergeState&#39;), &#39;quantileBFloat16WeightedMergeState&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;MergeState&#39;), &#39;groupBitOrMergeState&#39;: (&#39;groupBitOr&#39;, &#39;MergeState&#39;), &#39;boundingRatioMergeState&#39;: (&#39;boundingRatio&#39;, &#39;MergeState&#39;), &#39;skewPopMergeState&#39;: (&#39;skewPop&#39;, &#39;MergeState&#39;), &#39;maxIntersectionsPositionMergeState&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;MergeState&#39;), &#39;quantilesExactHighMergeState&#39;: (&#39;quantilesExactHigh&#39;, &#39;MergeState&#39;), &#39;topKMergeState&#39;: (&#39;topK&#39;, &#39;MergeState&#39;), &#39;maxIntersectionsMergeState&#39;: (&#39;maxIntersections&#39;, &#39;MergeState&#39;), &#39;quantileExactLowMergeState&#39;: (&#39;quantileExactLow&#39;, &#39;MergeState&#39;), &#39;groupArrayMovingAvgMergeState&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;MergeState&#39;), &#39;corrMergeState&#39;: (&#39;corr&#39;, &#39;MergeState&#39;), &#39;quantileDeterministicMergeState&#39;: (&#39;quantileDeterministic&#39;, &#39;MergeState&#39;), &#39;exponentialMovingAverageMergeState&#39;: (&#39;exponentialMovingAverage&#39;, &#39;MergeState&#39;), &#39;quantileExactMergeState&#39;: (&#39;quantileExact&#39;, &#39;MergeState&#39;), &#39;quantilesBFloat16MergeState&#39;: (&#39;quantilesBFloat16&#39;, &#39;MergeState&#39;), &#39;quantileGKMergeState&#39;: (&#39;quantileGK&#39;, &#39;MergeState&#39;), &#39;quantilesTimingWeightedMergeState&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;MergeState&#39;), &#39;minMapMergeState&#39;: (&#39;minMap&#39;, &#39;MergeState&#39;), &#39;quantileMergeState&#39;: (&#39;quantile&#39;, &#39;MergeState&#39;), &#39;welchTTestMergeState&#39;: (&#39;welchTTest&#39;, &#39;MergeState&#39;), &#39;groupArraySampleMergeState&#39;: (&#39;groupArraySample&#39;, &#39;MergeState&#39;), &#39;groupBitXorMergeState&#39;: (&#39;groupBitXor&#39;, &#39;MergeState&#39;), &#39;cramersVMergeState&#39;: (&#39;cramersV&#39;, &#39;MergeState&#39;), &#39;topKWeightedMergeState&#39;: (&#39;topKWeighted&#39;, &#39;MergeState&#39;), &#39;countMergeState&#39;: (&#39;count&#39;, &#39;MergeState&#39;), &#39;quantileExactHighMergeState&#39;: (&#39;quantileExactHigh&#39;, &#39;MergeState&#39;), &#39;argMinMergeState&#39;: (&#39;argMin&#39;, &#39;MergeState&#39;), &#39;stochasticLinearRegressionMergeState&#39;: (&#39;stochasticLinearRegression&#39;, &#39;MergeState&#39;), &#39;uniqThetaMergeState&#39;: (&#39;uniqTheta&#39;, &#39;MergeState&#39;), &#39;intervalLengthSumMergeState&#39;: (&#39;intervalLengthSum&#39;, &#39;MergeState&#39;), &#39;groupArrayMovingSumMergeState&#39;: (&#39;groupArrayMovingSum&#39;, &#39;MergeState&#39;), &#39;mannWhitneyUTestMergeState&#39;: (&#39;mannWhitneyUTest&#39;, &#39;MergeState&#39;), &#39;uniqCombined64MergeState&#39;: (&#39;uniqCombined64&#39;, &#39;MergeState&#39;), &#39;stddevSampMergeState&#39;: (&#39;stddevSamp&#39;, &#39;MergeState&#39;), &#39;skewSampMergeState&#39;: (&#39;skewSamp&#39;, &#39;MergeState&#39;), &#39;quantilesTDigestMergeState&#39;: (&#39;quantilesTDigest&#39;, &#39;MergeState&#39;), &#39;groupArrayMergeState&#39;: (&#39;groupArray&#39;, &#39;MergeState&#39;), &#39;groupBitmapAndMergeState&#39;: (&#39;groupBitmapAnd&#39;, &#39;MergeState&#39;), &#39;minMergeState&#39;: (&#39;min&#39;, &#39;MergeState&#39;), &#39;quantilesMergeState&#39;: (&#39;quantiles&#39;, &#39;MergeState&#39;), &#39;theilsUMergeState&#39;: (&#39;theilsU&#39;, &#39;MergeState&#39;), &#39;anyLastMergeState&#39;: (&#39;anyLast&#39;, &#39;MergeState&#39;), &#39;quantileTDigestMergeState&#39;: (&#39;quantileTDigest&#39;, &#39;MergeState&#39;), &#39;meanZTestMergeState&#39;: (&#39;meanZTest&#39;, &#39;MergeState&#39;), &#39;anyHeavyMergeState&#39;: (&#39;anyHeavy&#39;, &#39;MergeState&#39;), &#39;sumMergeState&#39;: (&#39;sum&#39;, &#39;MergeState&#39;), &#39;quantileTDigestWeightedMergeState&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;MergeState&#39;), &#39;quantileTimingMergeState&#39;: (&#39;quantileTiming&#39;, &#39;MergeState&#39;), &#39;covarPopMergeState&#39;: (&#39;covarPop&#39;, &#39;MergeState&#39;), &#39;groupUniqArrayMergeState&#39;: (&#39;groupUniqArray&#39;, &#39;MergeState&#39;), &#39;first_valueMergeState&#39;: (&#39;first_value&#39;, &#39;MergeState&#39;), &#39;uniqHLL12MergeState&#39;: (&#39;uniqHLL12&#39;, &#39;MergeState&#39;), &#39;sumMapMergeState&#39;: (&#39;sumMap&#39;, &#39;MergeState&#39;), &#39;quantilesTimingMergeState&#39;: (&#39;quantilesTiming&#39;, &#39;MergeState&#39;), &#39;anyMergeState&#39;: (&#39;any&#39;, &#39;MergeState&#39;), &#39;contingencyMergeState&#39;: (&#39;contingency&#39;, &#39;MergeState&#39;), &#39;largestTriangleThreeBucketsMergeState&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;MergeState&#39;), &#39;groupBitmapXorMergeState&#39;: (&#39;groupBitmapXor&#39;, &#39;MergeState&#39;), &#39;argMaxMergeState&#39;: (&#39;argMax&#39;, &#39;MergeState&#39;), &#39;groupArrayLastMergeState&#39;: (&#39;groupArrayLast&#39;, &#39;MergeState&#39;), &#39;quantilesExactWeightedMergeState&#39;: (&#39;quantilesExactWeighted&#39;, &#39;MergeState&#39;), &#39;quantilesExactLowMergeState&#39;: (&#39;quantilesExactLow&#39;, &#39;MergeState&#39;), &#39;medianMergeState&#39;: (&#39;median&#39;, &#39;MergeState&#39;), &#39;groupArrayInsertAtMergeState&#39;: (&#39;groupArrayInsertAt&#39;, &#39;MergeState&#39;), &#39;varSampMergeState&#39;: (&#39;varSamp&#39;, &#39;MergeState&#39;), &#39;categoricalInformationValueMergeState&#39;: (&#39;categoricalInformationValue&#39;, &#39;MergeState&#39;), &#39;groupBitAndMergeState&#39;: (&#39;groupBitAnd&#39;, &#39;MergeState&#39;), &#39;deltaSumTimestampMergeState&#39;: (&#39;deltaSumTimestamp&#39;, &#39;MergeState&#39;), &#39;covarSampMergeState&#39;: (&#39;covarSamp&#39;, &#39;MergeState&#39;), &#39;quantilesBFloat16WeightedMergeState&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;MergeState&#39;), &#39;studentTTestMergeState&#39;: (&#39;studentTTest&#39;, &#39;MergeState&#39;), &#39;avgMergeState&#39;: (&#39;avg&#39;, &#39;MergeState&#39;), &#39;maxMergeState&#39;: (&#39;max&#39;, &#39;MergeState&#39;), &#39;avgWeightedMergeState&#39;: (&#39;avgWeighted&#39;, &#39;MergeState&#39;), &#39;groupBitmapMergeState&#39;: (&#39;groupBitmap&#39;, &#39;MergeState&#39;), &#39;groupBitmapOrMergeState&#39;: (&#39;groupBitmapOr&#39;, &#39;MergeState&#39;), &#39;entropyMergeState&#39;: (&#39;entropy&#39;, &#39;MergeState&#39;), &#39;uniqCombinedMergeState&#39;: (&#39;uniqCombined&#39;, &#39;MergeState&#39;), &#39;deltaSumMergeState&#39;: (&#39;deltaSum&#39;, &#39;MergeState&#39;), &#39;quantilesDeterministicMergeState&#39;: (&#39;quantilesDeterministic&#39;, &#39;MergeState&#39;), &#39;sumKahanForEach&#39;: (&#39;sumKahan&#39;, &#39;ForEach&#39;), &#39;uniqForEach&#39;: (&#39;uniq&#39;, &#39;ForEach&#39;), &#39;sumWithOverflowForEach&#39;: (&#39;sumWithOverflow&#39;, &#39;ForEach&#39;), &#39;maxMapForEach&#39;: (&#39;maxMap&#39;, &#39;ForEach&#39;), &#39;varPopForEach&#39;: (&#39;varPop&#39;, &#39;ForEach&#39;), &#39;last_valueForEach&#39;: (&#39;last_value&#39;, &#39;ForEach&#39;), &#39;quantilesInterpolatedWeightedForEach&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ForEach&#39;), &#39;quantilesExactForEach&#39;: (&#39;quantilesExact&#39;, &#39;ForEach&#39;), &#39;quantileBFloat16ForEach&#39;: (&#39;quantileBFloat16&#39;, &#39;ForEach&#39;), &#39;stochasticLogisticRegressionForEach&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ForEach&#39;), &#39;rankCorrForEach&#39;: (&#39;rankCorr&#39;, &#39;ForEach&#39;), &#39;quantileTimingWeightedForEach&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ForEach&#39;), &#39;simpleLinearRegressionForEach&#39;: (&#39;simpleLinearRegression&#39;, &#39;ForEach&#39;), &#39;quantilesGKForEach&#39;: (&#39;quantilesGK&#39;, &#39;ForEach&#39;), &#39;kolmogorovSmirnovTestForEach&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ForEach&#39;), &#39;stddevPopForEach&#39;: (&#39;stddevPop&#39;, &#39;ForEach&#39;), &#39;uniqExactForEach&#39;: (&#39;uniqExact&#39;, &#39;ForEach&#39;), &#39;sparkBarForEach&#39;: (&#39;sparkBar&#39;, &#39;ForEach&#39;), &#39;quantilesTDigestWeightedForEach&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ForEach&#39;), &#39;kurtSampForEach&#39;: (&#39;kurtSamp&#39;, &#39;ForEach&#39;), &#39;sumCountForEach&#39;: (&#39;sumCount&#39;, &#39;ForEach&#39;), &#39;cramersVBiasCorrectedForEach&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ForEach&#39;), &#39;quantileExactWeightedForEach&#39;: (&#39;quantileExactWeighted&#39;, &#39;ForEach&#39;), &#39;quantileInterpolatedWeightedForEach&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ForEach&#39;), &#39;kurtPopForEach&#39;: (&#39;kurtPop&#39;, &#39;ForEach&#39;), &#39;quantileBFloat16WeightedForEach&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ForEach&#39;), &#39;groupBitOrForEach&#39;: (&#39;groupBitOr&#39;, &#39;ForEach&#39;), &#39;boundingRatioForEach&#39;: (&#39;boundingRatio&#39;, &#39;ForEach&#39;), &#39;skewPopForEach&#39;: (&#39;skewPop&#39;, &#39;ForEach&#39;), &#39;maxIntersectionsPositionForEach&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ForEach&#39;), &#39;quantilesExactHighForEach&#39;: (&#39;quantilesExactHigh&#39;, &#39;ForEach&#39;), &#39;topKForEach&#39;: (&#39;topK&#39;, &#39;ForEach&#39;), &#39;maxIntersectionsForEach&#39;: (&#39;maxIntersections&#39;, &#39;ForEach&#39;), &#39;quantileExactLowForEach&#39;: (&#39;quantileExactLow&#39;, &#39;ForEach&#39;), &#39;groupArrayMovingAvgForEach&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ForEach&#39;), &#39;corrForEach&#39;: (&#39;corr&#39;, &#39;ForEach&#39;), &#39;quantileDeterministicForEach&#39;: (&#39;quantileDeterministic&#39;, &#39;ForEach&#39;), &#39;exponentialMovingAverageForEach&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ForEach&#39;), &#39;quantileExactForEach&#39;: (&#39;quantileExact&#39;, &#39;ForEach&#39;), &#39;quantilesBFloat16ForEach&#39;: (&#39;quantilesBFloat16&#39;, &#39;ForEach&#39;), &#39;quantileGKForEach&#39;: (&#39;quantileGK&#39;, &#39;ForEach&#39;), &#39;quantilesTimingWeightedForEach&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ForEach&#39;), &#39;minMapForEach&#39;: (&#39;minMap&#39;, &#39;ForEach&#39;), &#39;quantileForEach&#39;: (&#39;quantile&#39;, &#39;ForEach&#39;), &#39;welchTTestForEach&#39;: (&#39;welchTTest&#39;, &#39;ForEach&#39;), &#39;groupArraySampleForEach&#39;: (&#39;groupArraySample&#39;, &#39;ForEach&#39;), &#39;groupBitXorForEach&#39;: (&#39;groupBitXor&#39;, &#39;ForEach&#39;), &#39;cramersVForEach&#39;: (&#39;cramersV&#39;, &#39;ForEach&#39;), &#39;topKWeightedForEach&#39;: (&#39;topKWeighted&#39;, &#39;ForEach&#39;), &#39;countForEach&#39;: (&#39;count&#39;, &#39;ForEach&#39;), &#39;quantileExactHighForEach&#39;: (&#39;quantileExactHigh&#39;, &#39;ForEach&#39;), &#39;argMinForEach&#39;: (&#39;argMin&#39;, &#39;ForEach&#39;), &#39;stochasticLinearRegressionForEach&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ForEach&#39;), &#39;uniqThetaForEach&#39;: (&#39;uniqTheta&#39;, &#39;ForEach&#39;), &#39;intervalLengthSumForEach&#39;: (&#39;intervalLengthSum&#39;, &#39;ForEach&#39;), &#39;groupArrayMovingSumForEach&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ForEach&#39;), &#39;mannWhitneyUTestForEach&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ForEach&#39;), &#39;uniqCombined64ForEach&#39;: (&#39;uniqCombined64&#39;, &#39;ForEach&#39;), &#39;stddevSampForEach&#39;: (&#39;stddevSamp&#39;, &#39;ForEach&#39;), &#39;skewSampForEach&#39;: (&#39;skewSamp&#39;, &#39;ForEach&#39;), &#39;quantilesTDigestForEach&#39;: (&#39;quantilesTDigest&#39;, &#39;ForEach&#39;), &#39;groupArrayForEach&#39;: (&#39;groupArray&#39;, &#39;ForEach&#39;), &#39;groupBitmapAndForEach&#39;: (&#39;groupBitmapAnd&#39;, &#39;ForEach&#39;), &#39;minForEach&#39;: (&#39;min&#39;, &#39;ForEach&#39;), &#39;quantilesForEach&#39;: (&#39;quantiles&#39;, &#39;ForEach&#39;), &#39;theilsUForEach&#39;: (&#39;theilsU&#39;, &#39;ForEach&#39;), &#39;anyLastForEach&#39;: (&#39;anyLast&#39;, &#39;ForEach&#39;), &#39;quantileTDigestForEach&#39;: (&#39;quantileTDigest&#39;, &#39;ForEach&#39;), &#39;meanZTestForEach&#39;: (&#39;meanZTest&#39;, &#39;ForEach&#39;), &#39;anyHeavyForEach&#39;: (&#39;anyHeavy&#39;, &#39;ForEach&#39;), &#39;sumForEach&#39;: (&#39;sum&#39;, &#39;ForEach&#39;), &#39;quantileTDigestWeightedForEach&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ForEach&#39;), &#39;quantileTimingForEach&#39;: (&#39;quantileTiming&#39;, &#39;ForEach&#39;), &#39;covarPopForEach&#39;: (&#39;covarPop&#39;, &#39;ForEach&#39;), &#39;groupUniqArrayForEach&#39;: (&#39;groupUniqArray&#39;, &#39;ForEach&#39;), &#39;first_valueForEach&#39;: (&#39;first_value&#39;, &#39;ForEach&#39;), &#39;uniqHLL12ForEach&#39;: (&#39;uniqHLL12&#39;, &#39;ForEach&#39;), &#39;sumMapForEach&#39;: (&#39;sumMap&#39;, &#39;ForEach&#39;), &#39;quantilesTimingForEach&#39;: (&#39;quantilesTiming&#39;, &#39;ForEach&#39;), &#39;anyForEach&#39;: (&#39;any&#39;, &#39;ForEach&#39;), &#39;contingencyForEach&#39;: (&#39;contingency&#39;, &#39;ForEach&#39;), &#39;largestTriangleThreeBucketsForEach&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ForEach&#39;), &#39;groupBitmapXorForEach&#39;: (&#39;groupBitmapXor&#39;, &#39;ForEach&#39;), &#39;argMaxForEach&#39;: (&#39;argMax&#39;, &#39;ForEach&#39;), &#39;groupArrayLastForEach&#39;: (&#39;groupArrayLast&#39;, &#39;ForEach&#39;), &#39;quantilesExactWeightedForEach&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ForEach&#39;), &#39;quantilesExactLowForEach&#39;: (&#39;quantilesExactLow&#39;, &#39;ForEach&#39;), &#39;medianForEach&#39;: (&#39;median&#39;, &#39;ForEach&#39;), &#39;groupArrayInsertAtForEach&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ForEach&#39;), &#39;varSampForEach&#39;: (&#39;varSamp&#39;, &#39;ForEach&#39;), &#39;categoricalInformationValueForEach&#39;: (&#39;categoricalInformationValue&#39;, &#39;ForEach&#39;), &#39;groupBitAndForEach&#39;: (&#39;groupBitAnd&#39;, &#39;ForEach&#39;), &#39;deltaSumTimestampForEach&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ForEach&#39;), &#39;covarSampForEach&#39;: (&#39;covarSamp&#39;, &#39;ForEach&#39;), &#39;quantilesBFloat16WeightedForEach&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ForEach&#39;), &#39;studentTTestForEach&#39;: (&#39;studentTTest&#39;, &#39;ForEach&#39;), &#39;avgForEach&#39;: (&#39;avg&#39;, &#39;ForEach&#39;), &#39;maxForEach&#39;: (&#39;max&#39;, &#39;ForEach&#39;), &#39;avgWeightedForEach&#39;: (&#39;avgWeighted&#39;, &#39;ForEach&#39;), &#39;groupBitmapForEach&#39;: (&#39;groupBitmap&#39;, &#39;ForEach&#39;), &#39;groupBitmapOrForEach&#39;: (&#39;groupBitmapOr&#39;, &#39;ForEach&#39;), &#39;entropyForEach&#39;: (&#39;entropy&#39;, &#39;ForEach&#39;), &#39;uniqCombinedForEach&#39;: (&#39;uniqCombined&#39;, &#39;ForEach&#39;), &#39;deltaSumForEach&#39;: (&#39;deltaSum&#39;, &#39;ForEach&#39;), &#39;quantilesDeterministicForEach&#39;: (&#39;quantilesDeterministic&#39;, &#39;ForEach&#39;), &#39;sumKahanDistinct&#39;: (&#39;sumKahan&#39;, &#39;Distinct&#39;), &#39;uniqDistinct&#39;: (&#39;uniq&#39;, &#39;Distinct&#39;), &#39;sumWithOverflowDistinct&#39;: (&#39;sumWithOverflow&#39;, &#39;Distinct&#39;), &#39;maxMapDistinct&#39;: (&#39;maxMap&#39;, &#39;Distinct&#39;), &#39;varPopDistinct&#39;: (&#39;varPop&#39;, &#39;Distinct&#39;), &#39;last_valueDistinct&#39;: (&#39;last_value&#39;, &#39;Distinct&#39;), &#39;quantilesInterpolatedWeightedDistinct&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Distinct&#39;), &#39;quantilesExactDistinct&#39;: (&#39;quantilesExact&#39;, &#39;Distinct&#39;), &#39;quantileBFloat16Distinct&#39;: (&#39;quantileBFloat16&#39;, &#39;Distinct&#39;), &#39;stochasticLogisticRegressionDistinct&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Distinct&#39;), &#39;rankCorrDistinct&#39;: (&#39;rankCorr&#39;, &#39;Distinct&#39;), &#39;quantileTimingWeightedDistinct&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Distinct&#39;), &#39;simpleLinearRegressionDistinct&#39;: (&#39;simpleLinearRegression&#39;, &#39;Distinct&#39;), &#39;quantilesGKDistinct&#39;: (&#39;quantilesGK&#39;, &#39;Distinct&#39;), &#39;kolmogorovSmirnovTestDistinct&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Distinct&#39;), &#39;stddevPopDistinct&#39;: (&#39;stddevPop&#39;, &#39;Distinct&#39;), &#39;uniqExactDistinct&#39;: (&#39;uniqExact&#39;, &#39;Distinct&#39;), &#39;sparkBarDistinct&#39;: (&#39;sparkBar&#39;, &#39;Distinct&#39;), &#39;quantilesTDigestWeightedDistinct&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Distinct&#39;), &#39;kurtSampDistinct&#39;: (&#39;kurtSamp&#39;, &#39;Distinct&#39;), &#39;sumCountDistinct&#39;: (&#39;sumCount&#39;, &#39;Distinct&#39;), &#39;cramersVBiasCorrectedDistinct&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Distinct&#39;), &#39;quantileExactWeightedDistinct&#39;: (&#39;quantileExactWeighted&#39;, &#39;Distinct&#39;), &#39;quantileInterpolatedWeightedDistinct&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Distinct&#39;), &#39;kurtPopDistinct&#39;: (&#39;kurtPop&#39;, &#39;Distinct&#39;), &#39;quantileBFloat16WeightedDistinct&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Distinct&#39;), &#39;groupBitOrDistinct&#39;: (&#39;groupBitOr&#39;, &#39;Distinct&#39;), &#39;boundingRatioDistinct&#39;: (&#39;boundingRatio&#39;, &#39;Distinct&#39;), &#39;skewPopDistinct&#39;: (&#39;skewPop&#39;, &#39;Distinct&#39;), &#39;maxIntersectionsPositionDistinct&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Distinct&#39;), &#39;quantilesExactHighDistinct&#39;: (&#39;quantilesExactHigh&#39;, &#39;Distinct&#39;), &#39;topKDistinct&#39;: (&#39;topK&#39;, &#39;Distinct&#39;), &#39;maxIntersectionsDistinct&#39;: (&#39;maxIntersections&#39;, &#39;Distinct&#39;), &#39;quantileExactLowDistinct&#39;: (&#39;quantileExactLow&#39;, &#39;Distinct&#39;), &#39;groupArrayMovingAvgDistinct&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Distinct&#39;), &#39;corrDistinct&#39;: (&#39;corr&#39;, &#39;Distinct&#39;), &#39;quantileDeterministicDistinct&#39;: (&#39;quantileDeterministic&#39;, &#39;Distinct&#39;), &#39;exponentialMovingAverageDistinct&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Distinct&#39;), &#39;quantileExactDistinct&#39;: (&#39;quantileExact&#39;, &#39;Distinct&#39;), &#39;quantilesBFloat16Distinct&#39;: (&#39;quantilesBFloat16&#39;, &#39;Distinct&#39;), &#39;quantileGKDistinct&#39;: (&#39;quantileGK&#39;, &#39;Distinct&#39;), &#39;quantilesTimingWeightedDistinct&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Distinct&#39;), &#39;minMapDistinct&#39;: (&#39;minMap&#39;, &#39;Distinct&#39;), &#39;quantileDistinct&#39;: (&#39;quantile&#39;, &#39;Distinct&#39;), &#39;welchTTestDistinct&#39;: (&#39;welchTTest&#39;, &#39;Distinct&#39;), &#39;groupArraySampleDistinct&#39;: (&#39;groupArraySample&#39;, &#39;Distinct&#39;), &#39;groupBitXorDistinct&#39;: (&#39;groupBitXor&#39;, &#39;Distinct&#39;), &#39;cramersVDistinct&#39;: (&#39;cramersV&#39;, &#39;Distinct&#39;), &#39;topKWeightedDistinct&#39;: (&#39;topKWeighted&#39;, &#39;Distinct&#39;), &#39;countDistinct&#39;: (&#39;count&#39;, &#39;Distinct&#39;), &#39;quantileExactHighDistinct&#39;: (&#39;quantileExactHigh&#39;, &#39;Distinct&#39;), &#39;argMinDistinct&#39;: (&#39;argMin&#39;, &#39;Distinct&#39;), &#39;stochasticLinearRegressionDistinct&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Distinct&#39;), &#39;uniqThetaDistinct&#39;: (&#39;uniqTheta&#39;, &#39;Distinct&#39;), &#39;intervalLengthSumDistinct&#39;: (&#39;intervalLengthSum&#39;, &#39;Distinct&#39;), &#39;groupArrayMovingSumDistinct&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Distinct&#39;), &#39;mannWhitneyUTestDistinct&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Distinct&#39;), &#39;uniqCombined64Distinct&#39;: (&#39;uniqCombined64&#39;, &#39;Distinct&#39;), &#39;stddevSampDistinct&#39;: (&#39;stddevSamp&#39;, &#39;Distinct&#39;), &#39;skewSampDistinct&#39;: (&#39;skewSamp&#39;, &#39;Distinct&#39;), &#39;quantilesTDigestDistinct&#39;: (&#39;quantilesTDigest&#39;, &#39;Distinct&#39;), &#39;groupArrayDistinct&#39;: (&#39;groupArray&#39;, &#39;Distinct&#39;), &#39;groupBitmapAndDistinct&#39;: (&#39;groupBitmapAnd&#39;, &#39;Distinct&#39;), &#39;minDistinct&#39;: (&#39;min&#39;, &#39;Distinct&#39;), &#39;quantilesDistinct&#39;: (&#39;quantiles&#39;, &#39;Distinct&#39;), &#39;theilsUDistinct&#39;: (&#39;theilsU&#39;, &#39;Distinct&#39;), &#39;anyLastDistinct&#39;: (&#39;anyLast&#39;, &#39;Distinct&#39;), &#39;quantileTDigestDistinct&#39;: (&#39;quantileTDigest&#39;, &#39;Distinct&#39;), &#39;meanZTestDistinct&#39;: (&#39;meanZTest&#39;, &#39;Distinct&#39;), &#39;anyHeavyDistinct&#39;: (&#39;anyHeavy&#39;, &#39;Distinct&#39;), &#39;sumDistinct&#39;: (&#39;sum&#39;, &#39;Distinct&#39;), &#39;quantileTDigestWeightedDistinct&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Distinct&#39;), &#39;quantileTimingDistinct&#39;: (&#39;quantileTiming&#39;, &#39;Distinct&#39;), &#39;covarPopDistinct&#39;: (&#39;covarPop&#39;, &#39;Distinct&#39;), &#39;groupUniqArrayDistinct&#39;: (&#39;groupUniqArray&#39;, &#39;Distinct&#39;), &#39;first_valueDistinct&#39;: (&#39;first_value&#39;, &#39;Distinct&#39;), &#39;uniqHLL12Distinct&#39;: (&#39;uniqHLL12&#39;, &#39;Distinct&#39;), &#39;sumMapDistinct&#39;: (&#39;sumMap&#39;, &#39;Distinct&#39;), &#39;quantilesTimingDistinct&#39;: (&#39;quantilesTiming&#39;, &#39;Distinct&#39;), &#39;anyDistinct&#39;: (&#39;any&#39;, &#39;Distinct&#39;), &#39;contingencyDistinct&#39;: (&#39;contingency&#39;, &#39;Distinct&#39;), &#39;largestTriangleThreeBucketsDistinct&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Distinct&#39;), &#39;groupBitmapXorDistinct&#39;: (&#39;groupBitmapXor&#39;, &#39;Distinct&#39;), &#39;argMaxDistinct&#39;: (&#39;argMax&#39;, &#39;Distinct&#39;), &#39;groupArrayLastDistinct&#39;: (&#39;groupArrayLast&#39;, &#39;Distinct&#39;), &#39;quantilesExactWeightedDistinct&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Distinct&#39;), &#39;quantilesExactLowDistinct&#39;: (&#39;quantilesExactLow&#39;, &#39;Distinct&#39;), &#39;medianDistinct&#39;: (&#39;median&#39;, &#39;Distinct&#39;), &#39;groupArrayInsertAtDistinct&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Distinct&#39;), &#39;varSampDistinct&#39;: (&#39;varSamp&#39;, &#39;Distinct&#39;), &#39;categoricalInformationValueDistinct&#39;: (&#39;categoricalInformationValue&#39;, &#39;Distinct&#39;), &#39;groupBitAndDistinct&#39;: (&#39;groupBitAnd&#39;, &#39;Distinct&#39;), &#39;deltaSumTimestampDistinct&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Distinct&#39;), &#39;covarSampDistinct&#39;: (&#39;covarSamp&#39;, &#39;Distinct&#39;), &#39;quantilesBFloat16WeightedDistinct&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Distinct&#39;), &#39;studentTTestDistinct&#39;: (&#39;studentTTest&#39;, &#39;Distinct&#39;), &#39;avgDistinct&#39;: (&#39;avg&#39;, &#39;Distinct&#39;), &#39;maxDistinct&#39;: (&#39;max&#39;, &#39;Distinct&#39;), &#39;avgWeightedDistinct&#39;: (&#39;avgWeighted&#39;, &#39;Distinct&#39;), &#39;groupBitmapDistinct&#39;: (&#39;groupBitmap&#39;, &#39;Distinct&#39;), &#39;groupBitmapOrDistinct&#39;: (&#39;groupBitmapOr&#39;, &#39;Distinct&#39;), &#39;entropyDistinct&#39;: (&#39;entropy&#39;, &#39;Distinct&#39;), &#39;uniqCombinedDistinct&#39;: (&#39;uniqCombined&#39;, &#39;Distinct&#39;), &#39;deltaSumDistinct&#39;: (&#39;deltaSum&#39;, &#39;Distinct&#39;), &#39;quantilesDeterministicDistinct&#39;: (&#39;quantilesDeterministic&#39;, &#39;Distinct&#39;), &#39;sumKahanOrDefault&#39;: (&#39;sumKahan&#39;, &#39;OrDefault&#39;), &#39;uniqOrDefault&#39;: (&#39;uniq&#39;, &#39;OrDefault&#39;), &#39;sumWithOverflowOrDefault&#39;: (&#39;sumWithOverflow&#39;, &#39;OrDefault&#39;), &#39;maxMapOrDefault&#39;: (&#39;maxMap&#39;, &#39;OrDefault&#39;), &#39;varPopOrDefault&#39;: (&#39;varPop&#39;, &#39;OrDefault&#39;), &#39;last_valueOrDefault&#39;: (&#39;last_value&#39;, &#39;OrDefault&#39;), &#39;quantilesInterpolatedWeightedOrDefault&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;OrDefault&#39;), &#39;quantilesExactOrDefault&#39;: (&#39;quantilesExact&#39;, &#39;OrDefault&#39;), &#39;quantileBFloat16OrDefault&#39;: (&#39;quantileBFloat16&#39;, &#39;OrDefault&#39;), &#39;stochasticLogisticRegressionOrDefault&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;OrDefault&#39;), &#39;rankCorrOrDefault&#39;: (&#39;rankCorr&#39;, &#39;OrDefault&#39;), &#39;quantileTimingWeightedOrDefault&#39;: (&#39;quantileTimingWeighted&#39;, &#39;OrDefault&#39;), &#39;simpleLinearRegressionOrDefault&#39;: (&#39;simpleLinearRegression&#39;, &#39;OrDefault&#39;), &#39;quantilesGKOrDefault&#39;: (&#39;quantilesGK&#39;, &#39;OrDefault&#39;), &#39;kolmogorovSmirnovTestOrDefault&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;OrDefault&#39;), &#39;stddevPopOrDefault&#39;: (&#39;stddevPop&#39;, &#39;OrDefault&#39;), &#39;uniqExactOrDefault&#39;: (&#39;uniqExact&#39;, &#39;OrDefault&#39;), &#39;sparkBarOrDefault&#39;: (&#39;sparkBar&#39;, &#39;OrDefault&#39;), &#39;quantilesTDigestWeightedOrDefault&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;OrDefault&#39;), &#39;kurtSampOrDefault&#39;: (&#39;kurtSamp&#39;, &#39;OrDefault&#39;), &#39;sumCountOrDefault&#39;: (&#39;sumCount&#39;, &#39;OrDefault&#39;), &#39;cramersVBiasCorrectedOrDefault&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;OrDefault&#39;), &#39;quantileExactWeightedOrDefault&#39;: (&#39;quantileExactWeighted&#39;, &#39;OrDefault&#39;), &#39;quantileInterpolatedWeightedOrDefault&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;OrDefault&#39;), &#39;kurtPopOrDefault&#39;: (&#39;kurtPop&#39;, &#39;OrDefault&#39;), &#39;quantileBFloat16WeightedOrDefault&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;OrDefault&#39;), &#39;groupBitOrOrDefault&#39;: (&#39;groupBitOr&#39;, &#39;OrDefault&#39;), &#39;boundingRatioOrDefault&#39;: (&#39;boundingRatio&#39;, &#39;OrDefault&#39;), &#39;skewPopOrDefault&#39;: (&#39;skewPop&#39;, &#39;OrDefault&#39;), &#39;maxIntersectionsPositionOrDefault&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;OrDefault&#39;), &#39;quantilesExactHighOrDefault&#39;: (&#39;quantilesExactHigh&#39;, &#39;OrDefault&#39;), &#39;topKOrDefault&#39;: (&#39;topK&#39;, &#39;OrDefault&#39;), &#39;maxIntersectionsOrDefault&#39;: (&#39;maxIntersections&#39;, &#39;OrDefault&#39;), &#39;quantileExactLowOrDefault&#39;: (&#39;quantileExactLow&#39;, &#39;OrDefault&#39;), &#39;groupArrayMovingAvgOrDefault&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;OrDefault&#39;), &#39;corrOrDefault&#39;: (&#39;corr&#39;, &#39;OrDefault&#39;), &#39;quantileDeterministicOrDefault&#39;: (&#39;quantileDeterministic&#39;, &#39;OrDefault&#39;), &#39;exponentialMovingAverageOrDefault&#39;: (&#39;exponentialMovingAverage&#39;, &#39;OrDefault&#39;), &#39;quantileExactOrDefault&#39;: (&#39;quantileExact&#39;, &#39;OrDefault&#39;), &#39;quantilesBFloat16OrDefault&#39;: (&#39;quantilesBFloat16&#39;, &#39;OrDefault&#39;), &#39;quantileGKOrDefault&#39;: (&#39;quantileGK&#39;, &#39;OrDefault&#39;), &#39;quantilesTimingWeightedOrDefault&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;OrDefault&#39;), &#39;minMapOrDefault&#39;: (&#39;minMap&#39;, &#39;OrDefault&#39;), &#39;quantileOrDefault&#39;: (&#39;quantile&#39;, &#39;OrDefault&#39;), &#39;welchTTestOrDefault&#39;: (&#39;welchTTest&#39;, &#39;OrDefault&#39;), &#39;groupArraySampleOrDefault&#39;: (&#39;groupArraySample&#39;, &#39;OrDefault&#39;), &#39;groupBitXorOrDefault&#39;: (&#39;groupBitXor&#39;, &#39;OrDefault&#39;), &#39;cramersVOrDefault&#39;: (&#39;cramersV&#39;, &#39;OrDefault&#39;), &#39;topKWeightedOrDefault&#39;: (&#39;topKWeighted&#39;, &#39;OrDefault&#39;), &#39;countOrDefault&#39;: (&#39;count&#39;, &#39;OrDefault&#39;), &#39;quantileExactHighOrDefault&#39;: (&#39;quantileExactHigh&#39;, &#39;OrDefault&#39;), &#39;argMinOrDefault&#39;: (&#39;argMin&#39;, &#39;OrDefault&#39;), &#39;stochasticLinearRegressionOrDefault&#39;: (&#39;stochasticLinearRegression&#39;, &#39;OrDefault&#39;), &#39;uniqThetaOrDefault&#39;: (&#39;uniqTheta&#39;, &#39;OrDefault&#39;), &#39;intervalLengthSumOrDefault&#39;: (&#39;intervalLengthSum&#39;, &#39;OrDefault&#39;), &#39;groupArrayMovingSumOrDefault&#39;: (&#39;groupArrayMovingSum&#39;, &#39;OrDefault&#39;), &#39;mannWhitneyUTestOrDefault&#39;: (&#39;mannWhitneyUTest&#39;, &#39;OrDefault&#39;), &#39;uniqCombined64OrDefault&#39;: (&#39;uniqCombined64&#39;, &#39;OrDefault&#39;), &#39;stddevSampOrDefault&#39;: (&#39;stddevSamp&#39;, &#39;OrDefault&#39;), &#39;skewSampOrDefault&#39;: (&#39;skewSamp&#39;, &#39;OrDefault&#39;), &#39;quantilesTDigestOrDefault&#39;: (&#39;quantilesTDigest&#39;, &#39;OrDefault&#39;), &#39;groupArrayOrDefault&#39;: (&#39;groupArray&#39;, &#39;OrDefault&#39;), &#39;groupBitmapAndOrDefault&#39;: (&#39;groupBitmapAnd&#39;, &#39;OrDefault&#39;), &#39;minOrDefault&#39;: (&#39;min&#39;, &#39;OrDefault&#39;), &#39;quantilesOrDefault&#39;: (&#39;quantiles&#39;, &#39;OrDefault&#39;), &#39;theilsUOrDefault&#39;: (&#39;theilsU&#39;, &#39;OrDefault&#39;), &#39;anyLastOrDefault&#39;: (&#39;anyLast&#39;, &#39;OrDefault&#39;), &#39;quantileTDigestOrDefault&#39;: (&#39;quantileTDigest&#39;, &#39;OrDefault&#39;), &#39;meanZTestOrDefault&#39;: (&#39;meanZTest&#39;, &#39;OrDefault&#39;), &#39;anyHeavyOrDefault&#39;: (&#39;anyHeavy&#39;, &#39;OrDefault&#39;), &#39;sumOrDefault&#39;: (&#39;sum&#39;, &#39;OrDefault&#39;), &#39;quantileTDigestWeightedOrDefault&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;OrDefault&#39;), &#39;quantileTimingOrDefault&#39;: (&#39;quantileTiming&#39;, &#39;OrDefault&#39;), &#39;covarPopOrDefault&#39;: (&#39;covarPop&#39;, &#39;OrDefault&#39;), &#39;groupUniqArrayOrDefault&#39;: (&#39;groupUniqArray&#39;, &#39;OrDefault&#39;), &#39;first_valueOrDefault&#39;: (&#39;first_value&#39;, &#39;OrDefault&#39;), &#39;uniqHLL12OrDefault&#39;: (&#39;uniqHLL12&#39;, &#39;OrDefault&#39;), &#39;sumMapOrDefault&#39;: (&#39;sumMap&#39;, &#39;OrDefault&#39;), &#39;quantilesTimingOrDefault&#39;: (&#39;quantilesTiming&#39;, &#39;OrDefault&#39;), &#39;anyOrDefault&#39;: (&#39;any&#39;, &#39;OrDefault&#39;), &#39;contingencyOrDefault&#39;: (&#39;contingency&#39;, &#39;OrDefault&#39;), &#39;largestTriangleThreeBucketsOrDefault&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;OrDefault&#39;), &#39;groupBitmapXorOrDefault&#39;: (&#39;groupBitmapXor&#39;, &#39;OrDefault&#39;), &#39;argMaxOrDefault&#39;: (&#39;argMax&#39;, &#39;OrDefault&#39;), &#39;groupArrayLastOrDefault&#39;: (&#39;groupArrayLast&#39;, &#39;OrDefault&#39;), &#39;quantilesExactWeightedOrDefault&#39;: (&#39;quantilesExactWeighted&#39;, &#39;OrDefault&#39;), &#39;quantilesExactLowOrDefault&#39;: (&#39;quantilesExactLow&#39;, &#39;OrDefault&#39;), &#39;medianOrDefault&#39;: (&#39;median&#39;, &#39;OrDefault&#39;), &#39;groupArrayInsertAtOrDefault&#39;: (&#39;groupArrayInsertAt&#39;, &#39;OrDefault&#39;), &#39;varSampOrDefault&#39;: (&#39;varSamp&#39;, &#39;OrDefault&#39;), &#39;categoricalInformationValueOrDefault&#39;: (&#39;categoricalInformationValue&#39;, &#39;OrDefault&#39;), &#39;groupBitAndOrDefault&#39;: (&#39;groupBitAnd&#39;, &#39;OrDefault&#39;), &#39;deltaSumTimestampOrDefault&#39;: (&#39;deltaSumTimestamp&#39;, &#39;OrDefault&#39;), &#39;covarSampOrDefault&#39;: (&#39;covarSamp&#39;, &#39;OrDefault&#39;), &#39;quantilesBFloat16WeightedOrDefault&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;OrDefault&#39;), &#39;studentTTestOrDefault&#39;: (&#39;studentTTest&#39;, &#39;OrDefault&#39;), &#39;avgOrDefault&#39;: (&#39;avg&#39;, &#39;OrDefault&#39;), &#39;maxOrDefault&#39;: (&#39;max&#39;, &#39;OrDefault&#39;), &#39;avgWeightedOrDefault&#39;: (&#39;avgWeighted&#39;, &#39;OrDefault&#39;), &#39;groupBitmapOrDefault&#39;: (&#39;groupBitmap&#39;, &#39;OrDefault&#39;), &#39;groupBitmapOrOrDefault&#39;: (&#39;groupBitmapOr&#39;, &#39;OrDefault&#39;), &#39;entropyOrDefault&#39;: (&#39;entropy&#39;, &#39;OrDefault&#39;), &#39;uniqCombinedOrDefault&#39;: (&#39;uniqCombined&#39;, &#39;OrDefault&#39;), &#39;deltaSumOrDefault&#39;: (&#39;deltaSum&#39;, &#39;OrDefault&#39;), &#39;quantilesDeterministicOrDefault&#39;: (&#39;quantilesDeterministic&#39;, &#39;OrDefault&#39;), &#39;sumKahanOrNull&#39;: (&#39;sumKahan&#39;, &#39;OrNull&#39;), &#39;uniqOrNull&#39;: (&#39;uniq&#39;, &#39;OrNull&#39;), &#39;sumWithOverflowOrNull&#39;: (&#39;sumWithOverflow&#39;, &#39;OrNull&#39;), &#39;maxMapOrNull&#39;: (&#39;maxMap&#39;, &#39;OrNull&#39;), &#39;varPopOrNull&#39;: (&#39;varPop&#39;, &#39;OrNull&#39;), &#39;last_valueOrNull&#39;: (&#39;last_value&#39;, &#39;OrNull&#39;), &#39;quantilesInterpolatedWeightedOrNull&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;OrNull&#39;), &#39;quantilesExactOrNull&#39;: (&#39;quantilesExact&#39;, &#39;OrNull&#39;), &#39;quantileBFloat16OrNull&#39;: (&#39;quantileBFloat16&#39;, &#39;OrNull&#39;), &#39;stochasticLogisticRegressionOrNull&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;OrNull&#39;), &#39;rankCorrOrNull&#39;: (&#39;rankCorr&#39;, &#39;OrNull&#39;), &#39;quantileTimingWeightedOrNull&#39;: (&#39;quantileTimingWeighted&#39;, &#39;OrNull&#39;), &#39;simpleLinearRegressionOrNull&#39;: (&#39;simpleLinearRegression&#39;, &#39;OrNull&#39;), &#39;quantilesGKOrNull&#39;: (&#39;quantilesGK&#39;, &#39;OrNull&#39;), &#39;kolmogorovSmirnovTestOrNull&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;OrNull&#39;), &#39;stddevPopOrNull&#39;: (&#39;stddevPop&#39;, &#39;OrNull&#39;), &#39;uniqExactOrNull&#39;: (&#39;uniqExact&#39;, &#39;OrNull&#39;), &#39;sparkBarOrNull&#39;: (&#39;sparkBar&#39;, &#39;OrNull&#39;), &#39;quantilesTDigestWeightedOrNull&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;OrNull&#39;), &#39;kurtSampOrNull&#39;: (&#39;kurtSamp&#39;, &#39;OrNull&#39;), &#39;sumCountOrNull&#39;: (&#39;sumCount&#39;, &#39;OrNull&#39;), &#39;cramersVBiasCorrectedOrNull&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;OrNull&#39;), &#39;quantileExactWeightedOrNull&#39;: (&#39;quantileExactWeighted&#39;, &#39;OrNull&#39;), &#39;quantileInterpolatedWeightedOrNull&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;OrNull&#39;), &#39;kurtPopOrNull&#39;: (&#39;kurtPop&#39;, &#39;OrNull&#39;), &#39;quantileBFloat16WeightedOrNull&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;OrNull&#39;), &#39;groupBitOrOrNull&#39;: (&#39;groupBitOr&#39;, &#39;OrNull&#39;), &#39;boundingRatioOrNull&#39;: (&#39;boundingRatio&#39;, &#39;OrNull&#39;), &#39;skewPopOrNull&#39;: (&#39;skewPop&#39;, &#39;OrNull&#39;), &#39;maxIntersectionsPositionOrNull&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;OrNull&#39;), &#39;quantilesExactHighOrNull&#39;: (&#39;quantilesExactHigh&#39;, &#39;OrNull&#39;), &#39;topKOrNull&#39;: (&#39;topK&#39;, &#39;OrNull&#39;), &#39;maxIntersectionsOrNull&#39;: (&#39;maxIntersections&#39;, &#39;OrNull&#39;), &#39;quantileExactLowOrNull&#39;: (&#39;quantileExactLow&#39;, &#39;OrNull&#39;), &#39;groupArrayMovingAvgOrNull&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;OrNull&#39;), &#39;corrOrNull&#39;: (&#39;corr&#39;, &#39;OrNull&#39;), &#39;quantileDeterministicOrNull&#39;: (&#39;quantileDeterministic&#39;, &#39;OrNull&#39;), &#39;exponentialMovingAverageOrNull&#39;: (&#39;exponentialMovingAverage&#39;, &#39;OrNull&#39;), &#39;quantileExactOrNull&#39;: (&#39;quantileExact&#39;, &#39;OrNull&#39;), &#39;quantilesBFloat16OrNull&#39;: (&#39;quantilesBFloat16&#39;, &#39;OrNull&#39;), &#39;quantileGKOrNull&#39;: (&#39;quantileGK&#39;, &#39;OrNull&#39;), &#39;quantilesTimingWeightedOrNull&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;OrNull&#39;), &#39;minMapOrNull&#39;: (&#39;minMap&#39;, &#39;OrNull&#39;), &#39;quantileOrNull&#39;: (&#39;quantile&#39;, &#39;OrNull&#39;), &#39;welchTTestOrNull&#39;: (&#39;welchTTest&#39;, &#39;OrNull&#39;), &#39;groupArraySampleOrNull&#39;: (&#39;groupArraySample&#39;, &#39;OrNull&#39;), &#39;groupBitXorOrNull&#39;: (&#39;groupBitXor&#39;, &#39;OrNull&#39;), &#39;cramersVOrNull&#39;: (&#39;cramersV&#39;, &#39;OrNull&#39;), &#39;topKWeightedOrNull&#39;: (&#39;topKWeighted&#39;, &#39;OrNull&#39;), &#39;countOrNull&#39;: (&#39;count&#39;, &#39;OrNull&#39;), &#39;quantileExactHighOrNull&#39;: (&#39;quantileExactHigh&#39;, &#39;OrNull&#39;), &#39;argMinOrNull&#39;: (&#39;argMin&#39;, &#39;OrNull&#39;), &#39;stochasticLinearRegressionOrNull&#39;: (&#39;stochasticLinearRegression&#39;, &#39;OrNull&#39;), &#39;uniqThetaOrNull&#39;: (&#39;uniqTheta&#39;, &#39;OrNull&#39;), &#39;intervalLengthSumOrNull&#39;: (&#39;intervalLengthSum&#39;, &#39;OrNull&#39;), &#39;groupArrayMovingSumOrNull&#39;: (&#39;groupArrayMovingSum&#39;, &#39;OrNull&#39;), &#39;mannWhitneyUTestOrNull&#39;: (&#39;mannWhitneyUTest&#39;, &#39;OrNull&#39;), &#39;uniqCombined64OrNull&#39;: (&#39;uniqCombined64&#39;, &#39;OrNull&#39;), &#39;stddevSampOrNull&#39;: (&#39;stddevSamp&#39;, &#39;OrNull&#39;), &#39;skewSampOrNull&#39;: (&#39;skewSamp&#39;, &#39;OrNull&#39;), &#39;quantilesTDigestOrNull&#39;: (&#39;quantilesTDigest&#39;, &#39;OrNull&#39;), &#39;groupArrayOrNull&#39;: (&#39;groupArray&#39;, &#39;OrNull&#39;), &#39;groupBitmapAndOrNull&#39;: (&#39;groupBitmapAnd&#39;, &#39;OrNull&#39;), &#39;minOrNull&#39;: (&#39;min&#39;, &#39;OrNull&#39;), &#39;quantilesOrNull&#39;: (&#39;quantiles&#39;, &#39;OrNull&#39;), &#39;theilsUOrNull&#39;: (&#39;theilsU&#39;, &#39;OrNull&#39;), &#39;anyLastOrNull&#39;: (&#39;anyLast&#39;, &#39;OrNull&#39;), &#39;quantileTDigestOrNull&#39;: (&#39;quantileTDigest&#39;, &#39;OrNull&#39;), &#39;meanZTestOrNull&#39;: (&#39;meanZTest&#39;, &#39;OrNull&#39;), &#39;anyHeavyOrNull&#39;: (&#39;anyHeavy&#39;, &#39;OrNull&#39;), &#39;sumOrNull&#39;: (&#39;sum&#39;, &#39;OrNull&#39;), &#39;quantileTDigestWeightedOrNull&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;OrNull&#39;), &#39;quantileTimingOrNull&#39;: (&#39;quantileTiming&#39;, &#39;OrNull&#39;), &#39;covarPopOrNull&#39;: (&#39;covarPop&#39;, &#39;OrNull&#39;), &#39;groupUniqArrayOrNull&#39;: (&#39;groupUniqArray&#39;, &#39;OrNull&#39;), &#39;first_valueOrNull&#39;: (&#39;first_value&#39;, &#39;OrNull&#39;), &#39;uniqHLL12OrNull&#39;: (&#39;uniqHLL12&#39;, &#39;OrNull&#39;), &#39;sumMapOrNull&#39;: (&#39;sumMap&#39;, &#39;OrNull&#39;), &#39;quantilesTimingOrNull&#39;: (&#39;quantilesTiming&#39;, &#39;OrNull&#39;), &#39;anyOrNull&#39;: (&#39;any&#39;, &#39;OrNull&#39;), &#39;contingencyOrNull&#39;: (&#39;contingency&#39;, &#39;OrNull&#39;), &#39;largestTriangleThreeBucketsOrNull&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;OrNull&#39;), &#39;groupBitmapXorOrNull&#39;: (&#39;groupBitmapXor&#39;, &#39;OrNull&#39;), &#39;argMaxOrNull&#39;: (&#39;argMax&#39;, &#39;OrNull&#39;), &#39;groupArrayLastOrNull&#39;: (&#39;groupArrayLast&#39;, &#39;OrNull&#39;), &#39;quantilesExactWeightedOrNull&#39;: (&#39;quantilesExactWeighted&#39;, &#39;OrNull&#39;), &#39;quantilesExactLowOrNull&#39;: (&#39;quantilesExactLow&#39;, &#39;OrNull&#39;), &#39;medianOrNull&#39;: (&#39;median&#39;, &#39;OrNull&#39;), &#39;groupArrayInsertAtOrNull&#39;: (&#39;groupArrayInsertAt&#39;, &#39;OrNull&#39;), &#39;varSampOrNull&#39;: (&#39;varSamp&#39;, &#39;OrNull&#39;), &#39;categoricalInformationValueOrNull&#39;: (&#39;categoricalInformationValue&#39;, &#39;OrNull&#39;), &#39;groupBitAndOrNull&#39;: (&#39;groupBitAnd&#39;, &#39;OrNull&#39;), &#39;deltaSumTimestampOrNull&#39;: (&#39;deltaSumTimestamp&#39;, &#39;OrNull&#39;), &#39;covarSampOrNull&#39;: (&#39;covarSamp&#39;, &#39;OrNull&#39;), &#39;quantilesBFloat16WeightedOrNull&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;OrNull&#39;), &#39;studentTTestOrNull&#39;: (&#39;studentTTest&#39;, &#39;OrNull&#39;), &#39;avgOrNull&#39;: (&#39;avg&#39;, &#39;OrNull&#39;), &#39;maxOrNull&#39;: (&#39;max&#39;, &#39;OrNull&#39;), &#39;avgWeightedOrNull&#39;: (&#39;avgWeighted&#39;, &#39;OrNull&#39;), &#39;groupBitmapOrNull&#39;: (&#39;groupBitmap&#39;, &#39;OrNull&#39;), &#39;groupBitmapOrOrNull&#39;: (&#39;groupBitmapOr&#39;, &#39;OrNull&#39;), &#39;entropyOrNull&#39;: (&#39;entropy&#39;, &#39;OrNull&#39;), &#39;uniqCombinedOrNull&#39;: (&#39;uniqCombined&#39;, &#39;OrNull&#39;), &#39;deltaSumOrNull&#39;: (&#39;deltaSum&#39;, &#39;OrNull&#39;), &#39;quantilesDeterministicOrNull&#39;: (&#39;quantilesDeterministic&#39;, &#39;OrNull&#39;), &#39;sumKahanResample&#39;: (&#39;sumKahan&#39;, &#39;Resample&#39;), &#39;uniqResample&#39;: (&#39;uniq&#39;, &#39;Resample&#39;), &#39;sumWithOverflowResample&#39;: (&#39;sumWithOverflow&#39;, &#39;Resample&#39;), &#39;maxMapResample&#39;: (&#39;maxMap&#39;, &#39;Resample&#39;), &#39;varPopResample&#39;: (&#39;varPop&#39;, &#39;Resample&#39;), &#39;last_valueResample&#39;: (&#39;last_value&#39;, &#39;Resample&#39;), &#39;quantilesInterpolatedWeightedResample&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Resample&#39;), &#39;quantilesExactResample&#39;: (&#39;quantilesExact&#39;, &#39;Resample&#39;), &#39;quantileBFloat16Resample&#39;: (&#39;quantileBFloat16&#39;, &#39;Resample&#39;), &#39;stochasticLogisticRegressionResample&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Resample&#39;), &#39;rankCorrResample&#39;: (&#39;rankCorr&#39;, &#39;Resample&#39;), &#39;quantileTimingWeightedResample&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Resample&#39;), &#39;simpleLinearRegressionResample&#39;: (&#39;simpleLinearRegression&#39;, &#39;Resample&#39;), &#39;quantilesGKResample&#39;: (&#39;quantilesGK&#39;, &#39;Resample&#39;), &#39;kolmogorovSmirnovTestResample&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Resample&#39;), &#39;stddevPopResample&#39;: (&#39;stddevPop&#39;, &#39;Resample&#39;), &#39;uniqExactResample&#39;: (&#39;uniqExact&#39;, &#39;Resample&#39;), &#39;sparkBarResample&#39;: (&#39;sparkBar&#39;, &#39;Resample&#39;), &#39;quantilesTDigestWeightedResample&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Resample&#39;), &#39;kurtSampResample&#39;: (&#39;kurtSamp&#39;, &#39;Resample&#39;), &#39;sumCountResample&#39;: (&#39;sumCount&#39;, &#39;Resample&#39;), &#39;cramersVBiasCorrectedResample&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Resample&#39;), &#39;quantileExactWeightedResample&#39;: (&#39;quantileExactWeighted&#39;, &#39;Resample&#39;), &#39;quantileInterpolatedWeightedResample&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Resample&#39;), &#39;kurtPopResample&#39;: (&#39;kurtPop&#39;, &#39;Resample&#39;), &#39;quantileBFloat16WeightedResample&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Resample&#39;), &#39;groupBitOrResample&#39;: (&#39;groupBitOr&#39;, &#39;Resample&#39;), &#39;boundingRatioResample&#39;: (&#39;boundingRatio&#39;, &#39;Resample&#39;), &#39;skewPopResample&#39;: (&#39;skewPop&#39;, &#39;Resample&#39;), &#39;maxIntersectionsPositionResample&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Resample&#39;), &#39;quantilesExactHighResample&#39;: (&#39;quantilesExactHigh&#39;, &#39;Resample&#39;), &#39;topKResample&#39;: (&#39;topK&#39;, &#39;Resample&#39;), &#39;maxIntersectionsResample&#39;: (&#39;maxIntersections&#39;, &#39;Resample&#39;), &#39;quantileExactLowResample&#39;: (&#39;quantileExactLow&#39;, &#39;Resample&#39;), &#39;groupArrayMovingAvgResample&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Resample&#39;), &#39;corrResample&#39;: (&#39;corr&#39;, &#39;Resample&#39;), &#39;quantileDeterministicResample&#39;: (&#39;quantileDeterministic&#39;, &#39;Resample&#39;), &#39;exponentialMovingAverageResample&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Resample&#39;), &#39;quantileExactResample&#39;: (&#39;quantileExact&#39;, &#39;Resample&#39;), &#39;quantilesBFloat16Resample&#39;: (&#39;quantilesBFloat16&#39;, &#39;Resample&#39;), &#39;quantileGKResample&#39;: (&#39;quantileGK&#39;, &#39;Resample&#39;), &#39;quantilesTimingWeightedResample&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Resample&#39;), &#39;minMapResample&#39;: (&#39;minMap&#39;, &#39;Resample&#39;), &#39;quantileResample&#39;: (&#39;quantile&#39;, &#39;Resample&#39;), &#39;welchTTestResample&#39;: (&#39;welchTTest&#39;, &#39;Resample&#39;), &#39;groupArraySampleResample&#39;: (&#39;groupArraySample&#39;, &#39;Resample&#39;), &#39;groupBitXorResample&#39;: (&#39;groupBitXor&#39;, &#39;Resample&#39;), &#39;cramersVResample&#39;: (&#39;cramersV&#39;, &#39;Resample&#39;), &#39;topKWeightedResample&#39;: (&#39;topKWeighted&#39;, &#39;Resample&#39;), &#39;countResample&#39;: (&#39;count&#39;, &#39;Resample&#39;), &#39;quantileExactHighResample&#39;: (&#39;quantileExactHigh&#39;, &#39;Resample&#39;), &#39;argMinResample&#39;: (&#39;argMin&#39;, &#39;Resample&#39;), &#39;stochasticLinearRegressionResample&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Resample&#39;), &#39;uniqThetaResample&#39;: (&#39;uniqTheta&#39;, &#39;Resample&#39;), &#39;intervalLengthSumResample&#39;: (&#39;intervalLengthSum&#39;, &#39;Resample&#39;), &#39;groupArrayMovingSumResample&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Resample&#39;), &#39;mannWhitneyUTestResample&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Resample&#39;), &#39;uniqCombined64Resample&#39;: (&#39;uniqCombined64&#39;, &#39;Resample&#39;), &#39;stddevSampResample&#39;: (&#39;stddevSamp&#39;, &#39;Resample&#39;), &#39;skewSampResample&#39;: (&#39;skewSamp&#39;, &#39;Resample&#39;), &#39;quantilesTDigestResample&#39;: (&#39;quantilesTDigest&#39;, &#39;Resample&#39;), &#39;groupArrayResample&#39;: (&#39;groupArray&#39;, &#39;Resample&#39;), &#39;groupBitmapAndResample&#39;: (&#39;groupBitmapAnd&#39;, &#39;Resample&#39;), &#39;minResample&#39;: (&#39;min&#39;, &#39;Resample&#39;), &#39;quantilesResample&#39;: (&#39;quantiles&#39;, &#39;Resample&#39;), &#39;theilsUResample&#39;: (&#39;theilsU&#39;, &#39;Resample&#39;), &#39;anyLastResample&#39;: (&#39;anyLast&#39;, &#39;Resample&#39;), &#39;quantileTDigestResample&#39;: (&#39;quantileTDigest&#39;, &#39;Resample&#39;), &#39;meanZTestResample&#39;: (&#39;meanZTest&#39;, &#39;Resample&#39;), &#39;anyHeavyResample&#39;: (&#39;anyHeavy&#39;, &#39;Resample&#39;), &#39;sumResample&#39;: (&#39;sum&#39;, &#39;Resample&#39;), &#39;quantileTDigestWeightedResample&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Resample&#39;), &#39;quantileTimingResample&#39;: (&#39;quantileTiming&#39;, &#39;Resample&#39;), &#39;covarPopResample&#39;: (&#39;covarPop&#39;, &#39;Resample&#39;), &#39;groupUniqArrayResample&#39;: (&#39;groupUniqArray&#39;, &#39;Resample&#39;), &#39;first_valueResample&#39;: (&#39;first_value&#39;, &#39;Resample&#39;), &#39;uniqHLL12Resample&#39;: (&#39;uniqHLL12&#39;, &#39;Resample&#39;), &#39;sumMapResample&#39;: (&#39;sumMap&#39;, &#39;Resample&#39;), &#39;quantilesTimingResample&#39;: (&#39;quantilesTiming&#39;, &#39;Resample&#39;), &#39;anyResample&#39;: (&#39;any&#39;, &#39;Resample&#39;), &#39;contingencyResample&#39;: (&#39;contingency&#39;, &#39;Resample&#39;), &#39;largestTriangleThreeBucketsResample&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Resample&#39;), &#39;groupBitmapXorResample&#39;: (&#39;groupBitmapXor&#39;, &#39;Resample&#39;), &#39;argMaxResample&#39;: (&#39;argMax&#39;, &#39;Resample&#39;), &#39;groupArrayLastResample&#39;: (&#39;groupArrayLast&#39;, &#39;Resample&#39;), &#39;quantilesExactWeightedResample&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Resample&#39;), &#39;quantilesExactLowResample&#39;: (&#39;quantilesExactLow&#39;, &#39;Resample&#39;), &#39;medianResample&#39;: (&#39;median&#39;, &#39;Resample&#39;), &#39;groupArrayInsertAtResample&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Resample&#39;), &#39;varSampResample&#39;: (&#39;varSamp&#39;, &#39;Resample&#39;), &#39;categoricalInformationValueResample&#39;: (&#39;categoricalInformationValue&#39;, &#39;Resample&#39;), &#39;groupBitAndResample&#39;: (&#39;groupBitAnd&#39;, &#39;Resample&#39;), &#39;deltaSumTimestampResample&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Resample&#39;), &#39;covarSampResample&#39;: (&#39;covarSamp&#39;, &#39;Resample&#39;), &#39;quantilesBFloat16WeightedResample&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Resample&#39;), &#39;studentTTestResample&#39;: (&#39;studentTTest&#39;, &#39;Resample&#39;), &#39;avgResample&#39;: (&#39;avg&#39;, &#39;Resample&#39;), &#39;maxResample&#39;: (&#39;max&#39;, &#39;Resample&#39;), &#39;avgWeightedResample&#39;: (&#39;avgWeighted&#39;, &#39;Resample&#39;), &#39;groupBitmapResample&#39;: (&#39;groupBitmap&#39;, &#39;Resample&#39;), &#39;groupBitmapOrResample&#39;: (&#39;groupBitmapOr&#39;, &#39;Resample&#39;), &#39;entropyResample&#39;: (&#39;entropy&#39;, &#39;Resample&#39;), &#39;uniqCombinedResample&#39;: (&#39;uniqCombined&#39;, &#39;Resample&#39;), &#39;deltaSumResample&#39;: (&#39;deltaSum&#39;, &#39;Resample&#39;), &#39;quantilesDeterministicResample&#39;: (&#39;quantilesDeterministic&#39;, &#39;Resample&#39;), &#39;sumKahanArgMin&#39;: (&#39;sumKahan&#39;, &#39;ArgMin&#39;), &#39;uniqArgMin&#39;: (&#39;uniq&#39;, &#39;ArgMin&#39;), &#39;sumWithOverflowArgMin&#39;: (&#39;sumWithOverflow&#39;, &#39;ArgMin&#39;), &#39;maxMapArgMin&#39;: (&#39;maxMap&#39;, &#39;ArgMin&#39;), &#39;varPopArgMin&#39;: (&#39;varPop&#39;, &#39;ArgMin&#39;), &#39;last_valueArgMin&#39;: (&#39;last_value&#39;, &#39;ArgMin&#39;), &#39;quantilesInterpolatedWeightedArgMin&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ArgMin&#39;), &#39;quantilesExactArgMin&#39;: (&#39;quantilesExact&#39;, &#39;ArgMin&#39;), &#39;quantileBFloat16ArgMin&#39;: (&#39;quantileBFloat16&#39;, &#39;ArgMin&#39;), &#39;stochasticLogisticRegressionArgMin&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ArgMin&#39;), &#39;rankCorrArgMin&#39;: (&#39;rankCorr&#39;, &#39;ArgMin&#39;), &#39;quantileTimingWeightedArgMin&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ArgMin&#39;), &#39;simpleLinearRegressionArgMin&#39;: (&#39;simpleLinearRegression&#39;, &#39;ArgMin&#39;), &#39;quantilesGKArgMin&#39;: (&#39;quantilesGK&#39;, &#39;ArgMin&#39;), &#39;kolmogorovSmirnovTestArgMin&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ArgMin&#39;), &#39;stddevPopArgMin&#39;: (&#39;stddevPop&#39;, &#39;ArgMin&#39;), &#39;uniqExactArgMin&#39;: (&#39;uniqExact&#39;, &#39;ArgMin&#39;), &#39;sparkBarArgMin&#39;: (&#39;sparkBar&#39;, &#39;ArgMin&#39;), &#39;quantilesTDigestWeightedArgMin&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ArgMin&#39;), &#39;kurtSampArgMin&#39;: (&#39;kurtSamp&#39;, &#39;ArgMin&#39;), &#39;sumCountArgMin&#39;: (&#39;sumCount&#39;, &#39;ArgMin&#39;), &#39;cramersVBiasCorrectedArgMin&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ArgMin&#39;), &#39;quantileExactWeightedArgMin&#39;: (&#39;quantileExactWeighted&#39;, &#39;ArgMin&#39;), &#39;quantileInterpolatedWeightedArgMin&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ArgMin&#39;), &#39;kurtPopArgMin&#39;: (&#39;kurtPop&#39;, &#39;ArgMin&#39;), &#39;quantileBFloat16WeightedArgMin&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ArgMin&#39;), &#39;groupBitOrArgMin&#39;: (&#39;groupBitOr&#39;, &#39;ArgMin&#39;), &#39;boundingRatioArgMin&#39;: (&#39;boundingRatio&#39;, &#39;ArgMin&#39;), &#39;skewPopArgMin&#39;: (&#39;skewPop&#39;, &#39;ArgMin&#39;), &#39;maxIntersectionsPositionArgMin&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ArgMin&#39;), &#39;quantilesExactHighArgMin&#39;: (&#39;quantilesExactHigh&#39;, &#39;ArgMin&#39;), &#39;topKArgMin&#39;: (&#39;topK&#39;, &#39;ArgMin&#39;), &#39;maxIntersectionsArgMin&#39;: (&#39;maxIntersections&#39;, &#39;ArgMin&#39;), &#39;quantileExactLowArgMin&#39;: (&#39;quantileExactLow&#39;, &#39;ArgMin&#39;), &#39;groupArrayMovingAvgArgMin&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ArgMin&#39;), &#39;corrArgMin&#39;: (&#39;corr&#39;, &#39;ArgMin&#39;), &#39;quantileDeterministicArgMin&#39;: (&#39;quantileDeterministic&#39;, &#39;ArgMin&#39;), &#39;exponentialMovingAverageArgMin&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ArgMin&#39;), &#39;quantileExactArgMin&#39;: (&#39;quantileExact&#39;, &#39;ArgMin&#39;), &#39;quantilesBFloat16ArgMin&#39;: (&#39;quantilesBFloat16&#39;, &#39;ArgMin&#39;), &#39;quantileGKArgMin&#39;: (&#39;quantileGK&#39;, &#39;ArgMin&#39;), &#39;quantilesTimingWeightedArgMin&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ArgMin&#39;), &#39;minMapArgMin&#39;: (&#39;minMap&#39;, &#39;ArgMin&#39;), &#39;quantileArgMin&#39;: (&#39;quantile&#39;, &#39;ArgMin&#39;), &#39;welchTTestArgMin&#39;: (&#39;welchTTest&#39;, &#39;ArgMin&#39;), &#39;groupArraySampleArgMin&#39;: (&#39;groupArraySample&#39;, &#39;ArgMin&#39;), &#39;groupBitXorArgMin&#39;: (&#39;groupBitXor&#39;, &#39;ArgMin&#39;), &#39;cramersVArgMin&#39;: (&#39;cramersV&#39;, &#39;ArgMin&#39;), &#39;topKWeightedArgMin&#39;: (&#39;topKWeighted&#39;, &#39;ArgMin&#39;), &#39;countArgMin&#39;: (&#39;count&#39;, &#39;ArgMin&#39;), &#39;quantileExactHighArgMin&#39;: (&#39;quantileExactHigh&#39;, &#39;ArgMin&#39;), &#39;argMinArgMin&#39;: (&#39;argMin&#39;, &#39;ArgMin&#39;), &#39;stochasticLinearRegressionArgMin&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ArgMin&#39;), &#39;uniqThetaArgMin&#39;: (&#39;uniqTheta&#39;, &#39;ArgMin&#39;), &#39;intervalLengthSumArgMin&#39;: (&#39;intervalLengthSum&#39;, &#39;ArgMin&#39;), &#39;groupArrayMovingSumArgMin&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ArgMin&#39;), &#39;mannWhitneyUTestArgMin&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ArgMin&#39;), &#39;uniqCombined64ArgMin&#39;: (&#39;uniqCombined64&#39;, &#39;ArgMin&#39;), &#39;stddevSampArgMin&#39;: (&#39;stddevSamp&#39;, &#39;ArgMin&#39;), &#39;skewSampArgMin&#39;: (&#39;skewSamp&#39;, &#39;ArgMin&#39;), &#39;quantilesTDigestArgMin&#39;: (&#39;quantilesTDigest&#39;, &#39;ArgMin&#39;), &#39;groupArrayArgMin&#39;: (&#39;groupArray&#39;, &#39;ArgMin&#39;), &#39;groupBitmapAndArgMin&#39;: (&#39;groupBitmapAnd&#39;, &#39;ArgMin&#39;), &#39;minArgMin&#39;: (&#39;min&#39;, &#39;ArgMin&#39;), &#39;quantilesArgMin&#39;: (&#39;quantiles&#39;, &#39;ArgMin&#39;), &#39;theilsUArgMin&#39;: (&#39;theilsU&#39;, &#39;ArgMin&#39;), &#39;anyLastArgMin&#39;: (&#39;anyLast&#39;, &#39;ArgMin&#39;), &#39;quantileTDigestArgMin&#39;: (&#39;quantileTDigest&#39;, &#39;ArgMin&#39;), &#39;meanZTestArgMin&#39;: (&#39;meanZTest&#39;, &#39;ArgMin&#39;), &#39;anyHeavyArgMin&#39;: (&#39;anyHeavy&#39;, &#39;ArgMin&#39;), &#39;sumArgMin&#39;: (&#39;sum&#39;, &#39;ArgMin&#39;), &#39;quantileTDigestWeightedArgMin&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ArgMin&#39;), &#39;quantileTimingArgMin&#39;: (&#39;quantileTiming&#39;, &#39;ArgMin&#39;), &#39;covarPopArgMin&#39;: (&#39;covarPop&#39;, &#39;ArgMin&#39;), &#39;groupUniqArrayArgMin&#39;: (&#39;groupUniqArray&#39;, &#39;ArgMin&#39;), &#39;first_valueArgMin&#39;: (&#39;first_value&#39;, &#39;ArgMin&#39;), &#39;uniqHLL12ArgMin&#39;: (&#39;uniqHLL12&#39;, &#39;ArgMin&#39;), &#39;sumMapArgMin&#39;: (&#39;sumMap&#39;, &#39;ArgMin&#39;), &#39;quantilesTimingArgMin&#39;: (&#39;quantilesTiming&#39;, &#39;ArgMin&#39;), &#39;anyArgMin&#39;: (&#39;any&#39;, &#39;ArgMin&#39;), &#39;contingencyArgMin&#39;: (&#39;contingency&#39;, &#39;ArgMin&#39;), &#39;largestTriangleThreeBucketsArgMin&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ArgMin&#39;), &#39;groupBitmapXorArgMin&#39;: (&#39;groupBitmapXor&#39;, &#39;ArgMin&#39;), &#39;argMaxArgMin&#39;: (&#39;argMax&#39;, &#39;ArgMin&#39;), &#39;groupArrayLastArgMin&#39;: (&#39;groupArrayLast&#39;, &#39;ArgMin&#39;), &#39;quantilesExactWeightedArgMin&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ArgMin&#39;), &#39;quantilesExactLowArgMin&#39;: (&#39;quantilesExactLow&#39;, &#39;ArgMin&#39;), &#39;medianArgMin&#39;: (&#39;median&#39;, &#39;ArgMin&#39;), &#39;groupArrayInsertAtArgMin&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ArgMin&#39;), &#39;varSampArgMin&#39;: (&#39;varSamp&#39;, &#39;ArgMin&#39;), &#39;categoricalInformationValueArgMin&#39;: (&#39;categoricalInformationValue&#39;, &#39;ArgMin&#39;), &#39;groupBitAndArgMin&#39;: (&#39;groupBitAnd&#39;, &#39;ArgMin&#39;), &#39;deltaSumTimestampArgMin&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ArgMin&#39;), &#39;covarSampArgMin&#39;: (&#39;covarSamp&#39;, &#39;ArgMin&#39;), &#39;quantilesBFloat16WeightedArgMin&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ArgMin&#39;), &#39;studentTTestArgMin&#39;: (&#39;studentTTest&#39;, &#39;ArgMin&#39;), &#39;avgArgMin&#39;: (&#39;avg&#39;, &#39;ArgMin&#39;), &#39;maxArgMin&#39;: (&#39;max&#39;, &#39;ArgMin&#39;), &#39;avgWeightedArgMin&#39;: (&#39;avgWeighted&#39;, &#39;ArgMin&#39;), &#39;groupBitmapArgMin&#39;: (&#39;groupBitmap&#39;, &#39;ArgMin&#39;), &#39;groupBitmapOrArgMin&#39;: (&#39;groupBitmapOr&#39;, &#39;ArgMin&#39;), &#39;entropyArgMin&#39;: (&#39;entropy&#39;, &#39;ArgMin&#39;), &#39;uniqCombinedArgMin&#39;: (&#39;uniqCombined&#39;, &#39;ArgMin&#39;), &#39;deltaSumArgMin&#39;: (&#39;deltaSum&#39;, &#39;ArgMin&#39;), &#39;quantilesDeterministicArgMin&#39;: (&#39;quantilesDeterministic&#39;, &#39;ArgMin&#39;), &#39;sumKahanArgMax&#39;: (&#39;sumKahan&#39;, &#39;ArgMax&#39;), &#39;uniqArgMax&#39;: (&#39;uniq&#39;, &#39;ArgMax&#39;), &#39;sumWithOverflowArgMax&#39;: (&#39;sumWithOverflow&#39;, &#39;ArgMax&#39;), &#39;maxMapArgMax&#39;: (&#39;maxMap&#39;, &#39;ArgMax&#39;), &#39;varPopArgMax&#39;: (&#39;varPop&#39;, &#39;ArgMax&#39;), &#39;last_valueArgMax&#39;: (&#39;last_value&#39;, &#39;ArgMax&#39;), &#39;quantilesInterpolatedWeightedArgMax&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ArgMax&#39;), &#39;quantilesExactArgMax&#39;: (&#39;quantilesExact&#39;, &#39;ArgMax&#39;), &#39;quantileBFloat16ArgMax&#39;: (&#39;quantileBFloat16&#39;, &#39;ArgMax&#39;), &#39;stochasticLogisticRegressionArgMax&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ArgMax&#39;), &#39;rankCorrArgMax&#39;: (&#39;rankCorr&#39;, &#39;ArgMax&#39;), &#39;quantileTimingWeightedArgMax&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ArgMax&#39;), &#39;simpleLinearRegressionArgMax&#39;: (&#39;simpleLinearRegression&#39;, &#39;ArgMax&#39;), &#39;quantilesGKArgMax&#39;: (&#39;quantilesGK&#39;, &#39;ArgMax&#39;), &#39;kolmogorovSmirnovTestArgMax&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ArgMax&#39;), &#39;stddevPopArgMax&#39;: (&#39;stddevPop&#39;, &#39;ArgMax&#39;), &#39;uniqExactArgMax&#39;: (&#39;uniqExact&#39;, &#39;ArgMax&#39;), &#39;sparkBarArgMax&#39;: (&#39;sparkBar&#39;, &#39;ArgMax&#39;), &#39;quantilesTDigestWeightedArgMax&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ArgMax&#39;), &#39;kurtSampArgMax&#39;: (&#39;kurtSamp&#39;, &#39;ArgMax&#39;), &#39;sumCountArgMax&#39;: (&#39;sumCount&#39;, &#39;ArgMax&#39;), &#39;cramersVBiasCorrectedArgMax&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ArgMax&#39;), &#39;quantileExactWeightedArgMax&#39;: (&#39;quantileExactWeighted&#39;, &#39;ArgMax&#39;), &#39;quantileInterpolatedWeightedArgMax&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ArgMax&#39;), &#39;kurtPopArgMax&#39;: (&#39;kurtPop&#39;, &#39;ArgMax&#39;), &#39;quantileBFloat16WeightedArgMax&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ArgMax&#39;), &#39;groupBitOrArgMax&#39;: (&#39;groupBitOr&#39;, &#39;ArgMax&#39;), &#39;boundingRatioArgMax&#39;: (&#39;boundingRatio&#39;, &#39;ArgMax&#39;), &#39;skewPopArgMax&#39;: (&#39;skewPop&#39;, &#39;ArgMax&#39;), &#39;maxIntersectionsPositionArgMax&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ArgMax&#39;), &#39;quantilesExactHighArgMax&#39;: (&#39;quantilesExactHigh&#39;, &#39;ArgMax&#39;), &#39;topKArgMax&#39;: (&#39;topK&#39;, &#39;ArgMax&#39;), &#39;maxIntersectionsArgMax&#39;: (&#39;maxIntersections&#39;, &#39;ArgMax&#39;), &#39;quantileExactLowArgMax&#39;: (&#39;quantileExactLow&#39;, &#39;ArgMax&#39;), &#39;groupArrayMovingAvgArgMax&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ArgMax&#39;), &#39;corrArgMax&#39;: (&#39;corr&#39;, &#39;ArgMax&#39;), &#39;quantileDeterministicArgMax&#39;: (&#39;quantileDeterministic&#39;, &#39;ArgMax&#39;), &#39;exponentialMovingAverageArgMax&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ArgMax&#39;), &#39;quantileExactArgMax&#39;: (&#39;quantileExact&#39;, &#39;ArgMax&#39;), &#39;quantilesBFloat16ArgMax&#39;: (&#39;quantilesBFloat16&#39;, &#39;ArgMax&#39;), &#39;quantileGKArgMax&#39;: (&#39;quantileGK&#39;, &#39;ArgMax&#39;), &#39;quantilesTimingWeightedArgMax&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ArgMax&#39;), &#39;minMapArgMax&#39;: (&#39;minMap&#39;, &#39;ArgMax&#39;), &#39;quantileArgMax&#39;: (&#39;quantile&#39;, &#39;ArgMax&#39;), &#39;welchTTestArgMax&#39;: (&#39;welchTTest&#39;, &#39;ArgMax&#39;), &#39;groupArraySampleArgMax&#39;: (&#39;groupArraySample&#39;, &#39;ArgMax&#39;), &#39;groupBitXorArgMax&#39;: (&#39;groupBitXor&#39;, &#39;ArgMax&#39;), &#39;cramersVArgMax&#39;: (&#39;cramersV&#39;, &#39;ArgMax&#39;), &#39;topKWeightedArgMax&#39;: (&#39;topKWeighted&#39;, &#39;ArgMax&#39;), &#39;countArgMax&#39;: (&#39;count&#39;, &#39;ArgMax&#39;), &#39;quantileExactHighArgMax&#39;: (&#39;quantileExactHigh&#39;, &#39;ArgMax&#39;), &#39;argMinArgMax&#39;: (&#39;argMin&#39;, &#39;ArgMax&#39;), &#39;stochasticLinearRegressionArgMax&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ArgMax&#39;), &#39;uniqThetaArgMax&#39;: (&#39;uniqTheta&#39;, &#39;ArgMax&#39;), &#39;intervalLengthSumArgMax&#39;: (&#39;intervalLengthSum&#39;, &#39;ArgMax&#39;), &#39;groupArrayMovingSumArgMax&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ArgMax&#39;), &#39;mannWhitneyUTestArgMax&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ArgMax&#39;), &#39;uniqCombined64ArgMax&#39;: (&#39;uniqCombined64&#39;, &#39;ArgMax&#39;), &#39;stddevSampArgMax&#39;: (&#39;stddevSamp&#39;, &#39;ArgMax&#39;), &#39;skewSampArgMax&#39;: (&#39;skewSamp&#39;, &#39;ArgMax&#39;), &#39;quantilesTDigestArgMax&#39;: (&#39;quantilesTDigest&#39;, &#39;ArgMax&#39;), &#39;groupArrayArgMax&#39;: (&#39;groupArray&#39;, &#39;ArgMax&#39;), &#39;groupBitmapAndArgMax&#39;: (&#39;groupBitmapAnd&#39;, &#39;ArgMax&#39;), &#39;minArgMax&#39;: (&#39;min&#39;, &#39;ArgMax&#39;), &#39;quantilesArgMax&#39;: (&#39;quantiles&#39;, &#39;ArgMax&#39;), &#39;theilsUArgMax&#39;: (&#39;theilsU&#39;, &#39;ArgMax&#39;), &#39;anyLastArgMax&#39;: (&#39;anyLast&#39;, &#39;ArgMax&#39;), &#39;quantileTDigestArgMax&#39;: (&#39;quantileTDigest&#39;, &#39;ArgMax&#39;), &#39;meanZTestArgMax&#39;: (&#39;meanZTest&#39;, &#39;ArgMax&#39;), &#39;anyHeavyArgMax&#39;: (&#39;anyHeavy&#39;, &#39;ArgMax&#39;), &#39;sumArgMax&#39;: (&#39;sum&#39;, &#39;ArgMax&#39;), &#39;quantileTDigestWeightedArgMax&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ArgMax&#39;), &#39;quantileTimingArgMax&#39;: (&#39;quantileTiming&#39;, &#39;ArgMax&#39;), &#39;covarPopArgMax&#39;: (&#39;covarPop&#39;, &#39;ArgMax&#39;), &#39;groupUniqArrayArgMax&#39;: (&#39;groupUniqArray&#39;, &#39;ArgMax&#39;), &#39;first_valueArgMax&#39;: (&#39;first_value&#39;, &#39;ArgMax&#39;), &#39;uniqHLL12ArgMax&#39;: (&#39;uniqHLL12&#39;, &#39;ArgMax&#39;), &#39;sumMapArgMax&#39;: (&#39;sumMap&#39;, &#39;ArgMax&#39;), &#39;quantilesTimingArgMax&#39;: (&#39;quantilesTiming&#39;, &#39;ArgMax&#39;), &#39;anyArgMax&#39;: (&#39;any&#39;, &#39;ArgMax&#39;), &#39;contingencyArgMax&#39;: (&#39;contingency&#39;, &#39;ArgMax&#39;), &#39;largestTriangleThreeBucketsArgMax&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ArgMax&#39;), &#39;groupBitmapXorArgMax&#39;: (&#39;groupBitmapXor&#39;, &#39;ArgMax&#39;), &#39;argMaxArgMax&#39;: (&#39;argMax&#39;, &#39;ArgMax&#39;), &#39;groupArrayLastArgMax&#39;: (&#39;groupArrayLast&#39;, &#39;ArgMax&#39;), &#39;quantilesExactWeightedArgMax&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ArgMax&#39;), &#39;quantilesExactLowArgMax&#39;: (&#39;quantilesExactLow&#39;, &#39;ArgMax&#39;), &#39;medianArgMax&#39;: (&#39;median&#39;, &#39;ArgMax&#39;), &#39;groupArrayInsertAtArgMax&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ArgMax&#39;), &#39;varSampArgMax&#39;: (&#39;varSamp&#39;, &#39;ArgMax&#39;), &#39;categoricalInformationValueArgMax&#39;: (&#39;categoricalInformationValue&#39;, &#39;ArgMax&#39;), &#39;groupBitAndArgMax&#39;: (&#39;groupBitAnd&#39;, &#39;ArgMax&#39;), &#39;deltaSumTimestampArgMax&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ArgMax&#39;), &#39;covarSampArgMax&#39;: (&#39;covarSamp&#39;, &#39;ArgMax&#39;), &#39;quantilesBFloat16WeightedArgMax&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ArgMax&#39;), &#39;studentTTestArgMax&#39;: (&#39;studentTTest&#39;, &#39;ArgMax&#39;), &#39;avgArgMax&#39;: (&#39;avg&#39;, &#39;ArgMax&#39;), &#39;maxArgMax&#39;: (&#39;max&#39;, &#39;ArgMax&#39;), &#39;avgWeightedArgMax&#39;: (&#39;avgWeighted&#39;, &#39;ArgMax&#39;), &#39;groupBitmapArgMax&#39;: (&#39;groupBitmap&#39;, &#39;ArgMax&#39;), &#39;groupBitmapOrArgMax&#39;: (&#39;groupBitmapOr&#39;, &#39;ArgMax&#39;), &#39;entropyArgMax&#39;: (&#39;entropy&#39;, &#39;ArgMax&#39;), &#39;uniqCombinedArgMax&#39;: (&#39;uniqCombined&#39;, &#39;ArgMax&#39;), &#39;deltaSumArgMax&#39;: (&#39;deltaSum&#39;, &#39;ArgMax&#39;), &#39;quantilesDeterministicArgMax&#39;: (&#39;quantilesDeterministic&#39;, &#39;ArgMax&#39;), &#39;sumKahan&#39;: (&#39;sumKahan&#39;, &#39;&#39;), &#39;uniq&#39;: (&#39;uniq&#39;, &#39;&#39;), &#39;sumWithOverflow&#39;: (&#39;sumWithOverflow&#39;, &#39;&#39;), &#39;varPop&#39;: (&#39;varPop&#39;, &#39;&#39;), &#39;last_value&#39;: (&#39;last_value&#39;, &#39;&#39;), &#39;quantilesInterpolatedWeighted&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;&#39;), &#39;quantilesExact&#39;: (&#39;quantilesExact&#39;, &#39;&#39;), &#39;quantileBFloat16&#39;: (&#39;quantileBFloat16&#39;, &#39;&#39;), &#39;stochasticLogisticRegression&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;&#39;), &#39;rankCorr&#39;: (&#39;rankCorr&#39;, &#39;&#39;), &#39;quantileTimingWeighted&#39;: (&#39;quantileTimingWeighted&#39;, &#39;&#39;), &#39;simpleLinearRegression&#39;: (&#39;simpleLinearRegression&#39;, &#39;&#39;), &#39;quantilesGK&#39;: (&#39;quantilesGK&#39;, &#39;&#39;), &#39;kolmogorovSmirnovTest&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;&#39;), &#39;stddevPop&#39;: (&#39;stddevPop&#39;, &#39;&#39;), &#39;uniqExact&#39;: (&#39;uniqExact&#39;, &#39;&#39;), &#39;sparkBar&#39;: (&#39;sparkBar&#39;, &#39;&#39;), &#39;quantilesTDigestWeighted&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;&#39;), &#39;kurtSamp&#39;: (&#39;kurtSamp&#39;, &#39;&#39;), &#39;sumCount&#39;: (&#39;sumCount&#39;, &#39;&#39;), &#39;cramersVBiasCorrected&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;&#39;), &#39;quantileExactWeighted&#39;: (&#39;quantileExactWeighted&#39;, &#39;&#39;), &#39;quantileInterpolatedWeighted&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;&#39;), &#39;kurtPop&#39;: (&#39;kurtPop&#39;, &#39;&#39;), &#39;quantileBFloat16Weighted&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;&#39;), &#39;groupBitOr&#39;: (&#39;groupBitOr&#39;, &#39;&#39;), &#39;boundingRatio&#39;: (&#39;boundingRatio&#39;, &#39;&#39;), &#39;skewPop&#39;: (&#39;skewPop&#39;, &#39;&#39;), &#39;maxIntersectionsPosition&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;&#39;), &#39;quantilesExactHigh&#39;: (&#39;quantilesExactHigh&#39;, &#39;&#39;), &#39;topK&#39;: (&#39;topK&#39;, &#39;&#39;), &#39;maxIntersections&#39;: (&#39;maxIntersections&#39;, &#39;&#39;), &#39;quantileExactLow&#39;: (&#39;quantileExactLow&#39;, &#39;&#39;), &#39;groupArrayMovingAvg&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;&#39;), &#39;corr&#39;: (&#39;corr&#39;, &#39;&#39;), &#39;quantileDeterministic&#39;: (&#39;quantileDeterministic&#39;, &#39;&#39;), &#39;exponentialMovingAverage&#39;: (&#39;exponentialMovingAverage&#39;, &#39;&#39;), &#39;quantileExact&#39;: (&#39;quantileExact&#39;, &#39;&#39;), &#39;quantilesBFloat16&#39;: (&#39;quantilesBFloat16&#39;, &#39;&#39;), &#39;quantileGK&#39;: (&#39;quantileGK&#39;, &#39;&#39;), &#39;quantilesTimingWeighted&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;&#39;), &#39;quantile&#39;: (&#39;quantile&#39;, &#39;&#39;), &#39;welchTTest&#39;: (&#39;welchTTest&#39;, &#39;&#39;), &#39;groupArraySample&#39;: (&#39;groupArraySample&#39;, &#39;&#39;), &#39;groupBitXor&#39;: (&#39;groupBitXor&#39;, &#39;&#39;), &#39;cramersV&#39;: (&#39;cramersV&#39;, &#39;&#39;), &#39;topKWeighted&#39;: (&#39;topKWeighted&#39;, &#39;&#39;), &#39;count&#39;: (&#39;count&#39;, &#39;&#39;), &#39;quantileExactHigh&#39;: (&#39;quantileExactHigh&#39;, &#39;&#39;), &#39;argMin&#39;: (&#39;argMin&#39;, &#39;&#39;), &#39;stochasticLinearRegression&#39;: (&#39;stochasticLinearRegression&#39;, &#39;&#39;), &#39;uniqTheta&#39;: (&#39;uniqTheta&#39;, &#39;&#39;), &#39;intervalLengthSum&#39;: (&#39;intervalLengthSum&#39;, &#39;&#39;), &#39;groupArrayMovingSum&#39;: (&#39;groupArrayMovingSum&#39;, &#39;&#39;), &#39;mannWhitneyUTest&#39;: (&#39;mannWhitneyUTest&#39;, &#39;&#39;), &#39;uniqCombined64&#39;: (&#39;uniqCombined64&#39;, &#39;&#39;), &#39;stddevSamp&#39;: (&#39;stddevSamp&#39;, &#39;&#39;), &#39;skewSamp&#39;: (&#39;skewSamp&#39;, &#39;&#39;), &#39;quantilesTDigest&#39;: (&#39;quantilesTDigest&#39;, &#39;&#39;), &#39;groupArray&#39;: (&#39;groupArray&#39;, &#39;&#39;), &#39;groupBitmapAnd&#39;: (&#39;groupBitmapAnd&#39;, &#39;&#39;), &#39;min&#39;: (&#39;min&#39;, &#39;&#39;), &#39;quantiles&#39;: (&#39;quantiles&#39;, &#39;&#39;), &#39;theilsU&#39;: (&#39;theilsU&#39;, &#39;&#39;), &#39;anyLast&#39;: (&#39;anyLast&#39;, &#39;&#39;), &#39;quantileTDigest&#39;: (&#39;quantileTDigest&#39;, &#39;&#39;), &#39;meanZTest&#39;: (&#39;meanZTest&#39;, &#39;&#39;), &#39;anyHeavy&#39;: (&#39;anyHeavy&#39;, &#39;&#39;), &#39;sum&#39;: (&#39;sum&#39;, &#39;&#39;), &#39;quantileTDigestWeighted&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;&#39;), &#39;quantileTiming&#39;: (&#39;quantileTiming&#39;, &#39;&#39;), &#39;covarPop&#39;: (&#39;covarPop&#39;, &#39;&#39;), &#39;groupUniqArray&#39;: (&#39;groupUniqArray&#39;, &#39;&#39;), &#39;first_value&#39;: (&#39;first_value&#39;, &#39;&#39;), &#39;uniqHLL12&#39;: (&#39;uniqHLL12&#39;, &#39;&#39;), &#39;quantilesTiming&#39;: (&#39;quantilesTiming&#39;, &#39;&#39;), &#39;any&#39;: (&#39;any&#39;, &#39;&#39;), &#39;contingency&#39;: (&#39;contingency&#39;, &#39;&#39;), &#39;largestTriangleThreeBuckets&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;&#39;), &#39;groupBitmapXor&#39;: (&#39;groupBitmapXor&#39;, &#39;&#39;), &#39;argMax&#39;: (&#39;argMax&#39;, &#39;&#39;), &#39;groupArrayLast&#39;: (&#39;groupArrayLast&#39;, &#39;&#39;), &#39;quantilesExactWeighted&#39;: (&#39;quantilesExactWeighted&#39;, &#39;&#39;), &#39;quantilesExactLow&#39;: (&#39;quantilesExactLow&#39;, &#39;&#39;), &#39;median&#39;: (&#39;median&#39;, &#39;&#39;), &#39;groupArrayInsertAt&#39;: (&#39;groupArrayInsertAt&#39;, &#39;&#39;), &#39;varSamp&#39;: (&#39;varSamp&#39;, &#39;&#39;), &#39;categoricalInformationValue&#39;: (&#39;categoricalInformationValue&#39;, &#39;&#39;), &#39;groupBitAnd&#39;: (&#39;groupBitAnd&#39;, &#39;&#39;), &#39;deltaSumTimestamp&#39;: (&#39;deltaSumTimestamp&#39;, &#39;&#39;), &#39;covarSamp&#39;: (&#39;covarSamp&#39;, &#39;&#39;), &#39;quantilesBFloat16Weighted&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;&#39;), &#39;studentTTest&#39;: (&#39;studentTTest&#39;, &#39;&#39;), &#39;avg&#39;: (&#39;avg&#39;, &#39;&#39;), &#39;max&#39;: (&#39;max&#39;, &#39;&#39;), &#39;avgWeighted&#39;: (&#39;avgWeighted&#39;, &#39;&#39;), &#39;groupBitmap&#39;: (&#39;groupBitmap&#39;, &#39;&#39;), &#39;groupBitmapOr&#39;: (&#39;groupBitmapOr&#39;, &#39;&#39;), &#39;entropy&#39;: (&#39;entropy&#39;, &#39;&#39;), &#39;uniqCombined&#39;: (&#39;uniqCombined&#39;, &#39;&#39;), &#39;deltaSum&#39;: (&#39;deltaSum&#39;, &#39;&#39;), &#39;quantilesDeterministic&#39;: (&#39;quantilesDeterministic&#39;, &#39;&#39;)}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.AGG_FUNC_MAPPING-view-value"></label><span class="default_value">{&#39;groupArrayMovingSumIf&#39;: (&#39;groupArrayMovingSum&#39;, &#39;If&#39;), &#39;countIf&#39;: (&#39;count&#39;, &#39;If&#39;), &#39;sumCountIf&#39;: (&#39;sumCount&#39;, &#39;If&#39;), &#39;simpleLinearRegressionIf&#39;: (&#39;simpleLinearRegression&#39;, &#39;If&#39;), &#39;groupBitmapAndIf&#39;: (&#39;groupBitmapAnd&#39;, &#39;If&#39;), &#39;maxIntersectionsPositionIf&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;If&#39;), &#39;varPopIf&#39;: (&#39;varPop&#39;, &#39;If&#39;), &#39;quantileInterpolatedWeightedIf&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;If&#39;), &#39;covarSampIf&#39;: (&#39;covarSamp&#39;, &#39;If&#39;), &#39;groupArraySampleIf&#39;: (&#39;groupArraySample&#39;, &#39;If&#39;), &#39;quantilesInterpolatedWeightedIf&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;If&#39;), &#39;stddevPopIf&#39;: (&#39;stddevPop&#39;, &#39;If&#39;), &#39;groupArrayInsertAtIf&#39;: (&#39;groupArrayInsertAt&#39;, &#39;If&#39;), &#39;mannWhitneyUTestIf&#39;: (&#39;mannWhitneyUTest&#39;, &#39;If&#39;), &#39;maxIf&#39;: (&#39;max&#39;, &#39;If&#39;), &#39;studentTTestIf&#39;: (&#39;studentTTest&#39;, &#39;If&#39;), &#39;sumWithOverflowIf&#39;: (&#39;sumWithOverflow&#39;, &#39;If&#39;), &#39;quantilesTDigestIf&#39;: (&#39;quantilesTDigest&#39;, &#39;If&#39;), &#39;uniqCombined64If&#39;: (&#39;uniqCombined64&#39;, &#39;If&#39;), &#39;groupArrayIf&#39;: (&#39;groupArray&#39;, &#39;If&#39;), &#39;quantilesExactWeightedIf&#39;: (&#39;quantilesExactWeighted&#39;, &#39;If&#39;), &#39;quantileDeterministicIf&#39;: (&#39;quantileDeterministic&#39;, &#39;If&#39;), &#39;last_valueIf&#39;: (&#39;last_value&#39;, &#39;If&#39;), &#39;groupBitAndIf&#39;: (&#39;groupBitAnd&#39;, &#39;If&#39;), &#39;sumIf&#39;: (&#39;sum&#39;, &#39;If&#39;), &#39;quantileTimingWeightedIf&#39;: (&#39;quantileTimingWeighted&#39;, &#39;If&#39;), &#39;groupUniqArrayIf&#39;: (&#39;groupUniqArray&#39;, &#39;If&#39;), &#39;quantileBFloat16WeightedIf&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;If&#39;), &#39;quantileExactLowIf&#39;: (&#39;quantileExactLow&#39;, &#39;If&#39;), &#39;quantilesExactLowIf&#39;: (&#39;quantilesExactLow&#39;, &#39;If&#39;), &#39;groupBitXorIf&#39;: (&#39;groupBitXor&#39;, &#39;If&#39;), &#39;uniqHLL12If&#39;: (&#39;uniqHLL12&#39;, &#39;If&#39;), &#39;groupBitmapOrIf&#39;: (&#39;groupBitmapOr&#39;, &#39;If&#39;), &#39;uniqCombinedIf&#39;: (&#39;uniqCombined&#39;, &#39;If&#39;), &#39;quantileTDigestWeightedIf&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;If&#39;), &#39;stochasticLogisticRegressionIf&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;If&#39;), &#39;quantilesBFloat16If&#39;: (&#39;quantilesBFloat16&#39;, &#39;If&#39;), &#39;groupBitmapIf&#39;: (&#39;groupBitmap&#39;, &#39;If&#39;), &#39;groupBitmapXorIf&#39;: (&#39;groupBitmapXor&#39;, &#39;If&#39;), &#39;argMaxIf&#39;: (&#39;argMax&#39;, &#39;If&#39;), &#39;groupArrayMovingAvgIf&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;If&#39;), &#39;boundingRatioIf&#39;: (&#39;boundingRatio&#39;, &#39;If&#39;), &#39;quantileTDigestIf&#39;: (&#39;quantileTDigest&#39;, &#39;If&#39;), &#39;kurtSampIf&#39;: (&#39;kurtSamp&#39;, &#39;If&#39;), &#39;quantilesTDigestWeightedIf&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;If&#39;), &#39;stddevSampIf&#39;: (&#39;stddevSamp&#39;, &#39;If&#39;), &#39;quantilesExactHighIf&#39;: (&#39;quantilesExactHigh&#39;, &#39;If&#39;), &#39;sumKahanIf&#39;: (&#39;sumKahan&#39;, &#39;If&#39;), &#39;uniqIf&#39;: (&#39;uniq&#39;, &#39;If&#39;), &#39;quantilesTimingWeightedIf&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;If&#39;), &#39;topKIf&#39;: (&#39;topK&#39;, &#39;If&#39;), &#39;quantilesTimingIf&#39;: (&#39;quantilesTiming&#39;, &#39;If&#39;), &#39;quantileExactWeightedIf&#39;: (&#39;quantileExactWeighted&#39;, &#39;If&#39;), &#39;stochasticLinearRegressionIf&#39;: (&#39;stochasticLinearRegression&#39;, &#39;If&#39;), &#39;varSampIf&#39;: (&#39;varSamp&#39;, &#39;If&#39;), &#39;groupArrayLastIf&#39;: (&#39;groupArrayLast&#39;, &#39;If&#39;), &#39;quantilesGKIf&#39;: (&#39;quantilesGK&#39;, &#39;If&#39;), &#39;anyIf&#39;: (&#39;any&#39;, &#39;If&#39;), &#39;rankCorrIf&#39;: (&#39;rankCorr&#39;, &#39;If&#39;), &#39;quantilesExactIf&#39;: (&#39;quantilesExact&#39;, &#39;If&#39;), &#39;argMinIf&#39;: (&#39;argMin&#39;, &#39;If&#39;), &#39;anyHeavyIf&#39;: (&#39;anyHeavy&#39;, &#39;If&#39;), &#39;quantileGKIf&#39;: (&#39;quantileGK&#39;, &#39;If&#39;), &#39;anyLastIf&#39;: (&#39;anyLast&#39;, &#39;If&#39;), &#39;maxIntersectionsIf&#39;: (&#39;maxIntersections&#39;, &#39;If&#39;), &#39;corrIf&#39;: (&#39;corr&#39;, &#39;If&#39;), &#39;deltaSumIf&#39;: (&#39;deltaSum&#39;, &#39;If&#39;), &#39;topKWeightedIf&#39;: (&#39;topKWeighted&#39;, &#39;If&#39;), &#39;welchTTestIf&#39;: (&#39;welchTTest&#39;, &#39;If&#39;), &#39;uniqExactIf&#39;: (&#39;uniqExact&#39;, &#39;If&#39;), &#39;uniqThetaIf&#39;: (&#39;uniqTheta&#39;, &#39;If&#39;), &#39;deltaSumTimestampIf&#39;: (&#39;deltaSumTimestamp&#39;, &#39;If&#39;), &#39;quantileExactHighIf&#39;: (&#39;quantileExactHigh&#39;, &#39;If&#39;), &#39;quantileExactIf&#39;: (&#39;quantileExact&#39;, &#39;If&#39;), &#39;skewSampIf&#39;: (&#39;skewSamp&#39;, &#39;If&#39;), &#39;maxMapIf&#39;: (&#39;maxMap&#39;, &#39;If&#39;), &#39;covarPopIf&#39;: (&#39;covarPop&#39;, &#39;If&#39;), &#39;kolmogorovSmirnovTestIf&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;If&#39;), &#39;quantileIf&#39;: (&#39;quantile&#39;, &#39;If&#39;), &#39;theilsUIf&#39;: (&#39;theilsU&#39;, &#39;If&#39;), &#39;largestTriangleThreeBucketsIf&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;If&#39;), &#39;medianIf&#39;: (&#39;median&#39;, &#39;If&#39;), &#39;avgIf&#39;: (&#39;avg&#39;, &#39;If&#39;), &#39;quantileBFloat16If&#39;: (&#39;quantileBFloat16&#39;, &#39;If&#39;), &#39;avgWeightedIf&#39;: (&#39;avgWeighted&#39;, &#39;If&#39;), &#39;quantilesIf&#39;: (&#39;quantiles&#39;, &#39;If&#39;), &#39;categoricalInformationValueIf&#39;: (&#39;categoricalInformationValue&#39;, &#39;If&#39;), &#39;quantilesBFloat16WeightedIf&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;If&#39;), &#39;cramersVIf&#39;: (&#39;cramersV&#39;, &#39;If&#39;), &#39;exponentialMovingAverageIf&#39;: (&#39;exponentialMovingAverage&#39;, &#39;If&#39;), &#39;groupBitOrIf&#39;: (&#39;groupBitOr&#39;, &#39;If&#39;), &#39;contingencyIf&#39;: (&#39;contingency&#39;, &#39;If&#39;), &#39;quantilesDeterministicIf&#39;: (&#39;quantilesDeterministic&#39;, &#39;If&#39;), &#39;skewPopIf&#39;: (&#39;skewPop&#39;, &#39;If&#39;), &#39;entropyIf&#39;: (&#39;entropy&#39;, &#39;If&#39;), &#39;sumMapIf&#39;: (&#39;sumMap&#39;, &#39;If&#39;), &#39;minIf&#39;: (&#39;min&#39;, &#39;If&#39;), &#39;meanZTestIf&#39;: (&#39;meanZTest&#39;, &#39;If&#39;), &#39;first_valueIf&#39;: (&#39;first_value&#39;, &#39;If&#39;), &#39;quantileTimingIf&#39;: (&#39;quantileTiming&#39;, &#39;If&#39;), &#39;sparkBarIf&#39;: (&#39;sparkBar&#39;, &#39;If&#39;), &#39;intervalLengthSumIf&#39;: (&#39;intervalLengthSum&#39;, &#39;If&#39;), &#39;minMapIf&#39;: (&#39;minMap&#39;, &#39;If&#39;), &#39;kurtPopIf&#39;: (&#39;kurtPop&#39;, &#39;If&#39;), &#39;cramersVBiasCorrectedIf&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;If&#39;), &#39;groupArrayMovingSumArray&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Array&#39;), &#39;countArray&#39;: (&#39;count&#39;, &#39;Array&#39;), &#39;sumCountArray&#39;: (&#39;sumCount&#39;, &#39;Array&#39;), &#39;simpleLinearRegressionArray&#39;: (&#39;simpleLinearRegression&#39;, &#39;Array&#39;), &#39;groupBitmapAndArray&#39;: (&#39;groupBitmapAnd&#39;, &#39;Array&#39;), &#39;maxIntersectionsPositionArray&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Array&#39;), &#39;varPopArray&#39;: (&#39;varPop&#39;, &#39;Array&#39;), &#39;quantileInterpolatedWeightedArray&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Array&#39;), &#39;covarSampArray&#39;: (&#39;covarSamp&#39;, &#39;Array&#39;), &#39;groupArraySampleArray&#39;: (&#39;groupArraySample&#39;, &#39;Array&#39;), &#39;quantilesInterpolatedWeightedArray&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Array&#39;), &#39;stddevPopArray&#39;: (&#39;stddevPop&#39;, &#39;Array&#39;), &#39;groupArrayInsertAtArray&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Array&#39;), &#39;mannWhitneyUTestArray&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Array&#39;), &#39;maxArray&#39;: (&#39;max&#39;, &#39;Array&#39;), &#39;studentTTestArray&#39;: (&#39;studentTTest&#39;, &#39;Array&#39;), &#39;sumWithOverflowArray&#39;: (&#39;sumWithOverflow&#39;, &#39;Array&#39;), &#39;quantilesTDigestArray&#39;: (&#39;quantilesTDigest&#39;, &#39;Array&#39;), &#39;uniqCombined64Array&#39;: (&#39;uniqCombined64&#39;, &#39;Array&#39;), &#39;groupArrayArray&#39;: (&#39;groupArray&#39;, &#39;Array&#39;), &#39;quantilesExactWeightedArray&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Array&#39;), &#39;quantileDeterministicArray&#39;: (&#39;quantileDeterministic&#39;, &#39;Array&#39;), &#39;last_valueArray&#39;: (&#39;last_value&#39;, &#39;Array&#39;), &#39;groupBitAndArray&#39;: (&#39;groupBitAnd&#39;, &#39;Array&#39;), &#39;sumArray&#39;: (&#39;sum&#39;, &#39;Array&#39;), &#39;quantileTimingWeightedArray&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Array&#39;), &#39;groupUniqArrayArray&#39;: (&#39;groupUniqArray&#39;, &#39;Array&#39;), &#39;quantileBFloat16WeightedArray&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Array&#39;), &#39;quantileExactLowArray&#39;: (&#39;quantileExactLow&#39;, &#39;Array&#39;), &#39;quantilesExactLowArray&#39;: (&#39;quantilesExactLow&#39;, &#39;Array&#39;), &#39;groupBitXorArray&#39;: (&#39;groupBitXor&#39;, &#39;Array&#39;), &#39;uniqHLL12Array&#39;: (&#39;uniqHLL12&#39;, &#39;Array&#39;), &#39;groupBitmapOrArray&#39;: (&#39;groupBitmapOr&#39;, &#39;Array&#39;), &#39;uniqCombinedArray&#39;: (&#39;uniqCombined&#39;, &#39;Array&#39;), &#39;quantileTDigestWeightedArray&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Array&#39;), &#39;stochasticLogisticRegressionArray&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Array&#39;), &#39;quantilesBFloat16Array&#39;: (&#39;quantilesBFloat16&#39;, &#39;Array&#39;), &#39;groupBitmapArray&#39;: (&#39;groupBitmap&#39;, &#39;Array&#39;), &#39;groupBitmapXorArray&#39;: (&#39;groupBitmapXor&#39;, &#39;Array&#39;), &#39;argMaxArray&#39;: (&#39;argMax&#39;, &#39;Array&#39;), &#39;groupArrayMovingAvgArray&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Array&#39;), &#39;boundingRatioArray&#39;: (&#39;boundingRatio&#39;, &#39;Array&#39;), &#39;quantileTDigestArray&#39;: (&#39;quantileTDigest&#39;, &#39;Array&#39;), &#39;kurtSampArray&#39;: (&#39;kurtSamp&#39;, &#39;Array&#39;), &#39;quantilesTDigestWeightedArray&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Array&#39;), &#39;stddevSampArray&#39;: (&#39;stddevSamp&#39;, &#39;Array&#39;), &#39;quantilesExactHighArray&#39;: (&#39;quantilesExactHigh&#39;, &#39;Array&#39;), &#39;sumKahanArray&#39;: (&#39;sumKahan&#39;, &#39;Array&#39;), &#39;uniqArray&#39;: (&#39;uniq&#39;, &#39;Array&#39;), &#39;quantilesTimingWeightedArray&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Array&#39;), &#39;topKArray&#39;: (&#39;topK&#39;, &#39;Array&#39;), &#39;quantilesTimingArray&#39;: (&#39;quantilesTiming&#39;, &#39;Array&#39;), &#39;quantileExactWeightedArray&#39;: (&#39;quantileExactWeighted&#39;, &#39;Array&#39;), &#39;stochasticLinearRegressionArray&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Array&#39;), &#39;varSampArray&#39;: (&#39;varSamp&#39;, &#39;Array&#39;), &#39;groupArrayLastArray&#39;: (&#39;groupArrayLast&#39;, &#39;Array&#39;), &#39;quantilesGKArray&#39;: (&#39;quantilesGK&#39;, &#39;Array&#39;), &#39;anyArray&#39;: (&#39;any&#39;, &#39;Array&#39;), &#39;rankCorrArray&#39;: (&#39;rankCorr&#39;, &#39;Array&#39;), &#39;quantilesExactArray&#39;: (&#39;quantilesExact&#39;, &#39;Array&#39;), &#39;argMinArray&#39;: (&#39;argMin&#39;, &#39;Array&#39;), &#39;anyHeavyArray&#39;: (&#39;anyHeavy&#39;, &#39;Array&#39;), &#39;quantileGKArray&#39;: (&#39;quantileGK&#39;, &#39;Array&#39;), &#39;anyLastArray&#39;: (&#39;anyLast&#39;, &#39;Array&#39;), &#39;maxIntersectionsArray&#39;: (&#39;maxIntersections&#39;, &#39;Array&#39;), &#39;corrArray&#39;: (&#39;corr&#39;, &#39;Array&#39;), &#39;deltaSumArray&#39;: (&#39;deltaSum&#39;, &#39;Array&#39;), &#39;topKWeightedArray&#39;: (&#39;topKWeighted&#39;, &#39;Array&#39;), &#39;welchTTestArray&#39;: (&#39;welchTTest&#39;, &#39;Array&#39;), &#39;uniqExactArray&#39;: (&#39;uniqExact&#39;, &#39;Array&#39;), &#39;uniqThetaArray&#39;: (&#39;uniqTheta&#39;, &#39;Array&#39;), &#39;deltaSumTimestampArray&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Array&#39;), &#39;quantileExactHighArray&#39;: (&#39;quantileExactHigh&#39;, &#39;Array&#39;), &#39;quantileExactArray&#39;: (&#39;quantileExact&#39;, &#39;Array&#39;), &#39;skewSampArray&#39;: (&#39;skewSamp&#39;, &#39;Array&#39;), &#39;maxMapArray&#39;: (&#39;maxMap&#39;, &#39;Array&#39;), &#39;covarPopArray&#39;: (&#39;covarPop&#39;, &#39;Array&#39;), &#39;kolmogorovSmirnovTestArray&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Array&#39;), &#39;quantileArray&#39;: (&#39;quantile&#39;, &#39;Array&#39;), &#39;theilsUArray&#39;: (&#39;theilsU&#39;, &#39;Array&#39;), &#39;largestTriangleThreeBucketsArray&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Array&#39;), &#39;medianArray&#39;: (&#39;median&#39;, &#39;Array&#39;), &#39;avgArray&#39;: (&#39;avg&#39;, &#39;Array&#39;), &#39;quantileBFloat16Array&#39;: (&#39;quantileBFloat16&#39;, &#39;Array&#39;), &#39;avgWeightedArray&#39;: (&#39;avgWeighted&#39;, &#39;Array&#39;), &#39;quantilesArray&#39;: (&#39;quantiles&#39;, &#39;Array&#39;), &#39;categoricalInformationValueArray&#39;: (&#39;categoricalInformationValue&#39;, &#39;Array&#39;), &#39;quantilesBFloat16WeightedArray&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Array&#39;), &#39;cramersVArray&#39;: (&#39;cramersV&#39;, &#39;Array&#39;), &#39;exponentialMovingAverageArray&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Array&#39;), &#39;groupBitOrArray&#39;: (&#39;groupBitOr&#39;, &#39;Array&#39;), &#39;contingencyArray&#39;: (&#39;contingency&#39;, &#39;Array&#39;), &#39;quantilesDeterministicArray&#39;: (&#39;quantilesDeterministic&#39;, &#39;Array&#39;), &#39;skewPopArray&#39;: (&#39;skewPop&#39;, &#39;Array&#39;), &#39;entropyArray&#39;: (&#39;entropy&#39;, &#39;Array&#39;), &#39;sumMapArray&#39;: (&#39;sumMap&#39;, &#39;Array&#39;), &#39;minArray&#39;: (&#39;min&#39;, &#39;Array&#39;), &#39;meanZTestArray&#39;: (&#39;meanZTest&#39;, &#39;Array&#39;), &#39;first_valueArray&#39;: (&#39;first_value&#39;, &#39;Array&#39;), &#39;quantileTimingArray&#39;: (&#39;quantileTiming&#39;, &#39;Array&#39;), &#39;sparkBarArray&#39;: (&#39;sparkBar&#39;, &#39;Array&#39;), &#39;intervalLengthSumArray&#39;: (&#39;intervalLengthSum&#39;, &#39;Array&#39;), &#39;minMapArray&#39;: (&#39;minMap&#39;, &#39;Array&#39;), &#39;kurtPopArray&#39;: (&#39;kurtPop&#39;, &#39;Array&#39;), &#39;cramersVBiasCorrectedArray&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Array&#39;), &#39;groupArrayMovingSumArrayIf&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ArrayIf&#39;), &#39;countArrayIf&#39;: (&#39;count&#39;, &#39;ArrayIf&#39;), &#39;sumCountArrayIf&#39;: (&#39;sumCount&#39;, &#39;ArrayIf&#39;), &#39;simpleLinearRegressionArrayIf&#39;: (&#39;simpleLinearRegression&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapAndArrayIf&#39;: (&#39;groupBitmapAnd&#39;, &#39;ArrayIf&#39;), &#39;maxIntersectionsPositionArrayIf&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ArrayIf&#39;), &#39;varPopArrayIf&#39;: (&#39;varPop&#39;, &#39;ArrayIf&#39;), &#39;quantileInterpolatedWeightedArrayIf&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ArrayIf&#39;), &#39;covarSampArrayIf&#39;: (&#39;covarSamp&#39;, &#39;ArrayIf&#39;), &#39;groupArraySampleArrayIf&#39;: (&#39;groupArraySample&#39;, &#39;ArrayIf&#39;), &#39;quantilesInterpolatedWeightedArrayIf&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ArrayIf&#39;), &#39;stddevPopArrayIf&#39;: (&#39;stddevPop&#39;, &#39;ArrayIf&#39;), &#39;groupArrayInsertAtArrayIf&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ArrayIf&#39;), &#39;mannWhitneyUTestArrayIf&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ArrayIf&#39;), &#39;maxArrayIf&#39;: (&#39;max&#39;, &#39;ArrayIf&#39;), &#39;studentTTestArrayIf&#39;: (&#39;studentTTest&#39;, &#39;ArrayIf&#39;), &#39;sumWithOverflowArrayIf&#39;: (&#39;sumWithOverflow&#39;, &#39;ArrayIf&#39;), &#39;quantilesTDigestArrayIf&#39;: (&#39;quantilesTDigest&#39;, &#39;ArrayIf&#39;), &#39;uniqCombined64ArrayIf&#39;: (&#39;uniqCombined64&#39;, &#39;ArrayIf&#39;), &#39;groupArrayArrayIf&#39;: (&#39;groupArray&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactWeightedArrayIf&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ArrayIf&#39;), &#39;quantileDeterministicArrayIf&#39;: (&#39;quantileDeterministic&#39;, &#39;ArrayIf&#39;), &#39;last_valueArrayIf&#39;: (&#39;last_value&#39;, &#39;ArrayIf&#39;), &#39;groupBitAndArrayIf&#39;: (&#39;groupBitAnd&#39;, &#39;ArrayIf&#39;), &#39;sumArrayIf&#39;: (&#39;sum&#39;, &#39;ArrayIf&#39;), &#39;quantileTimingWeightedArrayIf&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ArrayIf&#39;), &#39;groupUniqArrayArrayIf&#39;: (&#39;groupUniqArray&#39;, &#39;ArrayIf&#39;), &#39;quantileBFloat16WeightedArrayIf&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ArrayIf&#39;), &#39;quantileExactLowArrayIf&#39;: (&#39;quantileExactLow&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactLowArrayIf&#39;: (&#39;quantilesExactLow&#39;, &#39;ArrayIf&#39;), &#39;groupBitXorArrayIf&#39;: (&#39;groupBitXor&#39;, &#39;ArrayIf&#39;), &#39;uniqHLL12ArrayIf&#39;: (&#39;uniqHLL12&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapOrArrayIf&#39;: (&#39;groupBitmapOr&#39;, &#39;ArrayIf&#39;), &#39;uniqCombinedArrayIf&#39;: (&#39;uniqCombined&#39;, &#39;ArrayIf&#39;), &#39;quantileTDigestWeightedArrayIf&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ArrayIf&#39;), &#39;stochasticLogisticRegressionArrayIf&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ArrayIf&#39;), &#39;quantilesBFloat16ArrayIf&#39;: (&#39;quantilesBFloat16&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapArrayIf&#39;: (&#39;groupBitmap&#39;, &#39;ArrayIf&#39;), &#39;groupBitmapXorArrayIf&#39;: (&#39;groupBitmapXor&#39;, &#39;ArrayIf&#39;), &#39;argMaxArrayIf&#39;: (&#39;argMax&#39;, &#39;ArrayIf&#39;), &#39;groupArrayMovingAvgArrayIf&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ArrayIf&#39;), &#39;boundingRatioArrayIf&#39;: (&#39;boundingRatio&#39;, &#39;ArrayIf&#39;), &#39;quantileTDigestArrayIf&#39;: (&#39;quantileTDigest&#39;, &#39;ArrayIf&#39;), &#39;kurtSampArrayIf&#39;: (&#39;kurtSamp&#39;, &#39;ArrayIf&#39;), &#39;quantilesTDigestWeightedArrayIf&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ArrayIf&#39;), &#39;stddevSampArrayIf&#39;: (&#39;stddevSamp&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactHighArrayIf&#39;: (&#39;quantilesExactHigh&#39;, &#39;ArrayIf&#39;), &#39;sumKahanArrayIf&#39;: (&#39;sumKahan&#39;, &#39;ArrayIf&#39;), &#39;uniqArrayIf&#39;: (&#39;uniq&#39;, &#39;ArrayIf&#39;), &#39;quantilesTimingWeightedArrayIf&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ArrayIf&#39;), &#39;topKArrayIf&#39;: (&#39;topK&#39;, &#39;ArrayIf&#39;), &#39;quantilesTimingArrayIf&#39;: (&#39;quantilesTiming&#39;, &#39;ArrayIf&#39;), &#39;quantileExactWeightedArrayIf&#39;: (&#39;quantileExactWeighted&#39;, &#39;ArrayIf&#39;), &#39;stochasticLinearRegressionArrayIf&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ArrayIf&#39;), &#39;varSampArrayIf&#39;: (&#39;varSamp&#39;, &#39;ArrayIf&#39;), &#39;groupArrayLastArrayIf&#39;: (&#39;groupArrayLast&#39;, &#39;ArrayIf&#39;), &#39;quantilesGKArrayIf&#39;: (&#39;quantilesGK&#39;, &#39;ArrayIf&#39;), &#39;anyArrayIf&#39;: (&#39;any&#39;, &#39;ArrayIf&#39;), &#39;rankCorrArrayIf&#39;: (&#39;rankCorr&#39;, &#39;ArrayIf&#39;), &#39;quantilesExactArrayIf&#39;: (&#39;quantilesExact&#39;, &#39;ArrayIf&#39;), &#39;argMinArrayIf&#39;: (&#39;argMin&#39;, &#39;ArrayIf&#39;), &#39;anyHeavyArrayIf&#39;: (&#39;anyHeavy&#39;, &#39;ArrayIf&#39;), &#39;quantileGKArrayIf&#39;: (&#39;quantileGK&#39;, &#39;ArrayIf&#39;), &#39;anyLastArrayIf&#39;: (&#39;anyLast&#39;, &#39;ArrayIf&#39;), &#39;maxIntersectionsArrayIf&#39;: (&#39;maxIntersections&#39;, &#39;ArrayIf&#39;), &#39;corrArrayIf&#39;: (&#39;corr&#39;, &#39;ArrayIf&#39;), &#39;deltaSumArrayIf&#39;: (&#39;deltaSum&#39;, &#39;ArrayIf&#39;), &#39;topKWeightedArrayIf&#39;: (&#39;topKWeighted&#39;, &#39;ArrayIf&#39;), &#39;welchTTestArrayIf&#39;: (&#39;welchTTest&#39;, &#39;ArrayIf&#39;), &#39;uniqExactArrayIf&#39;: (&#39;uniqExact&#39;, &#39;ArrayIf&#39;), &#39;uniqThetaArrayIf&#39;: (&#39;uniqTheta&#39;, &#39;ArrayIf&#39;), &#39;deltaSumTimestampArrayIf&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ArrayIf&#39;), &#39;quantileExactHighArrayIf&#39;: (&#39;quantileExactHigh&#39;, &#39;ArrayIf&#39;), &#39;quantileExactArrayIf&#39;: (&#39;quantileExact&#39;, &#39;ArrayIf&#39;), &#39;skewSampArrayIf&#39;: (&#39;skewSamp&#39;, &#39;ArrayIf&#39;), &#39;maxMapArrayIf&#39;: (&#39;maxMap&#39;, &#39;ArrayIf&#39;), &#39;covarPopArrayIf&#39;: (&#39;covarPop&#39;, &#39;ArrayIf&#39;), &#39;kolmogorovSmirnovTestArrayIf&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ArrayIf&#39;), &#39;quantileArrayIf&#39;: (&#39;quantile&#39;, &#39;ArrayIf&#39;), &#39;theilsUArrayIf&#39;: (&#39;theilsU&#39;, &#39;ArrayIf&#39;), &#39;largestTriangleThreeBucketsArrayIf&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ArrayIf&#39;), &#39;medianArrayIf&#39;: (&#39;median&#39;, &#39;ArrayIf&#39;), &#39;avgArrayIf&#39;: (&#39;avg&#39;, &#39;ArrayIf&#39;), &#39;quantileBFloat16ArrayIf&#39;: (&#39;quantileBFloat16&#39;, &#39;ArrayIf&#39;), &#39;avgWeightedArrayIf&#39;: (&#39;avgWeighted&#39;, &#39;ArrayIf&#39;), &#39;quantilesArrayIf&#39;: (&#39;quantiles&#39;, &#39;ArrayIf&#39;), &#39;categoricalInformationValueArrayIf&#39;: (&#39;categoricalInformationValue&#39;, &#39;ArrayIf&#39;), &#39;quantilesBFloat16WeightedArrayIf&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ArrayIf&#39;), &#39;cramersVArrayIf&#39;: (&#39;cramersV&#39;, &#39;ArrayIf&#39;), &#39;exponentialMovingAverageArrayIf&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ArrayIf&#39;), &#39;groupBitOrArrayIf&#39;: (&#39;groupBitOr&#39;, &#39;ArrayIf&#39;), &#39;contingencyArrayIf&#39;: (&#39;contingency&#39;, &#39;ArrayIf&#39;), &#39;quantilesDeterministicArrayIf&#39;: (&#39;quantilesDeterministic&#39;, &#39;ArrayIf&#39;), &#39;skewPopArrayIf&#39;: (&#39;skewPop&#39;, &#39;ArrayIf&#39;), &#39;entropyArrayIf&#39;: (&#39;entropy&#39;, &#39;ArrayIf&#39;), &#39;sumMapArrayIf&#39;: (&#39;sumMap&#39;, &#39;ArrayIf&#39;), &#39;minArrayIf&#39;: (&#39;min&#39;, &#39;ArrayIf&#39;), &#39;meanZTestArrayIf&#39;: (&#39;meanZTest&#39;, &#39;ArrayIf&#39;), &#39;first_valueArrayIf&#39;: (&#39;first_value&#39;, &#39;ArrayIf&#39;), &#39;quantileTimingArrayIf&#39;: (&#39;quantileTiming&#39;, &#39;ArrayIf&#39;), &#39;sparkBarArrayIf&#39;: (&#39;sparkBar&#39;, &#39;ArrayIf&#39;), &#39;intervalLengthSumArrayIf&#39;: (&#39;intervalLengthSum&#39;, &#39;ArrayIf&#39;), &#39;minMapArrayIf&#39;: (&#39;minMap&#39;, &#39;ArrayIf&#39;), &#39;kurtPopArrayIf&#39;: (&#39;kurtPop&#39;, &#39;ArrayIf&#39;), &#39;cramersVBiasCorrectedArrayIf&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ArrayIf&#39;), &#39;groupArrayMovingSumMap&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Map&#39;), &#39;countMap&#39;: (&#39;count&#39;, &#39;Map&#39;), &#39;sumCountMap&#39;: (&#39;sumCount&#39;, &#39;Map&#39;), &#39;simpleLinearRegressionMap&#39;: (&#39;simpleLinearRegression&#39;, &#39;Map&#39;), &#39;groupBitmapAndMap&#39;: (&#39;groupBitmapAnd&#39;, &#39;Map&#39;), &#39;maxIntersectionsPositionMap&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Map&#39;), &#39;varPopMap&#39;: (&#39;varPop&#39;, &#39;Map&#39;), &#39;quantileInterpolatedWeightedMap&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Map&#39;), &#39;covarSampMap&#39;: (&#39;covarSamp&#39;, &#39;Map&#39;), &#39;groupArraySampleMap&#39;: (&#39;groupArraySample&#39;, &#39;Map&#39;), &#39;quantilesInterpolatedWeightedMap&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Map&#39;), &#39;stddevPopMap&#39;: (&#39;stddevPop&#39;, &#39;Map&#39;), &#39;groupArrayInsertAtMap&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Map&#39;), &#39;mannWhitneyUTestMap&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Map&#39;), &#39;maxMap&#39;: (&#39;maxMap&#39;, &#39;&#39;), &#39;studentTTestMap&#39;: (&#39;studentTTest&#39;, &#39;Map&#39;), &#39;sumWithOverflowMap&#39;: (&#39;sumWithOverflow&#39;, &#39;Map&#39;), &#39;quantilesTDigestMap&#39;: (&#39;quantilesTDigest&#39;, &#39;Map&#39;), &#39;uniqCombined64Map&#39;: (&#39;uniqCombined64&#39;, &#39;Map&#39;), &#39;groupArrayMap&#39;: (&#39;groupArray&#39;, &#39;Map&#39;), &#39;quantilesExactWeightedMap&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Map&#39;), &#39;quantileDeterministicMap&#39;: (&#39;quantileDeterministic&#39;, &#39;Map&#39;), &#39;last_valueMap&#39;: (&#39;last_value&#39;, &#39;Map&#39;), &#39;groupBitAndMap&#39;: (&#39;groupBitAnd&#39;, &#39;Map&#39;), &#39;sumMap&#39;: (&#39;sumMap&#39;, &#39;&#39;), &#39;quantileTimingWeightedMap&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Map&#39;), &#39;groupUniqArrayMap&#39;: (&#39;groupUniqArray&#39;, &#39;Map&#39;), &#39;quantileBFloat16WeightedMap&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Map&#39;), &#39;quantileExactLowMap&#39;: (&#39;quantileExactLow&#39;, &#39;Map&#39;), &#39;quantilesExactLowMap&#39;: (&#39;quantilesExactLow&#39;, &#39;Map&#39;), &#39;groupBitXorMap&#39;: (&#39;groupBitXor&#39;, &#39;Map&#39;), &#39;uniqHLL12Map&#39;: (&#39;uniqHLL12&#39;, &#39;Map&#39;), &#39;groupBitmapOrMap&#39;: (&#39;groupBitmapOr&#39;, &#39;Map&#39;), &#39;uniqCombinedMap&#39;: (&#39;uniqCombined&#39;, &#39;Map&#39;), &#39;quantileTDigestWeightedMap&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Map&#39;), &#39;stochasticLogisticRegressionMap&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Map&#39;), &#39;quantilesBFloat16Map&#39;: (&#39;quantilesBFloat16&#39;, &#39;Map&#39;), &#39;groupBitmapMap&#39;: (&#39;groupBitmap&#39;, &#39;Map&#39;), &#39;groupBitmapXorMap&#39;: (&#39;groupBitmapXor&#39;, &#39;Map&#39;), &#39;argMaxMap&#39;: (&#39;argMax&#39;, &#39;Map&#39;), &#39;groupArrayMovingAvgMap&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Map&#39;), &#39;boundingRatioMap&#39;: (&#39;boundingRatio&#39;, &#39;Map&#39;), &#39;quantileTDigestMap&#39;: (&#39;quantileTDigest&#39;, &#39;Map&#39;), &#39;kurtSampMap&#39;: (&#39;kurtSamp&#39;, &#39;Map&#39;), &#39;quantilesTDigestWeightedMap&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Map&#39;), &#39;stddevSampMap&#39;: (&#39;stddevSamp&#39;, &#39;Map&#39;), &#39;quantilesExactHighMap&#39;: (&#39;quantilesExactHigh&#39;, &#39;Map&#39;), &#39;sumKahanMap&#39;: (&#39;sumKahan&#39;, &#39;Map&#39;), &#39;uniqMap&#39;: (&#39;uniq&#39;, &#39;Map&#39;), &#39;quantilesTimingWeightedMap&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Map&#39;), &#39;topKMap&#39;: (&#39;topK&#39;, &#39;Map&#39;), &#39;quantilesTimingMap&#39;: (&#39;quantilesTiming&#39;, &#39;Map&#39;), &#39;quantileExactWeightedMap&#39;: (&#39;quantileExactWeighted&#39;, &#39;Map&#39;), &#39;stochasticLinearRegressionMap&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Map&#39;), &#39;varSampMap&#39;: (&#39;varSamp&#39;, &#39;Map&#39;), &#39;groupArrayLastMap&#39;: (&#39;groupArrayLast&#39;, &#39;Map&#39;), &#39;quantilesGKMap&#39;: (&#39;quantilesGK&#39;, &#39;Map&#39;), &#39;anyMap&#39;: (&#39;any&#39;, &#39;Map&#39;), &#39;rankCorrMap&#39;: (&#39;rankCorr&#39;, &#39;Map&#39;), &#39;quantilesExactMap&#39;: (&#39;quantilesExact&#39;, &#39;Map&#39;), &#39;argMinMap&#39;: (&#39;argMin&#39;, &#39;Map&#39;), &#39;anyHeavyMap&#39;: (&#39;anyHeavy&#39;, &#39;Map&#39;), &#39;quantileGKMap&#39;: (&#39;quantileGK&#39;, &#39;Map&#39;), &#39;anyLastMap&#39;: (&#39;anyLast&#39;, &#39;Map&#39;), &#39;maxIntersectionsMap&#39;: (&#39;maxIntersections&#39;, &#39;Map&#39;), &#39;corrMap&#39;: (&#39;corr&#39;, &#39;Map&#39;), &#39;deltaSumMap&#39;: (&#39;deltaSum&#39;, &#39;Map&#39;), &#39;topKWeightedMap&#39;: (&#39;topKWeighted&#39;, &#39;Map&#39;), &#39;welchTTestMap&#39;: (&#39;welchTTest&#39;, &#39;Map&#39;), &#39;uniqExactMap&#39;: (&#39;uniqExact&#39;, &#39;Map&#39;), &#39;uniqThetaMap&#39;: (&#39;uniqTheta&#39;, &#39;Map&#39;), &#39;deltaSumTimestampMap&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Map&#39;), &#39;quantileExactHighMap&#39;: (&#39;quantileExactHigh&#39;, &#39;Map&#39;), &#39;quantileExactMap&#39;: (&#39;quantileExact&#39;, &#39;Map&#39;), &#39;skewSampMap&#39;: (&#39;skewSamp&#39;, &#39;Map&#39;), &#39;maxMapMap&#39;: (&#39;maxMap&#39;, &#39;Map&#39;), &#39;covarPopMap&#39;: (&#39;covarPop&#39;, &#39;Map&#39;), &#39;kolmogorovSmirnovTestMap&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Map&#39;), &#39;quantileMap&#39;: (&#39;quantile&#39;, &#39;Map&#39;), &#39;theilsUMap&#39;: (&#39;theilsU&#39;, &#39;Map&#39;), &#39;largestTriangleThreeBucketsMap&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Map&#39;), &#39;medianMap&#39;: (&#39;median&#39;, &#39;Map&#39;), &#39;avgMap&#39;: (&#39;avg&#39;, &#39;Map&#39;), &#39;quantileBFloat16Map&#39;: (&#39;quantileBFloat16&#39;, &#39;Map&#39;), &#39;avgWeightedMap&#39;: (&#39;avgWeighted&#39;, &#39;Map&#39;), &#39;quantilesMap&#39;: (&#39;quantiles&#39;, &#39;Map&#39;), &#39;categoricalInformationValueMap&#39;: (&#39;categoricalInformationValue&#39;, &#39;Map&#39;), &#39;quantilesBFloat16WeightedMap&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Map&#39;), &#39;cramersVMap&#39;: (&#39;cramersV&#39;, &#39;Map&#39;), &#39;exponentialMovingAverageMap&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Map&#39;), &#39;groupBitOrMap&#39;: (&#39;groupBitOr&#39;, &#39;Map&#39;), &#39;contingencyMap&#39;: (&#39;contingency&#39;, &#39;Map&#39;), &#39;quantilesDeterministicMap&#39;: (&#39;quantilesDeterministic&#39;, &#39;Map&#39;), &#39;skewPopMap&#39;: (&#39;skewPop&#39;, &#39;Map&#39;), &#39;entropyMap&#39;: (&#39;entropy&#39;, &#39;Map&#39;), &#39;sumMapMap&#39;: (&#39;sumMap&#39;, &#39;Map&#39;), &#39;minMap&#39;: (&#39;minMap&#39;, &#39;&#39;), &#39;meanZTestMap&#39;: (&#39;meanZTest&#39;, &#39;Map&#39;), &#39;first_valueMap&#39;: (&#39;first_value&#39;, &#39;Map&#39;), &#39;quantileTimingMap&#39;: (&#39;quantileTiming&#39;, &#39;Map&#39;), &#39;sparkBarMap&#39;: (&#39;sparkBar&#39;, &#39;Map&#39;), &#39;intervalLengthSumMap&#39;: (&#39;intervalLengthSum&#39;, &#39;Map&#39;), &#39;minMapMap&#39;: (&#39;minMap&#39;, &#39;Map&#39;), &#39;kurtPopMap&#39;: (&#39;kurtPop&#39;, &#39;Map&#39;), &#39;cramersVBiasCorrectedMap&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Map&#39;), &#39;groupArrayMovingSumSimpleState&#39;: (&#39;groupArrayMovingSum&#39;, &#39;SimpleState&#39;), &#39;countSimpleState&#39;: (&#39;count&#39;, &#39;SimpleState&#39;), &#39;sumCountSimpleState&#39;: (&#39;sumCount&#39;, &#39;SimpleState&#39;), &#39;simpleLinearRegressionSimpleState&#39;: (&#39;simpleLinearRegression&#39;, &#39;SimpleState&#39;), &#39;groupBitmapAndSimpleState&#39;: (&#39;groupBitmapAnd&#39;, &#39;SimpleState&#39;), &#39;maxIntersectionsPositionSimpleState&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;SimpleState&#39;), &#39;varPopSimpleState&#39;: (&#39;varPop&#39;, &#39;SimpleState&#39;), &#39;quantileInterpolatedWeightedSimpleState&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;SimpleState&#39;), &#39;covarSampSimpleState&#39;: (&#39;covarSamp&#39;, &#39;SimpleState&#39;), &#39;groupArraySampleSimpleState&#39;: (&#39;groupArraySample&#39;, &#39;SimpleState&#39;), &#39;quantilesInterpolatedWeightedSimpleState&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;SimpleState&#39;), &#39;stddevPopSimpleState&#39;: (&#39;stddevPop&#39;, &#39;SimpleState&#39;), &#39;groupArrayInsertAtSimpleState&#39;: (&#39;groupArrayInsertAt&#39;, &#39;SimpleState&#39;), &#39;mannWhitneyUTestSimpleState&#39;: (&#39;mannWhitneyUTest&#39;, &#39;SimpleState&#39;), &#39;maxSimpleState&#39;: (&#39;max&#39;, &#39;SimpleState&#39;), &#39;studentTTestSimpleState&#39;: (&#39;studentTTest&#39;, &#39;SimpleState&#39;), &#39;sumWithOverflowSimpleState&#39;: (&#39;sumWithOverflow&#39;, &#39;SimpleState&#39;), &#39;quantilesTDigestSimpleState&#39;: (&#39;quantilesTDigest&#39;, &#39;SimpleState&#39;), &#39;uniqCombined64SimpleState&#39;: (&#39;uniqCombined64&#39;, &#39;SimpleState&#39;), &#39;groupArraySimpleState&#39;: (&#39;groupArray&#39;, &#39;SimpleState&#39;), &#39;quantilesExactWeightedSimpleState&#39;: (&#39;quantilesExactWeighted&#39;, &#39;SimpleState&#39;), &#39;quantileDeterministicSimpleState&#39;: (&#39;quantileDeterministic&#39;, &#39;SimpleState&#39;), &#39;last_valueSimpleState&#39;: (&#39;last_value&#39;, &#39;SimpleState&#39;), &#39;groupBitAndSimpleState&#39;: (&#39;groupBitAnd&#39;, &#39;SimpleState&#39;), &#39;sumSimpleState&#39;: (&#39;sum&#39;, &#39;SimpleState&#39;), &#39;quantileTimingWeightedSimpleState&#39;: (&#39;quantileTimingWeighted&#39;, &#39;SimpleState&#39;), &#39;groupUniqArraySimpleState&#39;: (&#39;groupUniqArray&#39;, &#39;SimpleState&#39;), &#39;quantileBFloat16WeightedSimpleState&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;SimpleState&#39;), &#39;quantileExactLowSimpleState&#39;: (&#39;quantileExactLow&#39;, &#39;SimpleState&#39;), &#39;quantilesExactLowSimpleState&#39;: (&#39;quantilesExactLow&#39;, &#39;SimpleState&#39;), &#39;groupBitXorSimpleState&#39;: (&#39;groupBitXor&#39;, &#39;SimpleState&#39;), &#39;uniqHLL12SimpleState&#39;: (&#39;uniqHLL12&#39;, &#39;SimpleState&#39;), &#39;groupBitmapOrSimpleState&#39;: (&#39;groupBitmapOr&#39;, &#39;SimpleState&#39;), &#39;uniqCombinedSimpleState&#39;: (&#39;uniqCombined&#39;, &#39;SimpleState&#39;), &#39;quantileTDigestWeightedSimpleState&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;SimpleState&#39;), &#39;stochasticLogisticRegressionSimpleState&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;SimpleState&#39;), &#39;quantilesBFloat16SimpleState&#39;: (&#39;quantilesBFloat16&#39;, &#39;SimpleState&#39;), &#39;groupBitmapSimpleState&#39;: (&#39;groupBitmap&#39;, &#39;SimpleState&#39;), &#39;groupBitmapXorSimpleState&#39;: (&#39;groupBitmapXor&#39;, &#39;SimpleState&#39;), &#39;argMaxSimpleState&#39;: (&#39;argMax&#39;, &#39;SimpleState&#39;), &#39;groupArrayMovingAvgSimpleState&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;SimpleState&#39;), &#39;boundingRatioSimpleState&#39;: (&#39;boundingRatio&#39;, &#39;SimpleState&#39;), &#39;quantileTDigestSimpleState&#39;: (&#39;quantileTDigest&#39;, &#39;SimpleState&#39;), &#39;kurtSampSimpleState&#39;: (&#39;kurtSamp&#39;, &#39;SimpleState&#39;), &#39;quantilesTDigestWeightedSimpleState&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;SimpleState&#39;), &#39;stddevSampSimpleState&#39;: (&#39;stddevSamp&#39;, &#39;SimpleState&#39;), &#39;quantilesExactHighSimpleState&#39;: (&#39;quantilesExactHigh&#39;, &#39;SimpleState&#39;), &#39;sumKahanSimpleState&#39;: (&#39;sumKahan&#39;, &#39;SimpleState&#39;), &#39;uniqSimpleState&#39;: (&#39;uniq&#39;, &#39;SimpleState&#39;), &#39;quantilesTimingWeightedSimpleState&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;SimpleState&#39;), &#39;topKSimpleState&#39;: (&#39;topK&#39;, &#39;SimpleState&#39;), &#39;quantilesTimingSimpleState&#39;: (&#39;quantilesTiming&#39;, &#39;SimpleState&#39;), &#39;quantileExactWeightedSimpleState&#39;: (&#39;quantileExactWeighted&#39;, &#39;SimpleState&#39;), &#39;stochasticLinearRegressionSimpleState&#39;: (&#39;stochasticLinearRegression&#39;, &#39;SimpleState&#39;), &#39;varSampSimpleState&#39;: (&#39;varSamp&#39;, &#39;SimpleState&#39;), &#39;groupArrayLastSimpleState&#39;: (&#39;groupArrayLast&#39;, &#39;SimpleState&#39;), &#39;quantilesGKSimpleState&#39;: (&#39;quantilesGK&#39;, &#39;SimpleState&#39;), &#39;anySimpleState&#39;: (&#39;any&#39;, &#39;SimpleState&#39;), &#39;rankCorrSimpleState&#39;: (&#39;rankCorr&#39;, &#39;SimpleState&#39;), &#39;quantilesExactSimpleState&#39;: (&#39;quantilesExact&#39;, &#39;SimpleState&#39;), &#39;argMinSimpleState&#39;: (&#39;argMin&#39;, &#39;SimpleState&#39;), &#39;anyHeavySimpleState&#39;: (&#39;anyHeavy&#39;, &#39;SimpleState&#39;), &#39;quantileGKSimpleState&#39;: (&#39;quantileGK&#39;, &#39;SimpleState&#39;), &#39;anyLastSimpleState&#39;: (&#39;anyLast&#39;, &#39;SimpleState&#39;), &#39;maxIntersectionsSimpleState&#39;: (&#39;maxIntersections&#39;, &#39;SimpleState&#39;), &#39;corrSimpleState&#39;: (&#39;corr&#39;, &#39;SimpleState&#39;), &#39;deltaSumSimpleState&#39;: (&#39;deltaSum&#39;, &#39;SimpleState&#39;), &#39;topKWeightedSimpleState&#39;: (&#39;topKWeighted&#39;, &#39;SimpleState&#39;), &#39;welchTTestSimpleState&#39;: (&#39;welchTTest&#39;, &#39;SimpleState&#39;), &#39;uniqExactSimpleState&#39;: (&#39;uniqExact&#39;, &#39;SimpleState&#39;), &#39;uniqThetaSimpleState&#39;: (&#39;uniqTheta&#39;, &#39;SimpleState&#39;), &#39;deltaSumTimestampSimpleState&#39;: (&#39;deltaSumTimestamp&#39;, &#39;SimpleState&#39;), &#39;quantileExactHighSimpleState&#39;: (&#39;quantileExactHigh&#39;, &#39;SimpleState&#39;), &#39;quantileExactSimpleState&#39;: (&#39;quantileExact&#39;, &#39;SimpleState&#39;), &#39;skewSampSimpleState&#39;: (&#39;skewSamp&#39;, &#39;SimpleState&#39;), &#39;maxMapSimpleState&#39;: (&#39;maxMap&#39;, &#39;SimpleState&#39;), &#39;covarPopSimpleState&#39;: (&#39;covarPop&#39;, &#39;SimpleState&#39;), &#39;kolmogorovSmirnovTestSimpleState&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;SimpleState&#39;), &#39;quantileSimpleState&#39;: (&#39;quantile&#39;, &#39;SimpleState&#39;), &#39;theilsUSimpleState&#39;: (&#39;theilsU&#39;, &#39;SimpleState&#39;), &#39;largestTriangleThreeBucketsSimpleState&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;SimpleState&#39;), &#39;medianSimpleState&#39;: (&#39;median&#39;, &#39;SimpleState&#39;), &#39;avgSimpleState&#39;: (&#39;avg&#39;, &#39;SimpleState&#39;), &#39;quantileBFloat16SimpleState&#39;: (&#39;quantileBFloat16&#39;, &#39;SimpleState&#39;), &#39;avgWeightedSimpleState&#39;: (&#39;avgWeighted&#39;, &#39;SimpleState&#39;), &#39;quantilesSimpleState&#39;: (&#39;quantiles&#39;, &#39;SimpleState&#39;), &#39;categoricalInformationValueSimpleState&#39;: (&#39;categoricalInformationValue&#39;, &#39;SimpleState&#39;), &#39;quantilesBFloat16WeightedSimpleState&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;SimpleState&#39;), &#39;cramersVSimpleState&#39;: (&#39;cramersV&#39;, &#39;SimpleState&#39;), &#39;exponentialMovingAverageSimpleState&#39;: (&#39;exponentialMovingAverage&#39;, &#39;SimpleState&#39;), &#39;groupBitOrSimpleState&#39;: (&#39;groupBitOr&#39;, &#39;SimpleState&#39;), &#39;contingencySimpleState&#39;: (&#39;contingency&#39;, &#39;SimpleState&#39;), &#39;quantilesDeterministicSimpleState&#39;: (&#39;quantilesDeterministic&#39;, &#39;SimpleState&#39;), &#39;skewPopSimpleState&#39;: (&#39;skewPop&#39;, &#39;SimpleState&#39;), &#39;entropySimpleState&#39;: (&#39;entropy&#39;, &#39;SimpleState&#39;), &#39;sumMapSimpleState&#39;: (&#39;sumMap&#39;, &#39;SimpleState&#39;), &#39;minSimpleState&#39;: (&#39;min&#39;, &#39;SimpleState&#39;), &#39;meanZTestSimpleState&#39;: (&#39;meanZTest&#39;, &#39;SimpleState&#39;), &#39;first_valueSimpleState&#39;: (&#39;first_value&#39;, &#39;SimpleState&#39;), &#39;quantileTimingSimpleState&#39;: (&#39;quantileTiming&#39;, &#39;SimpleState&#39;), &#39;sparkBarSimpleState&#39;: (&#39;sparkBar&#39;, &#39;SimpleState&#39;), &#39;intervalLengthSumSimpleState&#39;: (&#39;intervalLengthSum&#39;, &#39;SimpleState&#39;), &#39;minMapSimpleState&#39;: (&#39;minMap&#39;, &#39;SimpleState&#39;), &#39;kurtPopSimpleState&#39;: (&#39;kurtPop&#39;, &#39;SimpleState&#39;), &#39;cramersVBiasCorrectedSimpleState&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;SimpleState&#39;), &#39;groupArrayMovingSumState&#39;: (&#39;groupArrayMovingSum&#39;, &#39;State&#39;), &#39;countState&#39;: (&#39;count&#39;, &#39;State&#39;), &#39;sumCountState&#39;: (&#39;sumCount&#39;, &#39;State&#39;), &#39;simpleLinearRegressionState&#39;: (&#39;simpleLinearRegression&#39;, &#39;State&#39;), &#39;groupBitmapAndState&#39;: (&#39;groupBitmapAnd&#39;, &#39;State&#39;), &#39;maxIntersectionsPositionState&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;State&#39;), &#39;varPopState&#39;: (&#39;varPop&#39;, &#39;State&#39;), &#39;quantileInterpolatedWeightedState&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;State&#39;), &#39;covarSampState&#39;: (&#39;covarSamp&#39;, &#39;State&#39;), &#39;groupArraySampleState&#39;: (&#39;groupArraySample&#39;, &#39;State&#39;), &#39;quantilesInterpolatedWeightedState&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;State&#39;), &#39;stddevPopState&#39;: (&#39;stddevPop&#39;, &#39;State&#39;), &#39;groupArrayInsertAtState&#39;: (&#39;groupArrayInsertAt&#39;, &#39;State&#39;), &#39;mannWhitneyUTestState&#39;: (&#39;mannWhitneyUTest&#39;, &#39;State&#39;), &#39;maxState&#39;: (&#39;max&#39;, &#39;State&#39;), &#39;studentTTestState&#39;: (&#39;studentTTest&#39;, &#39;State&#39;), &#39;sumWithOverflowState&#39;: (&#39;sumWithOverflow&#39;, &#39;State&#39;), &#39;quantilesTDigestState&#39;: (&#39;quantilesTDigest&#39;, &#39;State&#39;), &#39;uniqCombined64State&#39;: (&#39;uniqCombined64&#39;, &#39;State&#39;), &#39;groupArrayState&#39;: (&#39;groupArray&#39;, &#39;State&#39;), &#39;quantilesExactWeightedState&#39;: (&#39;quantilesExactWeighted&#39;, &#39;State&#39;), &#39;quantileDeterministicState&#39;: (&#39;quantileDeterministic&#39;, &#39;State&#39;), &#39;last_valueState&#39;: (&#39;last_value&#39;, &#39;State&#39;), &#39;groupBitAndState&#39;: (&#39;groupBitAnd&#39;, &#39;State&#39;), &#39;sumState&#39;: (&#39;sum&#39;, &#39;State&#39;), &#39;quantileTimingWeightedState&#39;: (&#39;quantileTimingWeighted&#39;, &#39;State&#39;), &#39;groupUniqArrayState&#39;: (&#39;groupUniqArray&#39;, &#39;State&#39;), &#39;quantileBFloat16WeightedState&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;State&#39;), &#39;quantileExactLowState&#39;: (&#39;quantileExactLow&#39;, &#39;State&#39;), &#39;quantilesExactLowState&#39;: (&#39;quantilesExactLow&#39;, &#39;State&#39;), &#39;groupBitXorState&#39;: (&#39;groupBitXor&#39;, &#39;State&#39;), &#39;uniqHLL12State&#39;: (&#39;uniqHLL12&#39;, &#39;State&#39;), &#39;groupBitmapOrState&#39;: (&#39;groupBitmapOr&#39;, &#39;State&#39;), &#39;uniqCombinedState&#39;: (&#39;uniqCombined&#39;, &#39;State&#39;), &#39;quantileTDigestWeightedState&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;State&#39;), &#39;stochasticLogisticRegressionState&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;State&#39;), &#39;quantilesBFloat16State&#39;: (&#39;quantilesBFloat16&#39;, &#39;State&#39;), &#39;groupBitmapState&#39;: (&#39;groupBitmap&#39;, &#39;State&#39;), &#39;groupBitmapXorState&#39;: (&#39;groupBitmapXor&#39;, &#39;State&#39;), &#39;argMaxState&#39;: (&#39;argMax&#39;, &#39;State&#39;), &#39;groupArrayMovingAvgState&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;State&#39;), &#39;boundingRatioState&#39;: (&#39;boundingRatio&#39;, &#39;State&#39;), &#39;quantileTDigestState&#39;: (&#39;quantileTDigest&#39;, &#39;State&#39;), &#39;kurtSampState&#39;: (&#39;kurtSamp&#39;, &#39;State&#39;), &#39;quantilesTDigestWeightedState&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;State&#39;), &#39;stddevSampState&#39;: (&#39;stddevSamp&#39;, &#39;State&#39;), &#39;quantilesExactHighState&#39;: (&#39;quantilesExactHigh&#39;, &#39;State&#39;), &#39;sumKahanState&#39;: (&#39;sumKahan&#39;, &#39;State&#39;), &#39;uniqState&#39;: (&#39;uniq&#39;, &#39;State&#39;), &#39;quantilesTimingWeightedState&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;State&#39;), &#39;topKState&#39;: (&#39;topK&#39;, &#39;State&#39;), &#39;quantilesTimingState&#39;: (&#39;quantilesTiming&#39;, &#39;State&#39;), &#39;quantileExactWeightedState&#39;: (&#39;quantileExactWeighted&#39;, &#39;State&#39;), &#39;stochasticLinearRegressionState&#39;: (&#39;stochasticLinearRegression&#39;, &#39;State&#39;), &#39;varSampState&#39;: (&#39;varSamp&#39;, &#39;State&#39;), &#39;groupArrayLastState&#39;: (&#39;groupArrayLast&#39;, &#39;State&#39;), &#39;quantilesGKState&#39;: (&#39;quantilesGK&#39;, &#39;State&#39;), &#39;anyState&#39;: (&#39;any&#39;, &#39;State&#39;), &#39;rankCorrState&#39;: (&#39;rankCorr&#39;, &#39;State&#39;), &#39;quantilesExactState&#39;: (&#39;quantilesExact&#39;, &#39;State&#39;), &#39;argMinState&#39;: (&#39;argMin&#39;, &#39;State&#39;), &#39;anyHeavyState&#39;: (&#39;anyHeavy&#39;, &#39;State&#39;), &#39;quantileGKState&#39;: (&#39;quantileGK&#39;, &#39;State&#39;), &#39;anyLastState&#39;: (&#39;anyLast&#39;, &#39;State&#39;), &#39;maxIntersectionsState&#39;: (&#39;maxIntersections&#39;, &#39;State&#39;), &#39;corrState&#39;: (&#39;corr&#39;, &#39;State&#39;), &#39;deltaSumState&#39;: (&#39;deltaSum&#39;, &#39;State&#39;), &#39;topKWeightedState&#39;: (&#39;topKWeighted&#39;, &#39;State&#39;), &#39;welchTTestState&#39;: (&#39;welchTTest&#39;, &#39;State&#39;), &#39;uniqExactState&#39;: (&#39;uniqExact&#39;, &#39;State&#39;), &#39;uniqThetaState&#39;: (&#39;uniqTheta&#39;, &#39;State&#39;), &#39;deltaSumTimestampState&#39;: (&#39;deltaSumTimestamp&#39;, &#39;State&#39;), &#39;quantileExactHighState&#39;: (&#39;quantileExactHigh&#39;, &#39;State&#39;), &#39;quantileExactState&#39;: (&#39;quantileExact&#39;, &#39;State&#39;), &#39;skewSampState&#39;: (&#39;skewSamp&#39;, &#39;State&#39;), &#39;maxMapState&#39;: (&#39;maxMap&#39;, &#39;State&#39;), &#39;covarPopState&#39;: (&#39;covarPop&#39;, &#39;State&#39;), &#39;kolmogorovSmirnovTestState&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;State&#39;), &#39;quantileState&#39;: (&#39;quantile&#39;, &#39;State&#39;), &#39;theilsUState&#39;: (&#39;theilsU&#39;, &#39;State&#39;), &#39;largestTriangleThreeBucketsState&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;State&#39;), &#39;medianState&#39;: (&#39;median&#39;, &#39;State&#39;), &#39;avgState&#39;: (&#39;avg&#39;, &#39;State&#39;), &#39;quantileBFloat16State&#39;: (&#39;quantileBFloat16&#39;, &#39;State&#39;), &#39;avgWeightedState&#39;: (&#39;avgWeighted&#39;, &#39;State&#39;), &#39;quantilesState&#39;: (&#39;quantiles&#39;, &#39;State&#39;), &#39;categoricalInformationValueState&#39;: (&#39;categoricalInformationValue&#39;, &#39;State&#39;), &#39;quantilesBFloat16WeightedState&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;State&#39;), &#39;cramersVState&#39;: (&#39;cramersV&#39;, &#39;State&#39;), &#39;exponentialMovingAverageState&#39;: (&#39;exponentialMovingAverage&#39;, &#39;State&#39;), &#39;groupBitOrState&#39;: (&#39;groupBitOr&#39;, &#39;State&#39;), &#39;contingencyState&#39;: (&#39;contingency&#39;, &#39;State&#39;), &#39;quantilesDeterministicState&#39;: (&#39;quantilesDeterministic&#39;, &#39;State&#39;), &#39;skewPopState&#39;: (&#39;skewPop&#39;, &#39;State&#39;), &#39;entropyState&#39;: (&#39;entropy&#39;, &#39;State&#39;), &#39;sumMapState&#39;: (&#39;sumMap&#39;, &#39;State&#39;), &#39;minState&#39;: (&#39;min&#39;, &#39;State&#39;), &#39;meanZTestState&#39;: (&#39;meanZTest&#39;, &#39;State&#39;), &#39;first_valueState&#39;: (&#39;first_value&#39;, &#39;State&#39;), &#39;quantileTimingState&#39;: (&#39;quantileTiming&#39;, &#39;State&#39;), &#39;sparkBarState&#39;: (&#39;sparkBar&#39;, &#39;State&#39;), &#39;intervalLengthSumState&#39;: (&#39;intervalLengthSum&#39;, &#39;State&#39;), &#39;minMapState&#39;: (&#39;minMap&#39;, &#39;State&#39;), &#39;kurtPopState&#39;: (&#39;kurtPop&#39;, &#39;State&#39;), &#39;cramersVBiasCorrectedState&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;State&#39;), &#39;groupArrayMovingSumMerge&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Merge&#39;), &#39;countMerge&#39;: (&#39;count&#39;, &#39;Merge&#39;), &#39;sumCountMerge&#39;: (&#39;sumCount&#39;, &#39;Merge&#39;), &#39;simpleLinearRegressionMerge&#39;: (&#39;simpleLinearRegression&#39;, &#39;Merge&#39;), &#39;groupBitmapAndMerge&#39;: (&#39;groupBitmapAnd&#39;, &#39;Merge&#39;), &#39;maxIntersectionsPositionMerge&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Merge&#39;), &#39;varPopMerge&#39;: (&#39;varPop&#39;, &#39;Merge&#39;), &#39;quantileInterpolatedWeightedMerge&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Merge&#39;), &#39;covarSampMerge&#39;: (&#39;covarSamp&#39;, &#39;Merge&#39;), &#39;groupArraySampleMerge&#39;: (&#39;groupArraySample&#39;, &#39;Merge&#39;), &#39;quantilesInterpolatedWeightedMerge&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Merge&#39;), &#39;stddevPopMerge&#39;: (&#39;stddevPop&#39;, &#39;Merge&#39;), &#39;groupArrayInsertAtMerge&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Merge&#39;), &#39;mannWhitneyUTestMerge&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Merge&#39;), &#39;maxMerge&#39;: (&#39;max&#39;, &#39;Merge&#39;), &#39;studentTTestMerge&#39;: (&#39;studentTTest&#39;, &#39;Merge&#39;), &#39;sumWithOverflowMerge&#39;: (&#39;sumWithOverflow&#39;, &#39;Merge&#39;), &#39;quantilesTDigestMerge&#39;: (&#39;quantilesTDigest&#39;, &#39;Merge&#39;), &#39;uniqCombined64Merge&#39;: (&#39;uniqCombined64&#39;, &#39;Merge&#39;), &#39;groupArrayMerge&#39;: (&#39;groupArray&#39;, &#39;Merge&#39;), &#39;quantilesExactWeightedMerge&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Merge&#39;), &#39;quantileDeterministicMerge&#39;: (&#39;quantileDeterministic&#39;, &#39;Merge&#39;), &#39;last_valueMerge&#39;: (&#39;last_value&#39;, &#39;Merge&#39;), &#39;groupBitAndMerge&#39;: (&#39;groupBitAnd&#39;, &#39;Merge&#39;), &#39;sumMerge&#39;: (&#39;sum&#39;, &#39;Merge&#39;), &#39;quantileTimingWeightedMerge&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Merge&#39;), &#39;groupUniqArrayMerge&#39;: (&#39;groupUniqArray&#39;, &#39;Merge&#39;), &#39;quantileBFloat16WeightedMerge&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Merge&#39;), &#39;quantileExactLowMerge&#39;: (&#39;quantileExactLow&#39;, &#39;Merge&#39;), &#39;quantilesExactLowMerge&#39;: (&#39;quantilesExactLow&#39;, &#39;Merge&#39;), &#39;groupBitXorMerge&#39;: (&#39;groupBitXor&#39;, &#39;Merge&#39;), &#39;uniqHLL12Merge&#39;: (&#39;uniqHLL12&#39;, &#39;Merge&#39;), &#39;groupBitmapOrMerge&#39;: (&#39;groupBitmapOr&#39;, &#39;Merge&#39;), &#39;uniqCombinedMerge&#39;: (&#39;uniqCombined&#39;, &#39;Merge&#39;), &#39;quantileTDigestWeightedMerge&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Merge&#39;), &#39;stochasticLogisticRegressionMerge&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Merge&#39;), &#39;quantilesBFloat16Merge&#39;: (&#39;quantilesBFloat16&#39;, &#39;Merge&#39;), &#39;groupBitmapMerge&#39;: (&#39;groupBitmap&#39;, &#39;Merge&#39;), &#39;groupBitmapXorMerge&#39;: (&#39;groupBitmapXor&#39;, &#39;Merge&#39;), &#39;argMaxMerge&#39;: (&#39;argMax&#39;, &#39;Merge&#39;), &#39;groupArrayMovingAvgMerge&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Merge&#39;), &#39;boundingRatioMerge&#39;: (&#39;boundingRatio&#39;, &#39;Merge&#39;), &#39;quantileTDigestMerge&#39;: (&#39;quantileTDigest&#39;, &#39;Merge&#39;), &#39;kurtSampMerge&#39;: (&#39;kurtSamp&#39;, &#39;Merge&#39;), &#39;quantilesTDigestWeightedMerge&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Merge&#39;), &#39;stddevSampMerge&#39;: (&#39;stddevSamp&#39;, &#39;Merge&#39;), &#39;quantilesExactHighMerge&#39;: (&#39;quantilesExactHigh&#39;, &#39;Merge&#39;), &#39;sumKahanMerge&#39;: (&#39;sumKahan&#39;, &#39;Merge&#39;), &#39;uniqMerge&#39;: (&#39;uniq&#39;, &#39;Merge&#39;), &#39;quantilesTimingWeightedMerge&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Merge&#39;), &#39;topKMerge&#39;: (&#39;topK&#39;, &#39;Merge&#39;), &#39;quantilesTimingMerge&#39;: (&#39;quantilesTiming&#39;, &#39;Merge&#39;), &#39;quantileExactWeightedMerge&#39;: (&#39;quantileExactWeighted&#39;, &#39;Merge&#39;), &#39;stochasticLinearRegressionMerge&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Merge&#39;), &#39;varSampMerge&#39;: (&#39;varSamp&#39;, &#39;Merge&#39;), &#39;groupArrayLastMerge&#39;: (&#39;groupArrayLast&#39;, &#39;Merge&#39;), &#39;quantilesGKMerge&#39;: (&#39;quantilesGK&#39;, &#39;Merge&#39;), &#39;anyMerge&#39;: (&#39;any&#39;, &#39;Merge&#39;), &#39;rankCorrMerge&#39;: (&#39;rankCorr&#39;, &#39;Merge&#39;), &#39;quantilesExactMerge&#39;: (&#39;quantilesExact&#39;, &#39;Merge&#39;), &#39;argMinMerge&#39;: (&#39;argMin&#39;, &#39;Merge&#39;), &#39;anyHeavyMerge&#39;: (&#39;anyHeavy&#39;, &#39;Merge&#39;), &#39;quantileGKMerge&#39;: (&#39;quantileGK&#39;, &#39;Merge&#39;), &#39;anyLastMerge&#39;: (&#39;anyLast&#39;, &#39;Merge&#39;), &#39;maxIntersectionsMerge&#39;: (&#39;maxIntersections&#39;, &#39;Merge&#39;), &#39;corrMerge&#39;: (&#39;corr&#39;, &#39;Merge&#39;), &#39;deltaSumMerge&#39;: (&#39;deltaSum&#39;, &#39;Merge&#39;), &#39;topKWeightedMerge&#39;: (&#39;topKWeighted&#39;, &#39;Merge&#39;), &#39;welchTTestMerge&#39;: (&#39;welchTTest&#39;, &#39;Merge&#39;), &#39;uniqExactMerge&#39;: (&#39;uniqExact&#39;, &#39;Merge&#39;), &#39;uniqThetaMerge&#39;: (&#39;uniqTheta&#39;, &#39;Merge&#39;), &#39;deltaSumTimestampMerge&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Merge&#39;), &#39;quantileExactHighMerge&#39;: (&#39;quantileExactHigh&#39;, &#39;Merge&#39;), &#39;quantileExactMerge&#39;: (&#39;quantileExact&#39;, &#39;Merge&#39;), &#39;skewSampMerge&#39;: (&#39;skewSamp&#39;, &#39;Merge&#39;), &#39;maxMapMerge&#39;: (&#39;maxMap&#39;, &#39;Merge&#39;), &#39;covarPopMerge&#39;: (&#39;covarPop&#39;, &#39;Merge&#39;), &#39;kolmogorovSmirnovTestMerge&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Merge&#39;), &#39;quantileMerge&#39;: (&#39;quantile&#39;, &#39;Merge&#39;), &#39;theilsUMerge&#39;: (&#39;theilsU&#39;, &#39;Merge&#39;), &#39;largestTriangleThreeBucketsMerge&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Merge&#39;), &#39;medianMerge&#39;: (&#39;median&#39;, &#39;Merge&#39;), &#39;avgMerge&#39;: (&#39;avg&#39;, &#39;Merge&#39;), &#39;quantileBFloat16Merge&#39;: (&#39;quantileBFloat16&#39;, &#39;Merge&#39;), &#39;avgWeightedMerge&#39;: (&#39;avgWeighted&#39;, &#39;Merge&#39;), &#39;quantilesMerge&#39;: (&#39;quantiles&#39;, &#39;Merge&#39;), &#39;categoricalInformationValueMerge&#39;: (&#39;categoricalInformationValue&#39;, &#39;Merge&#39;), &#39;quantilesBFloat16WeightedMerge&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Merge&#39;), &#39;cramersVMerge&#39;: (&#39;cramersV&#39;, &#39;Merge&#39;), &#39;exponentialMovingAverageMerge&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Merge&#39;), &#39;groupBitOrMerge&#39;: (&#39;groupBitOr&#39;, &#39;Merge&#39;), &#39;contingencyMerge&#39;: (&#39;contingency&#39;, &#39;Merge&#39;), &#39;quantilesDeterministicMerge&#39;: (&#39;quantilesDeterministic&#39;, &#39;Merge&#39;), &#39;skewPopMerge&#39;: (&#39;skewPop&#39;, &#39;Merge&#39;), &#39;entropyMerge&#39;: (&#39;entropy&#39;, &#39;Merge&#39;), &#39;sumMapMerge&#39;: (&#39;sumMap&#39;, &#39;Merge&#39;), &#39;minMerge&#39;: (&#39;min&#39;, &#39;Merge&#39;), &#39;meanZTestMerge&#39;: (&#39;meanZTest&#39;, &#39;Merge&#39;), &#39;first_valueMerge&#39;: (&#39;first_value&#39;, &#39;Merge&#39;), &#39;quantileTimingMerge&#39;: (&#39;quantileTiming&#39;, &#39;Merge&#39;), &#39;sparkBarMerge&#39;: (&#39;sparkBar&#39;, &#39;Merge&#39;), &#39;intervalLengthSumMerge&#39;: (&#39;intervalLengthSum&#39;, &#39;Merge&#39;), &#39;minMapMerge&#39;: (&#39;minMap&#39;, &#39;Merge&#39;), &#39;kurtPopMerge&#39;: (&#39;kurtPop&#39;, &#39;Merge&#39;), &#39;cramersVBiasCorrectedMerge&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Merge&#39;), &#39;groupArrayMovingSumMergeState&#39;: (&#39;groupArrayMovingSum&#39;, &#39;MergeState&#39;), &#39;countMergeState&#39;: (&#39;count&#39;, &#39;MergeState&#39;), &#39;sumCountMergeState&#39;: (&#39;sumCount&#39;, &#39;MergeState&#39;), &#39;simpleLinearRegressionMergeState&#39;: (&#39;simpleLinearRegression&#39;, &#39;MergeState&#39;), &#39;groupBitmapAndMergeState&#39;: (&#39;groupBitmapAnd&#39;, &#39;MergeState&#39;), &#39;maxIntersectionsPositionMergeState&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;MergeState&#39;), &#39;varPopMergeState&#39;: (&#39;varPop&#39;, &#39;MergeState&#39;), &#39;quantileInterpolatedWeightedMergeState&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;MergeState&#39;), &#39;covarSampMergeState&#39;: (&#39;covarSamp&#39;, &#39;MergeState&#39;), &#39;groupArraySampleMergeState&#39;: (&#39;groupArraySample&#39;, &#39;MergeState&#39;), &#39;quantilesInterpolatedWeightedMergeState&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;MergeState&#39;), &#39;stddevPopMergeState&#39;: (&#39;stddevPop&#39;, &#39;MergeState&#39;), &#39;groupArrayInsertAtMergeState&#39;: (&#39;groupArrayInsertAt&#39;, &#39;MergeState&#39;), &#39;mannWhitneyUTestMergeState&#39;: (&#39;mannWhitneyUTest&#39;, &#39;MergeState&#39;), &#39;maxMergeState&#39;: (&#39;max&#39;, &#39;MergeState&#39;), &#39;studentTTestMergeState&#39;: (&#39;studentTTest&#39;, &#39;MergeState&#39;), &#39;sumWithOverflowMergeState&#39;: (&#39;sumWithOverflow&#39;, &#39;MergeState&#39;), &#39;quantilesTDigestMergeState&#39;: (&#39;quantilesTDigest&#39;, &#39;MergeState&#39;), &#39;uniqCombined64MergeState&#39;: (&#39;uniqCombined64&#39;, &#39;MergeState&#39;), &#39;groupArrayMergeState&#39;: (&#39;groupArray&#39;, &#39;MergeState&#39;), &#39;quantilesExactWeightedMergeState&#39;: (&#39;quantilesExactWeighted&#39;, &#39;MergeState&#39;), &#39;quantileDeterministicMergeState&#39;: (&#39;quantileDeterministic&#39;, &#39;MergeState&#39;), &#39;last_valueMergeState&#39;: (&#39;last_value&#39;, &#39;MergeState&#39;), &#39;groupBitAndMergeState&#39;: (&#39;groupBitAnd&#39;, &#39;MergeState&#39;), &#39;sumMergeState&#39;: (&#39;sum&#39;, &#39;MergeState&#39;), &#39;quantileTimingWeightedMergeState&#39;: (&#39;quantileTimingWeighted&#39;, &#39;MergeState&#39;), &#39;groupUniqArrayMergeState&#39;: (&#39;groupUniqArray&#39;, &#39;MergeState&#39;), &#39;quantileBFloat16WeightedMergeState&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;MergeState&#39;), &#39;quantileExactLowMergeState&#39;: (&#39;quantileExactLow&#39;, &#39;MergeState&#39;), &#39;quantilesExactLowMergeState&#39;: (&#39;quantilesExactLow&#39;, &#39;MergeState&#39;), &#39;groupBitXorMergeState&#39;: (&#39;groupBitXor&#39;, &#39;MergeState&#39;), &#39;uniqHLL12MergeState&#39;: (&#39;uniqHLL12&#39;, &#39;MergeState&#39;), &#39;groupBitmapOrMergeState&#39;: (&#39;groupBitmapOr&#39;, &#39;MergeState&#39;), &#39;uniqCombinedMergeState&#39;: (&#39;uniqCombined&#39;, &#39;MergeState&#39;), &#39;quantileTDigestWeightedMergeState&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;MergeState&#39;), &#39;stochasticLogisticRegressionMergeState&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;MergeState&#39;), &#39;quantilesBFloat16MergeState&#39;: (&#39;quantilesBFloat16&#39;, &#39;MergeState&#39;), &#39;groupBitmapMergeState&#39;: (&#39;groupBitmap&#39;, &#39;MergeState&#39;), &#39;groupBitmapXorMergeState&#39;: (&#39;groupBitmapXor&#39;, &#39;MergeState&#39;), &#39;argMaxMergeState&#39;: (&#39;argMax&#39;, &#39;MergeState&#39;), &#39;groupArrayMovingAvgMergeState&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;MergeState&#39;), &#39;boundingRatioMergeState&#39;: (&#39;boundingRatio&#39;, &#39;MergeState&#39;), &#39;quantileTDigestMergeState&#39;: (&#39;quantileTDigest&#39;, &#39;MergeState&#39;), &#39;kurtSampMergeState&#39;: (&#39;kurtSamp&#39;, &#39;MergeState&#39;), &#39;quantilesTDigestWeightedMergeState&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;MergeState&#39;), &#39;stddevSampMergeState&#39;: (&#39;stddevSamp&#39;, &#39;MergeState&#39;), &#39;quantilesExactHighMergeState&#39;: (&#39;quantilesExactHigh&#39;, &#39;MergeState&#39;), &#39;sumKahanMergeState&#39;: (&#39;sumKahan&#39;, &#39;MergeState&#39;), &#39;uniqMergeState&#39;: (&#39;uniq&#39;, &#39;MergeState&#39;), &#39;quantilesTimingWeightedMergeState&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;MergeState&#39;), &#39;topKMergeState&#39;: (&#39;topK&#39;, &#39;MergeState&#39;), &#39;quantilesTimingMergeState&#39;: (&#39;quantilesTiming&#39;, &#39;MergeState&#39;), &#39;quantileExactWeightedMergeState&#39;: (&#39;quantileExactWeighted&#39;, &#39;MergeState&#39;), &#39;stochasticLinearRegressionMergeState&#39;: (&#39;stochasticLinearRegression&#39;, &#39;MergeState&#39;), &#39;varSampMergeState&#39;: (&#39;varSamp&#39;, &#39;MergeState&#39;), &#39;groupArrayLastMergeState&#39;: (&#39;groupArrayLast&#39;, &#39;MergeState&#39;), &#39;quantilesGKMergeState&#39;: (&#39;quantilesGK&#39;, &#39;MergeState&#39;), &#39;anyMergeState&#39;: (&#39;any&#39;, &#39;MergeState&#39;), &#39;rankCorrMergeState&#39;: (&#39;rankCorr&#39;, &#39;MergeState&#39;), &#39;quantilesExactMergeState&#39;: (&#39;quantilesExact&#39;, &#39;MergeState&#39;), &#39;argMinMergeState&#39;: (&#39;argMin&#39;, &#39;MergeState&#39;), &#39;anyHeavyMergeState&#39;: (&#39;anyHeavy&#39;, &#39;MergeState&#39;), &#39;quantileGKMergeState&#39;: (&#39;quantileGK&#39;, &#39;MergeState&#39;), &#39;anyLastMergeState&#39;: (&#39;anyLast&#39;, &#39;MergeState&#39;), &#39;maxIntersectionsMergeState&#39;: (&#39;maxIntersections&#39;, &#39;MergeState&#39;), &#39;corrMergeState&#39;: (&#39;corr&#39;, &#39;MergeState&#39;), &#39;deltaSumMergeState&#39;: (&#39;deltaSum&#39;, &#39;MergeState&#39;), &#39;topKWeightedMergeState&#39;: (&#39;topKWeighted&#39;, &#39;MergeState&#39;), &#39;welchTTestMergeState&#39;: (&#39;welchTTest&#39;, &#39;MergeState&#39;), &#39;uniqExactMergeState&#39;: (&#39;uniqExact&#39;, &#39;MergeState&#39;), &#39;uniqThetaMergeState&#39;: (&#39;uniqTheta&#39;, &#39;MergeState&#39;), &#39;deltaSumTimestampMergeState&#39;: (&#39;deltaSumTimestamp&#39;, &#39;MergeState&#39;), &#39;quantileExactHighMergeState&#39;: (&#39;quantileExactHigh&#39;, &#39;MergeState&#39;), &#39;quantileExactMergeState&#39;: (&#39;quantileExact&#39;, &#39;MergeState&#39;), &#39;skewSampMergeState&#39;: (&#39;skewSamp&#39;, &#39;MergeState&#39;), &#39;maxMapMergeState&#39;: (&#39;maxMap&#39;, &#39;MergeState&#39;), &#39;covarPopMergeState&#39;: (&#39;covarPop&#39;, &#39;MergeState&#39;), &#39;kolmogorovSmirnovTestMergeState&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;MergeState&#39;), &#39;quantileMergeState&#39;: (&#39;quantile&#39;, &#39;MergeState&#39;), &#39;theilsUMergeState&#39;: (&#39;theilsU&#39;, &#39;MergeState&#39;), &#39;largestTriangleThreeBucketsMergeState&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;MergeState&#39;), &#39;medianMergeState&#39;: (&#39;median&#39;, &#39;MergeState&#39;), &#39;avgMergeState&#39;: (&#39;avg&#39;, &#39;MergeState&#39;), &#39;quantileBFloat16MergeState&#39;: (&#39;quantileBFloat16&#39;, &#39;MergeState&#39;), &#39;avgWeightedMergeState&#39;: (&#39;avgWeighted&#39;, &#39;MergeState&#39;), &#39;quantilesMergeState&#39;: (&#39;quantiles&#39;, &#39;MergeState&#39;), &#39;categoricalInformationValueMergeState&#39;: (&#39;categoricalInformationValue&#39;, &#39;MergeState&#39;), &#39;quantilesBFloat16WeightedMergeState&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;MergeState&#39;), &#39;cramersVMergeState&#39;: (&#39;cramersV&#39;, &#39;MergeState&#39;), &#39;exponentialMovingAverageMergeState&#39;: (&#39;exponentialMovingAverage&#39;, &#39;MergeState&#39;), &#39;groupBitOrMergeState&#39;: (&#39;groupBitOr&#39;, &#39;MergeState&#39;), &#39;contingencyMergeState&#39;: (&#39;contingency&#39;, &#39;MergeState&#39;), &#39;quantilesDeterministicMergeState&#39;: (&#39;quantilesDeterministic&#39;, &#39;MergeState&#39;), &#39;skewPopMergeState&#39;: (&#39;skewPop&#39;, &#39;MergeState&#39;), &#39;entropyMergeState&#39;: (&#39;entropy&#39;, &#39;MergeState&#39;), &#39;sumMapMergeState&#39;: (&#39;sumMap&#39;, &#39;MergeState&#39;), &#39;minMergeState&#39;: (&#39;min&#39;, &#39;MergeState&#39;), &#39;meanZTestMergeState&#39;: (&#39;meanZTest&#39;, &#39;MergeState&#39;), &#39;first_valueMergeState&#39;: (&#39;first_value&#39;, &#39;MergeState&#39;), &#39;quantileTimingMergeState&#39;: (&#39;quantileTiming&#39;, &#39;MergeState&#39;), &#39;sparkBarMergeState&#39;: (&#39;sparkBar&#39;, &#39;MergeState&#39;), &#39;intervalLengthSumMergeState&#39;: (&#39;intervalLengthSum&#39;, &#39;MergeState&#39;), &#39;minMapMergeState&#39;: (&#39;minMap&#39;, &#39;MergeState&#39;), &#39;kurtPopMergeState&#39;: (&#39;kurtPop&#39;, &#39;MergeState&#39;), &#39;cramersVBiasCorrectedMergeState&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;MergeState&#39;), &#39;groupArrayMovingSumForEach&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ForEach&#39;), &#39;countForEach&#39;: (&#39;count&#39;, &#39;ForEach&#39;), &#39;sumCountForEach&#39;: (&#39;sumCount&#39;, &#39;ForEach&#39;), &#39;simpleLinearRegressionForEach&#39;: (&#39;simpleLinearRegression&#39;, &#39;ForEach&#39;), &#39;groupBitmapAndForEach&#39;: (&#39;groupBitmapAnd&#39;, &#39;ForEach&#39;), &#39;maxIntersectionsPositionForEach&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ForEach&#39;), &#39;varPopForEach&#39;: (&#39;varPop&#39;, &#39;ForEach&#39;), &#39;quantileInterpolatedWeightedForEach&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ForEach&#39;), &#39;covarSampForEach&#39;: (&#39;covarSamp&#39;, &#39;ForEach&#39;), &#39;groupArraySampleForEach&#39;: (&#39;groupArraySample&#39;, &#39;ForEach&#39;), &#39;quantilesInterpolatedWeightedForEach&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ForEach&#39;), &#39;stddevPopForEach&#39;: (&#39;stddevPop&#39;, &#39;ForEach&#39;), &#39;groupArrayInsertAtForEach&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ForEach&#39;), &#39;mannWhitneyUTestForEach&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ForEach&#39;), &#39;maxForEach&#39;: (&#39;max&#39;, &#39;ForEach&#39;), &#39;studentTTestForEach&#39;: (&#39;studentTTest&#39;, &#39;ForEach&#39;), &#39;sumWithOverflowForEach&#39;: (&#39;sumWithOverflow&#39;, &#39;ForEach&#39;), &#39;quantilesTDigestForEach&#39;: (&#39;quantilesTDigest&#39;, &#39;ForEach&#39;), &#39;uniqCombined64ForEach&#39;: (&#39;uniqCombined64&#39;, &#39;ForEach&#39;), &#39;groupArrayForEach&#39;: (&#39;groupArray&#39;, &#39;ForEach&#39;), &#39;quantilesExactWeightedForEach&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ForEach&#39;), &#39;quantileDeterministicForEach&#39;: (&#39;quantileDeterministic&#39;, &#39;ForEach&#39;), &#39;last_valueForEach&#39;: (&#39;last_value&#39;, &#39;ForEach&#39;), &#39;groupBitAndForEach&#39;: (&#39;groupBitAnd&#39;, &#39;ForEach&#39;), &#39;sumForEach&#39;: (&#39;sum&#39;, &#39;ForEach&#39;), &#39;quantileTimingWeightedForEach&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ForEach&#39;), &#39;groupUniqArrayForEach&#39;: (&#39;groupUniqArray&#39;, &#39;ForEach&#39;), &#39;quantileBFloat16WeightedForEach&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ForEach&#39;), &#39;quantileExactLowForEach&#39;: (&#39;quantileExactLow&#39;, &#39;ForEach&#39;), &#39;quantilesExactLowForEach&#39;: (&#39;quantilesExactLow&#39;, &#39;ForEach&#39;), &#39;groupBitXorForEach&#39;: (&#39;groupBitXor&#39;, &#39;ForEach&#39;), &#39;uniqHLL12ForEach&#39;: (&#39;uniqHLL12&#39;, &#39;ForEach&#39;), &#39;groupBitmapOrForEach&#39;: (&#39;groupBitmapOr&#39;, &#39;ForEach&#39;), &#39;uniqCombinedForEach&#39;: (&#39;uniqCombined&#39;, &#39;ForEach&#39;), &#39;quantileTDigestWeightedForEach&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ForEach&#39;), &#39;stochasticLogisticRegressionForEach&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ForEach&#39;), &#39;quantilesBFloat16ForEach&#39;: (&#39;quantilesBFloat16&#39;, &#39;ForEach&#39;), &#39;groupBitmapForEach&#39;: (&#39;groupBitmap&#39;, &#39;ForEach&#39;), &#39;groupBitmapXorForEach&#39;: (&#39;groupBitmapXor&#39;, &#39;ForEach&#39;), &#39;argMaxForEach&#39;: (&#39;argMax&#39;, &#39;ForEach&#39;), &#39;groupArrayMovingAvgForEach&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ForEach&#39;), &#39;boundingRatioForEach&#39;: (&#39;boundingRatio&#39;, &#39;ForEach&#39;), &#39;quantileTDigestForEach&#39;: (&#39;quantileTDigest&#39;, &#39;ForEach&#39;), &#39;kurtSampForEach&#39;: (&#39;kurtSamp&#39;, &#39;ForEach&#39;), &#39;quantilesTDigestWeightedForEach&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ForEach&#39;), &#39;stddevSampForEach&#39;: (&#39;stddevSamp&#39;, &#39;ForEach&#39;), &#39;quantilesExactHighForEach&#39;: (&#39;quantilesExactHigh&#39;, &#39;ForEach&#39;), &#39;sumKahanForEach&#39;: (&#39;sumKahan&#39;, &#39;ForEach&#39;), &#39;uniqForEach&#39;: (&#39;uniq&#39;, &#39;ForEach&#39;), &#39;quantilesTimingWeightedForEach&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ForEach&#39;), &#39;topKForEach&#39;: (&#39;topK&#39;, &#39;ForEach&#39;), &#39;quantilesTimingForEach&#39;: (&#39;quantilesTiming&#39;, &#39;ForEach&#39;), &#39;quantileExactWeightedForEach&#39;: (&#39;quantileExactWeighted&#39;, &#39;ForEach&#39;), &#39;stochasticLinearRegressionForEach&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ForEach&#39;), &#39;varSampForEach&#39;: (&#39;varSamp&#39;, &#39;ForEach&#39;), &#39;groupArrayLastForEach&#39;: (&#39;groupArrayLast&#39;, &#39;ForEach&#39;), &#39;quantilesGKForEach&#39;: (&#39;quantilesGK&#39;, &#39;ForEach&#39;), &#39;anyForEach&#39;: (&#39;any&#39;, &#39;ForEach&#39;), &#39;rankCorrForEach&#39;: (&#39;rankCorr&#39;, &#39;ForEach&#39;), &#39;quantilesExactForEach&#39;: (&#39;quantilesExact&#39;, &#39;ForEach&#39;), &#39;argMinForEach&#39;: (&#39;argMin&#39;, &#39;ForEach&#39;), &#39;anyHeavyForEach&#39;: (&#39;anyHeavy&#39;, &#39;ForEach&#39;), &#39;quantileGKForEach&#39;: (&#39;quantileGK&#39;, &#39;ForEach&#39;), &#39;anyLastForEach&#39;: (&#39;anyLast&#39;, &#39;ForEach&#39;), &#39;maxIntersectionsForEach&#39;: (&#39;maxIntersections&#39;, &#39;ForEach&#39;), &#39;corrForEach&#39;: (&#39;corr&#39;, &#39;ForEach&#39;), &#39;deltaSumForEach&#39;: (&#39;deltaSum&#39;, &#39;ForEach&#39;), &#39;topKWeightedForEach&#39;: (&#39;topKWeighted&#39;, &#39;ForEach&#39;), &#39;welchTTestForEach&#39;: (&#39;welchTTest&#39;, &#39;ForEach&#39;), &#39;uniqExactForEach&#39;: (&#39;uniqExact&#39;, &#39;ForEach&#39;), &#39;uniqThetaForEach&#39;: (&#39;uniqTheta&#39;, &#39;ForEach&#39;), &#39;deltaSumTimestampForEach&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ForEach&#39;), &#39;quantileExactHighForEach&#39;: (&#39;quantileExactHigh&#39;, &#39;ForEach&#39;), &#39;quantileExactForEach&#39;: (&#39;quantileExact&#39;, &#39;ForEach&#39;), &#39;skewSampForEach&#39;: (&#39;skewSamp&#39;, &#39;ForEach&#39;), &#39;maxMapForEach&#39;: (&#39;maxMap&#39;, &#39;ForEach&#39;), &#39;covarPopForEach&#39;: (&#39;covarPop&#39;, &#39;ForEach&#39;), &#39;kolmogorovSmirnovTestForEach&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ForEach&#39;), &#39;quantileForEach&#39;: (&#39;quantile&#39;, &#39;ForEach&#39;), &#39;theilsUForEach&#39;: (&#39;theilsU&#39;, &#39;ForEach&#39;), &#39;largestTriangleThreeBucketsForEach&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ForEach&#39;), &#39;medianForEach&#39;: (&#39;median&#39;, &#39;ForEach&#39;), &#39;avgForEach&#39;: (&#39;avg&#39;, &#39;ForEach&#39;), &#39;quantileBFloat16ForEach&#39;: (&#39;quantileBFloat16&#39;, &#39;ForEach&#39;), &#39;avgWeightedForEach&#39;: (&#39;avgWeighted&#39;, &#39;ForEach&#39;), &#39;quantilesForEach&#39;: (&#39;quantiles&#39;, &#39;ForEach&#39;), &#39;categoricalInformationValueForEach&#39;: (&#39;categoricalInformationValue&#39;, &#39;ForEach&#39;), &#39;quantilesBFloat16WeightedForEach&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ForEach&#39;), &#39;cramersVForEach&#39;: (&#39;cramersV&#39;, &#39;ForEach&#39;), &#39;exponentialMovingAverageForEach&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ForEach&#39;), &#39;groupBitOrForEach&#39;: (&#39;groupBitOr&#39;, &#39;ForEach&#39;), &#39;contingencyForEach&#39;: (&#39;contingency&#39;, &#39;ForEach&#39;), &#39;quantilesDeterministicForEach&#39;: (&#39;quantilesDeterministic&#39;, &#39;ForEach&#39;), &#39;skewPopForEach&#39;: (&#39;skewPop&#39;, &#39;ForEach&#39;), &#39;entropyForEach&#39;: (&#39;entropy&#39;, &#39;ForEach&#39;), &#39;sumMapForEach&#39;: (&#39;sumMap&#39;, &#39;ForEach&#39;), &#39;minForEach&#39;: (&#39;min&#39;, &#39;ForEach&#39;), &#39;meanZTestForEach&#39;: (&#39;meanZTest&#39;, &#39;ForEach&#39;), &#39;first_valueForEach&#39;: (&#39;first_value&#39;, &#39;ForEach&#39;), &#39;quantileTimingForEach&#39;: (&#39;quantileTiming&#39;, &#39;ForEach&#39;), &#39;sparkBarForEach&#39;: (&#39;sparkBar&#39;, &#39;ForEach&#39;), &#39;intervalLengthSumForEach&#39;: (&#39;intervalLengthSum&#39;, &#39;ForEach&#39;), &#39;minMapForEach&#39;: (&#39;minMap&#39;, &#39;ForEach&#39;), &#39;kurtPopForEach&#39;: (&#39;kurtPop&#39;, &#39;ForEach&#39;), &#39;cramersVBiasCorrectedForEach&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ForEach&#39;), &#39;groupArrayMovingSumDistinct&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Distinct&#39;), &#39;countDistinct&#39;: (&#39;count&#39;, &#39;Distinct&#39;), &#39;sumCountDistinct&#39;: (&#39;sumCount&#39;, &#39;Distinct&#39;), &#39;simpleLinearRegressionDistinct&#39;: (&#39;simpleLinearRegression&#39;, &#39;Distinct&#39;), &#39;groupBitmapAndDistinct&#39;: (&#39;groupBitmapAnd&#39;, &#39;Distinct&#39;), &#39;maxIntersectionsPositionDistinct&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Distinct&#39;), &#39;varPopDistinct&#39;: (&#39;varPop&#39;, &#39;Distinct&#39;), &#39;quantileInterpolatedWeightedDistinct&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Distinct&#39;), &#39;covarSampDistinct&#39;: (&#39;covarSamp&#39;, &#39;Distinct&#39;), &#39;groupArraySampleDistinct&#39;: (&#39;groupArraySample&#39;, &#39;Distinct&#39;), &#39;quantilesInterpolatedWeightedDistinct&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Distinct&#39;), &#39;stddevPopDistinct&#39;: (&#39;stddevPop&#39;, &#39;Distinct&#39;), &#39;groupArrayInsertAtDistinct&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Distinct&#39;), &#39;mannWhitneyUTestDistinct&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Distinct&#39;), &#39;maxDistinct&#39;: (&#39;max&#39;, &#39;Distinct&#39;), &#39;studentTTestDistinct&#39;: (&#39;studentTTest&#39;, &#39;Distinct&#39;), &#39;sumWithOverflowDistinct&#39;: (&#39;sumWithOverflow&#39;, &#39;Distinct&#39;), &#39;quantilesTDigestDistinct&#39;: (&#39;quantilesTDigest&#39;, &#39;Distinct&#39;), &#39;uniqCombined64Distinct&#39;: (&#39;uniqCombined64&#39;, &#39;Distinct&#39;), &#39;groupArrayDistinct&#39;: (&#39;groupArray&#39;, &#39;Distinct&#39;), &#39;quantilesExactWeightedDistinct&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Distinct&#39;), &#39;quantileDeterministicDistinct&#39;: (&#39;quantileDeterministic&#39;, &#39;Distinct&#39;), &#39;last_valueDistinct&#39;: (&#39;last_value&#39;, &#39;Distinct&#39;), &#39;groupBitAndDistinct&#39;: (&#39;groupBitAnd&#39;, &#39;Distinct&#39;), &#39;sumDistinct&#39;: (&#39;sum&#39;, &#39;Distinct&#39;), &#39;quantileTimingWeightedDistinct&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Distinct&#39;), &#39;groupUniqArrayDistinct&#39;: (&#39;groupUniqArray&#39;, &#39;Distinct&#39;), &#39;quantileBFloat16WeightedDistinct&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Distinct&#39;), &#39;quantileExactLowDistinct&#39;: (&#39;quantileExactLow&#39;, &#39;Distinct&#39;), &#39;quantilesExactLowDistinct&#39;: (&#39;quantilesExactLow&#39;, &#39;Distinct&#39;), &#39;groupBitXorDistinct&#39;: (&#39;groupBitXor&#39;, &#39;Distinct&#39;), &#39;uniqHLL12Distinct&#39;: (&#39;uniqHLL12&#39;, &#39;Distinct&#39;), &#39;groupBitmapOrDistinct&#39;: (&#39;groupBitmapOr&#39;, &#39;Distinct&#39;), &#39;uniqCombinedDistinct&#39;: (&#39;uniqCombined&#39;, &#39;Distinct&#39;), &#39;quantileTDigestWeightedDistinct&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Distinct&#39;), &#39;stochasticLogisticRegressionDistinct&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Distinct&#39;), &#39;quantilesBFloat16Distinct&#39;: (&#39;quantilesBFloat16&#39;, &#39;Distinct&#39;), &#39;groupBitmapDistinct&#39;: (&#39;groupBitmap&#39;, &#39;Distinct&#39;), &#39;groupBitmapXorDistinct&#39;: (&#39;groupBitmapXor&#39;, &#39;Distinct&#39;), &#39;argMaxDistinct&#39;: (&#39;argMax&#39;, &#39;Distinct&#39;), &#39;groupArrayMovingAvgDistinct&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Distinct&#39;), &#39;boundingRatioDistinct&#39;: (&#39;boundingRatio&#39;, &#39;Distinct&#39;), &#39;quantileTDigestDistinct&#39;: (&#39;quantileTDigest&#39;, &#39;Distinct&#39;), &#39;kurtSampDistinct&#39;: (&#39;kurtSamp&#39;, &#39;Distinct&#39;), &#39;quantilesTDigestWeightedDistinct&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Distinct&#39;), &#39;stddevSampDistinct&#39;: (&#39;stddevSamp&#39;, &#39;Distinct&#39;), &#39;quantilesExactHighDistinct&#39;: (&#39;quantilesExactHigh&#39;, &#39;Distinct&#39;), &#39;sumKahanDistinct&#39;: (&#39;sumKahan&#39;, &#39;Distinct&#39;), &#39;uniqDistinct&#39;: (&#39;uniq&#39;, &#39;Distinct&#39;), &#39;quantilesTimingWeightedDistinct&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Distinct&#39;), &#39;topKDistinct&#39;: (&#39;topK&#39;, &#39;Distinct&#39;), &#39;quantilesTimingDistinct&#39;: (&#39;quantilesTiming&#39;, &#39;Distinct&#39;), &#39;quantileExactWeightedDistinct&#39;: (&#39;quantileExactWeighted&#39;, &#39;Distinct&#39;), &#39;stochasticLinearRegressionDistinct&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Distinct&#39;), &#39;varSampDistinct&#39;: (&#39;varSamp&#39;, &#39;Distinct&#39;), &#39;groupArrayLastDistinct&#39;: (&#39;groupArrayLast&#39;, &#39;Distinct&#39;), &#39;quantilesGKDistinct&#39;: (&#39;quantilesGK&#39;, &#39;Distinct&#39;), &#39;anyDistinct&#39;: (&#39;any&#39;, &#39;Distinct&#39;), &#39;rankCorrDistinct&#39;: (&#39;rankCorr&#39;, &#39;Distinct&#39;), &#39;quantilesExactDistinct&#39;: (&#39;quantilesExact&#39;, &#39;Distinct&#39;), &#39;argMinDistinct&#39;: (&#39;argMin&#39;, &#39;Distinct&#39;), &#39;anyHeavyDistinct&#39;: (&#39;anyHeavy&#39;, &#39;Distinct&#39;), &#39;quantileGKDistinct&#39;: (&#39;quantileGK&#39;, &#39;Distinct&#39;), &#39;anyLastDistinct&#39;: (&#39;anyLast&#39;, &#39;Distinct&#39;), &#39;maxIntersectionsDistinct&#39;: (&#39;maxIntersections&#39;, &#39;Distinct&#39;), &#39;corrDistinct&#39;: (&#39;corr&#39;, &#39;Distinct&#39;), &#39;deltaSumDistinct&#39;: (&#39;deltaSum&#39;, &#39;Distinct&#39;), &#39;topKWeightedDistinct&#39;: (&#39;topKWeighted&#39;, &#39;Distinct&#39;), &#39;welchTTestDistinct&#39;: (&#39;welchTTest&#39;, &#39;Distinct&#39;), &#39;uniqExactDistinct&#39;: (&#39;uniqExact&#39;, &#39;Distinct&#39;), &#39;uniqThetaDistinct&#39;: (&#39;uniqTheta&#39;, &#39;Distinct&#39;), &#39;deltaSumTimestampDistinct&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Distinct&#39;), &#39;quantileExactHighDistinct&#39;: (&#39;quantileExactHigh&#39;, &#39;Distinct&#39;), &#39;quantileExactDistinct&#39;: (&#39;quantileExact&#39;, &#39;Distinct&#39;), &#39;skewSampDistinct&#39;: (&#39;skewSamp&#39;, &#39;Distinct&#39;), &#39;maxMapDistinct&#39;: (&#39;maxMap&#39;, &#39;Distinct&#39;), &#39;covarPopDistinct&#39;: (&#39;covarPop&#39;, &#39;Distinct&#39;), &#39;kolmogorovSmirnovTestDistinct&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Distinct&#39;), &#39;quantileDistinct&#39;: (&#39;quantile&#39;, &#39;Distinct&#39;), &#39;theilsUDistinct&#39;: (&#39;theilsU&#39;, &#39;Distinct&#39;), &#39;largestTriangleThreeBucketsDistinct&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Distinct&#39;), &#39;medianDistinct&#39;: (&#39;median&#39;, &#39;Distinct&#39;), &#39;avgDistinct&#39;: (&#39;avg&#39;, &#39;Distinct&#39;), &#39;quantileBFloat16Distinct&#39;: (&#39;quantileBFloat16&#39;, &#39;Distinct&#39;), &#39;avgWeightedDistinct&#39;: (&#39;avgWeighted&#39;, &#39;Distinct&#39;), &#39;quantilesDistinct&#39;: (&#39;quantiles&#39;, &#39;Distinct&#39;), &#39;categoricalInformationValueDistinct&#39;: (&#39;categoricalInformationValue&#39;, &#39;Distinct&#39;), &#39;quantilesBFloat16WeightedDistinct&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Distinct&#39;), &#39;cramersVDistinct&#39;: (&#39;cramersV&#39;, &#39;Distinct&#39;), &#39;exponentialMovingAverageDistinct&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Distinct&#39;), &#39;groupBitOrDistinct&#39;: (&#39;groupBitOr&#39;, &#39;Distinct&#39;), &#39;contingencyDistinct&#39;: (&#39;contingency&#39;, &#39;Distinct&#39;), &#39;quantilesDeterministicDistinct&#39;: (&#39;quantilesDeterministic&#39;, &#39;Distinct&#39;), &#39;skewPopDistinct&#39;: (&#39;skewPop&#39;, &#39;Distinct&#39;), &#39;entropyDistinct&#39;: (&#39;entropy&#39;, &#39;Distinct&#39;), &#39;sumMapDistinct&#39;: (&#39;sumMap&#39;, &#39;Distinct&#39;), &#39;minDistinct&#39;: (&#39;min&#39;, &#39;Distinct&#39;), &#39;meanZTestDistinct&#39;: (&#39;meanZTest&#39;, &#39;Distinct&#39;), &#39;first_valueDistinct&#39;: (&#39;first_value&#39;, &#39;Distinct&#39;), &#39;quantileTimingDistinct&#39;: (&#39;quantileTiming&#39;, &#39;Distinct&#39;), &#39;sparkBarDistinct&#39;: (&#39;sparkBar&#39;, &#39;Distinct&#39;), &#39;intervalLengthSumDistinct&#39;: (&#39;intervalLengthSum&#39;, &#39;Distinct&#39;), &#39;minMapDistinct&#39;: (&#39;minMap&#39;, &#39;Distinct&#39;), &#39;kurtPopDistinct&#39;: (&#39;kurtPop&#39;, &#39;Distinct&#39;), &#39;cramersVBiasCorrectedDistinct&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Distinct&#39;), &#39;groupArrayMovingSumOrDefault&#39;: (&#39;groupArrayMovingSum&#39;, &#39;OrDefault&#39;), &#39;countOrDefault&#39;: (&#39;count&#39;, &#39;OrDefault&#39;), &#39;sumCountOrDefault&#39;: (&#39;sumCount&#39;, &#39;OrDefault&#39;), &#39;simpleLinearRegressionOrDefault&#39;: (&#39;simpleLinearRegression&#39;, &#39;OrDefault&#39;), &#39;groupBitmapAndOrDefault&#39;: (&#39;groupBitmapAnd&#39;, &#39;OrDefault&#39;), &#39;maxIntersectionsPositionOrDefault&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;OrDefault&#39;), &#39;varPopOrDefault&#39;: (&#39;varPop&#39;, &#39;OrDefault&#39;), &#39;quantileInterpolatedWeightedOrDefault&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;OrDefault&#39;), &#39;covarSampOrDefault&#39;: (&#39;covarSamp&#39;, &#39;OrDefault&#39;), &#39;groupArraySampleOrDefault&#39;: (&#39;groupArraySample&#39;, &#39;OrDefault&#39;), &#39;quantilesInterpolatedWeightedOrDefault&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;OrDefault&#39;), &#39;stddevPopOrDefault&#39;: (&#39;stddevPop&#39;, &#39;OrDefault&#39;), &#39;groupArrayInsertAtOrDefault&#39;: (&#39;groupArrayInsertAt&#39;, &#39;OrDefault&#39;), &#39;mannWhitneyUTestOrDefault&#39;: (&#39;mannWhitneyUTest&#39;, &#39;OrDefault&#39;), &#39;maxOrDefault&#39;: (&#39;max&#39;, &#39;OrDefault&#39;), &#39;studentTTestOrDefault&#39;: (&#39;studentTTest&#39;, &#39;OrDefault&#39;), &#39;sumWithOverflowOrDefault&#39;: (&#39;sumWithOverflow&#39;, &#39;OrDefault&#39;), &#39;quantilesTDigestOrDefault&#39;: (&#39;quantilesTDigest&#39;, &#39;OrDefault&#39;), &#39;uniqCombined64OrDefault&#39;: (&#39;uniqCombined64&#39;, &#39;OrDefault&#39;), &#39;groupArrayOrDefault&#39;: (&#39;groupArray&#39;, &#39;OrDefault&#39;), &#39;quantilesExactWeightedOrDefault&#39;: (&#39;quantilesExactWeighted&#39;, &#39;OrDefault&#39;), &#39;quantileDeterministicOrDefault&#39;: (&#39;quantileDeterministic&#39;, &#39;OrDefault&#39;), &#39;last_valueOrDefault&#39;: (&#39;last_value&#39;, &#39;OrDefault&#39;), &#39;groupBitAndOrDefault&#39;: (&#39;groupBitAnd&#39;, &#39;OrDefault&#39;), &#39;sumOrDefault&#39;: (&#39;sum&#39;, &#39;OrDefault&#39;), &#39;quantileTimingWeightedOrDefault&#39;: (&#39;quantileTimingWeighted&#39;, &#39;OrDefault&#39;), &#39;groupUniqArrayOrDefault&#39;: (&#39;groupUniqArray&#39;, &#39;OrDefault&#39;), &#39;quantileBFloat16WeightedOrDefault&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;OrDefault&#39;), &#39;quantileExactLowOrDefault&#39;: (&#39;quantileExactLow&#39;, &#39;OrDefault&#39;), &#39;quantilesExactLowOrDefault&#39;: (&#39;quantilesExactLow&#39;, &#39;OrDefault&#39;), &#39;groupBitXorOrDefault&#39;: (&#39;groupBitXor&#39;, &#39;OrDefault&#39;), &#39;uniqHLL12OrDefault&#39;: (&#39;uniqHLL12&#39;, &#39;OrDefault&#39;), &#39;groupBitmapOrOrDefault&#39;: (&#39;groupBitmapOr&#39;, &#39;OrDefault&#39;), &#39;uniqCombinedOrDefault&#39;: (&#39;uniqCombined&#39;, &#39;OrDefault&#39;), &#39;quantileTDigestWeightedOrDefault&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;OrDefault&#39;), &#39;stochasticLogisticRegressionOrDefault&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;OrDefault&#39;), &#39;quantilesBFloat16OrDefault&#39;: (&#39;quantilesBFloat16&#39;, &#39;OrDefault&#39;), &#39;groupBitmapOrDefault&#39;: (&#39;groupBitmap&#39;, &#39;OrDefault&#39;), &#39;groupBitmapXorOrDefault&#39;: (&#39;groupBitmapXor&#39;, &#39;OrDefault&#39;), &#39;argMaxOrDefault&#39;: (&#39;argMax&#39;, &#39;OrDefault&#39;), &#39;groupArrayMovingAvgOrDefault&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;OrDefault&#39;), &#39;boundingRatioOrDefault&#39;: (&#39;boundingRatio&#39;, &#39;OrDefault&#39;), &#39;quantileTDigestOrDefault&#39;: (&#39;quantileTDigest&#39;, &#39;OrDefault&#39;), &#39;kurtSampOrDefault&#39;: (&#39;kurtSamp&#39;, &#39;OrDefault&#39;), &#39;quantilesTDigestWeightedOrDefault&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;OrDefault&#39;), &#39;stddevSampOrDefault&#39;: (&#39;stddevSamp&#39;, &#39;OrDefault&#39;), &#39;quantilesExactHighOrDefault&#39;: (&#39;quantilesExactHigh&#39;, &#39;OrDefault&#39;), &#39;sumKahanOrDefault&#39;: (&#39;sumKahan&#39;, &#39;OrDefault&#39;), &#39;uniqOrDefault&#39;: (&#39;uniq&#39;, &#39;OrDefault&#39;), &#39;quantilesTimingWeightedOrDefault&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;OrDefault&#39;), &#39;topKOrDefault&#39;: (&#39;topK&#39;, &#39;OrDefault&#39;), &#39;quantilesTimingOrDefault&#39;: (&#39;quantilesTiming&#39;, &#39;OrDefault&#39;), &#39;quantileExactWeightedOrDefault&#39;: (&#39;quantileExactWeighted&#39;, &#39;OrDefault&#39;), &#39;stochasticLinearRegressionOrDefault&#39;: (&#39;stochasticLinearRegression&#39;, &#39;OrDefault&#39;), &#39;varSampOrDefault&#39;: (&#39;varSamp&#39;, &#39;OrDefault&#39;), &#39;groupArrayLastOrDefault&#39;: (&#39;groupArrayLast&#39;, &#39;OrDefault&#39;), &#39;quantilesGKOrDefault&#39;: (&#39;quantilesGK&#39;, &#39;OrDefault&#39;), &#39;anyOrDefault&#39;: (&#39;any&#39;, &#39;OrDefault&#39;), &#39;rankCorrOrDefault&#39;: (&#39;rankCorr&#39;, &#39;OrDefault&#39;), &#39;quantilesExactOrDefault&#39;: (&#39;quantilesExact&#39;, &#39;OrDefault&#39;), &#39;argMinOrDefault&#39;: (&#39;argMin&#39;, &#39;OrDefault&#39;), &#39;anyHeavyOrDefault&#39;: (&#39;anyHeavy&#39;, &#39;OrDefault&#39;), &#39;quantileGKOrDefault&#39;: (&#39;quantileGK&#39;, &#39;OrDefault&#39;), &#39;anyLastOrDefault&#39;: (&#39;anyLast&#39;, &#39;OrDefault&#39;), &#39;maxIntersectionsOrDefault&#39;: (&#39;maxIntersections&#39;, &#39;OrDefault&#39;), &#39;corrOrDefault&#39;: (&#39;corr&#39;, &#39;OrDefault&#39;), &#39;deltaSumOrDefault&#39;: (&#39;deltaSum&#39;, &#39;OrDefault&#39;), &#39;topKWeightedOrDefault&#39;: (&#39;topKWeighted&#39;, &#39;OrDefault&#39;), &#39;welchTTestOrDefault&#39;: (&#39;welchTTest&#39;, &#39;OrDefault&#39;), &#39;uniqExactOrDefault&#39;: (&#39;uniqExact&#39;, &#39;OrDefault&#39;), &#39;uniqThetaOrDefault&#39;: (&#39;uniqTheta&#39;, &#39;OrDefault&#39;), &#39;deltaSumTimestampOrDefault&#39;: (&#39;deltaSumTimestamp&#39;, &#39;OrDefault&#39;), &#39;quantileExactHighOrDefault&#39;: (&#39;quantileExactHigh&#39;, &#39;OrDefault&#39;), &#39;quantileExactOrDefault&#39;: (&#39;quantileExact&#39;, &#39;OrDefault&#39;), &#39;skewSampOrDefault&#39;: (&#39;skewSamp&#39;, &#39;OrDefault&#39;), &#39;maxMapOrDefault&#39;: (&#39;maxMap&#39;, &#39;OrDefault&#39;), &#39;covarPopOrDefault&#39;: (&#39;covarPop&#39;, &#39;OrDefault&#39;), &#39;kolmogorovSmirnovTestOrDefault&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;OrDefault&#39;), &#39;quantileOrDefault&#39;: (&#39;quantile&#39;, &#39;OrDefault&#39;), &#39;theilsUOrDefault&#39;: (&#39;theilsU&#39;, &#39;OrDefault&#39;), &#39;largestTriangleThreeBucketsOrDefault&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;OrDefault&#39;), &#39;medianOrDefault&#39;: (&#39;median&#39;, &#39;OrDefault&#39;), &#39;avgOrDefault&#39;: (&#39;avg&#39;, &#39;OrDefault&#39;), &#39;quantileBFloat16OrDefault&#39;: (&#39;quantileBFloat16&#39;, &#39;OrDefault&#39;), &#39;avgWeightedOrDefault&#39;: (&#39;avgWeighted&#39;, &#39;OrDefault&#39;), &#39;quantilesOrDefault&#39;: (&#39;quantiles&#39;, &#39;OrDefault&#39;), &#39;categoricalInformationValueOrDefault&#39;: (&#39;categoricalInformationValue&#39;, &#39;OrDefault&#39;), &#39;quantilesBFloat16WeightedOrDefault&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;OrDefault&#39;), &#39;cramersVOrDefault&#39;: (&#39;cramersV&#39;, &#39;OrDefault&#39;), &#39;exponentialMovingAverageOrDefault&#39;: (&#39;exponentialMovingAverage&#39;, &#39;OrDefault&#39;), &#39;groupBitOrOrDefault&#39;: (&#39;groupBitOr&#39;, &#39;OrDefault&#39;), &#39;contingencyOrDefault&#39;: (&#39;contingency&#39;, &#39;OrDefault&#39;), &#39;quantilesDeterministicOrDefault&#39;: (&#39;quantilesDeterministic&#39;, &#39;OrDefault&#39;), &#39;skewPopOrDefault&#39;: (&#39;skewPop&#39;, &#39;OrDefault&#39;), &#39;entropyOrDefault&#39;: (&#39;entropy&#39;, &#39;OrDefault&#39;), &#39;sumMapOrDefault&#39;: (&#39;sumMap&#39;, &#39;OrDefault&#39;), &#39;minOrDefault&#39;: (&#39;min&#39;, &#39;OrDefault&#39;), &#39;meanZTestOrDefault&#39;: (&#39;meanZTest&#39;, &#39;OrDefault&#39;), &#39;first_valueOrDefault&#39;: (&#39;first_value&#39;, &#39;OrDefault&#39;), &#39;quantileTimingOrDefault&#39;: (&#39;quantileTiming&#39;, &#39;OrDefault&#39;), &#39;sparkBarOrDefault&#39;: (&#39;sparkBar&#39;, &#39;OrDefault&#39;), &#39;intervalLengthSumOrDefault&#39;: (&#39;intervalLengthSum&#39;, &#39;OrDefault&#39;), &#39;minMapOrDefault&#39;: (&#39;minMap&#39;, &#39;OrDefault&#39;), &#39;kurtPopOrDefault&#39;: (&#39;kurtPop&#39;, &#39;OrDefault&#39;), &#39;cramersVBiasCorrectedOrDefault&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;OrDefault&#39;), &#39;groupArrayMovingSumOrNull&#39;: (&#39;groupArrayMovingSum&#39;, &#39;OrNull&#39;), &#39;countOrNull&#39;: (&#39;count&#39;, &#39;OrNull&#39;), &#39;sumCountOrNull&#39;: (&#39;sumCount&#39;, &#39;OrNull&#39;), &#39;simpleLinearRegressionOrNull&#39;: (&#39;simpleLinearRegression&#39;, &#39;OrNull&#39;), &#39;groupBitmapAndOrNull&#39;: (&#39;groupBitmapAnd&#39;, &#39;OrNull&#39;), &#39;maxIntersectionsPositionOrNull&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;OrNull&#39;), &#39;varPopOrNull&#39;: (&#39;varPop&#39;, &#39;OrNull&#39;), &#39;quantileInterpolatedWeightedOrNull&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;OrNull&#39;), &#39;covarSampOrNull&#39;: (&#39;covarSamp&#39;, &#39;OrNull&#39;), &#39;groupArraySampleOrNull&#39;: (&#39;groupArraySample&#39;, &#39;OrNull&#39;), &#39;quantilesInterpolatedWeightedOrNull&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;OrNull&#39;), &#39;stddevPopOrNull&#39;: (&#39;stddevPop&#39;, &#39;OrNull&#39;), &#39;groupArrayInsertAtOrNull&#39;: (&#39;groupArrayInsertAt&#39;, &#39;OrNull&#39;), &#39;mannWhitneyUTestOrNull&#39;: (&#39;mannWhitneyUTest&#39;, &#39;OrNull&#39;), &#39;maxOrNull&#39;: (&#39;max&#39;, &#39;OrNull&#39;), &#39;studentTTestOrNull&#39;: (&#39;studentTTest&#39;, &#39;OrNull&#39;), &#39;sumWithOverflowOrNull&#39;: (&#39;sumWithOverflow&#39;, &#39;OrNull&#39;), &#39;quantilesTDigestOrNull&#39;: (&#39;quantilesTDigest&#39;, &#39;OrNull&#39;), &#39;uniqCombined64OrNull&#39;: (&#39;uniqCombined64&#39;, &#39;OrNull&#39;), &#39;groupArrayOrNull&#39;: (&#39;groupArray&#39;, &#39;OrNull&#39;), &#39;quantilesExactWeightedOrNull&#39;: (&#39;quantilesExactWeighted&#39;, &#39;OrNull&#39;), &#39;quantileDeterministicOrNull&#39;: (&#39;quantileDeterministic&#39;, &#39;OrNull&#39;), &#39;last_valueOrNull&#39;: (&#39;last_value&#39;, &#39;OrNull&#39;), &#39;groupBitAndOrNull&#39;: (&#39;groupBitAnd&#39;, &#39;OrNull&#39;), &#39;sumOrNull&#39;: (&#39;sum&#39;, &#39;OrNull&#39;), &#39;quantileTimingWeightedOrNull&#39;: (&#39;quantileTimingWeighted&#39;, &#39;OrNull&#39;), &#39;groupUniqArrayOrNull&#39;: (&#39;groupUniqArray&#39;, &#39;OrNull&#39;), &#39;quantileBFloat16WeightedOrNull&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;OrNull&#39;), &#39;quantileExactLowOrNull&#39;: (&#39;quantileExactLow&#39;, &#39;OrNull&#39;), &#39;quantilesExactLowOrNull&#39;: (&#39;quantilesExactLow&#39;, &#39;OrNull&#39;), &#39;groupBitXorOrNull&#39;: (&#39;groupBitXor&#39;, &#39;OrNull&#39;), &#39;uniqHLL12OrNull&#39;: (&#39;uniqHLL12&#39;, &#39;OrNull&#39;), &#39;groupBitmapOrOrNull&#39;: (&#39;groupBitmapOr&#39;, &#39;OrNull&#39;), &#39;uniqCombinedOrNull&#39;: (&#39;uniqCombined&#39;, &#39;OrNull&#39;), &#39;quantileTDigestWeightedOrNull&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;OrNull&#39;), &#39;stochasticLogisticRegressionOrNull&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;OrNull&#39;), &#39;quantilesBFloat16OrNull&#39;: (&#39;quantilesBFloat16&#39;, &#39;OrNull&#39;), &#39;groupBitmapOrNull&#39;: (&#39;groupBitmap&#39;, &#39;OrNull&#39;), &#39;groupBitmapXorOrNull&#39;: (&#39;groupBitmapXor&#39;, &#39;OrNull&#39;), &#39;argMaxOrNull&#39;: (&#39;argMax&#39;, &#39;OrNull&#39;), &#39;groupArrayMovingAvgOrNull&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;OrNull&#39;), &#39;boundingRatioOrNull&#39;: (&#39;boundingRatio&#39;, &#39;OrNull&#39;), &#39;quantileTDigestOrNull&#39;: (&#39;quantileTDigest&#39;, &#39;OrNull&#39;), &#39;kurtSampOrNull&#39;: (&#39;kurtSamp&#39;, &#39;OrNull&#39;), &#39;quantilesTDigestWeightedOrNull&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;OrNull&#39;), &#39;stddevSampOrNull&#39;: (&#39;stddevSamp&#39;, &#39;OrNull&#39;), &#39;quantilesExactHighOrNull&#39;: (&#39;quantilesExactHigh&#39;, &#39;OrNull&#39;), &#39;sumKahanOrNull&#39;: (&#39;sumKahan&#39;, &#39;OrNull&#39;), &#39;uniqOrNull&#39;: (&#39;uniq&#39;, &#39;OrNull&#39;), &#39;quantilesTimingWeightedOrNull&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;OrNull&#39;), &#39;topKOrNull&#39;: (&#39;topK&#39;, &#39;OrNull&#39;), &#39;quantilesTimingOrNull&#39;: (&#39;quantilesTiming&#39;, &#39;OrNull&#39;), &#39;quantileExactWeightedOrNull&#39;: (&#39;quantileExactWeighted&#39;, &#39;OrNull&#39;), &#39;stochasticLinearRegressionOrNull&#39;: (&#39;stochasticLinearRegression&#39;, &#39;OrNull&#39;), &#39;varSampOrNull&#39;: (&#39;varSamp&#39;, &#39;OrNull&#39;), &#39;groupArrayLastOrNull&#39;: (&#39;groupArrayLast&#39;, &#39;OrNull&#39;), &#39;quantilesGKOrNull&#39;: (&#39;quantilesGK&#39;, &#39;OrNull&#39;), &#39;anyOrNull&#39;: (&#39;any&#39;, &#39;OrNull&#39;), &#39;rankCorrOrNull&#39;: (&#39;rankCorr&#39;, &#39;OrNull&#39;), &#39;quantilesExactOrNull&#39;: (&#39;quantilesExact&#39;, &#39;OrNull&#39;), &#39;argMinOrNull&#39;: (&#39;argMin&#39;, &#39;OrNull&#39;), &#39;anyHeavyOrNull&#39;: (&#39;anyHeavy&#39;, &#39;OrNull&#39;), &#39;quantileGKOrNull&#39;: (&#39;quantileGK&#39;, &#39;OrNull&#39;), &#39;anyLastOrNull&#39;: (&#39;anyLast&#39;, &#39;OrNull&#39;), &#39;maxIntersectionsOrNull&#39;: (&#39;maxIntersections&#39;, &#39;OrNull&#39;), &#39;corrOrNull&#39;: (&#39;corr&#39;, &#39;OrNull&#39;), &#39;deltaSumOrNull&#39;: (&#39;deltaSum&#39;, &#39;OrNull&#39;), &#39;topKWeightedOrNull&#39;: (&#39;topKWeighted&#39;, &#39;OrNull&#39;), &#39;welchTTestOrNull&#39;: (&#39;welchTTest&#39;, &#39;OrNull&#39;), &#39;uniqExactOrNull&#39;: (&#39;uniqExact&#39;, &#39;OrNull&#39;), &#39;uniqThetaOrNull&#39;: (&#39;uniqTheta&#39;, &#39;OrNull&#39;), &#39;deltaSumTimestampOrNull&#39;: (&#39;deltaSumTimestamp&#39;, &#39;OrNull&#39;), &#39;quantileExactHighOrNull&#39;: (&#39;quantileExactHigh&#39;, &#39;OrNull&#39;), &#39;quantileExactOrNull&#39;: (&#39;quantileExact&#39;, &#39;OrNull&#39;), &#39;skewSampOrNull&#39;: (&#39;skewSamp&#39;, &#39;OrNull&#39;), &#39;maxMapOrNull&#39;: (&#39;maxMap&#39;, &#39;OrNull&#39;), &#39;covarPopOrNull&#39;: (&#39;covarPop&#39;, &#39;OrNull&#39;), &#39;kolmogorovSmirnovTestOrNull&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;OrNull&#39;), &#39;quantileOrNull&#39;: (&#39;quantile&#39;, &#39;OrNull&#39;), &#39;theilsUOrNull&#39;: (&#39;theilsU&#39;, &#39;OrNull&#39;), &#39;largestTriangleThreeBucketsOrNull&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;OrNull&#39;), &#39;medianOrNull&#39;: (&#39;median&#39;, &#39;OrNull&#39;), &#39;avgOrNull&#39;: (&#39;avg&#39;, &#39;OrNull&#39;), &#39;quantileBFloat16OrNull&#39;: (&#39;quantileBFloat16&#39;, &#39;OrNull&#39;), &#39;avgWeightedOrNull&#39;: (&#39;avgWeighted&#39;, &#39;OrNull&#39;), &#39;quantilesOrNull&#39;: (&#39;quantiles&#39;, &#39;OrNull&#39;), &#39;categoricalInformationValueOrNull&#39;: (&#39;categoricalInformationValue&#39;, &#39;OrNull&#39;), &#39;quantilesBFloat16WeightedOrNull&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;OrNull&#39;), &#39;cramersVOrNull&#39;: (&#39;cramersV&#39;, &#39;OrNull&#39;), &#39;exponentialMovingAverageOrNull&#39;: (&#39;exponentialMovingAverage&#39;, &#39;OrNull&#39;), &#39;groupBitOrOrNull&#39;: (&#39;groupBitOr&#39;, &#39;OrNull&#39;), &#39;contingencyOrNull&#39;: (&#39;contingency&#39;, &#39;OrNull&#39;), &#39;quantilesDeterministicOrNull&#39;: (&#39;quantilesDeterministic&#39;, &#39;OrNull&#39;), &#39;skewPopOrNull&#39;: (&#39;skewPop&#39;, &#39;OrNull&#39;), &#39;entropyOrNull&#39;: (&#39;entropy&#39;, &#39;OrNull&#39;), &#39;sumMapOrNull&#39;: (&#39;sumMap&#39;, &#39;OrNull&#39;), &#39;minOrNull&#39;: (&#39;min&#39;, &#39;OrNull&#39;), &#39;meanZTestOrNull&#39;: (&#39;meanZTest&#39;, &#39;OrNull&#39;), &#39;first_valueOrNull&#39;: (&#39;first_value&#39;, &#39;OrNull&#39;), &#39;quantileTimingOrNull&#39;: (&#39;quantileTiming&#39;, &#39;OrNull&#39;), &#39;sparkBarOrNull&#39;: (&#39;sparkBar&#39;, &#39;OrNull&#39;), &#39;intervalLengthSumOrNull&#39;: (&#39;intervalLengthSum&#39;, &#39;OrNull&#39;), &#39;minMapOrNull&#39;: (&#39;minMap&#39;, &#39;OrNull&#39;), &#39;kurtPopOrNull&#39;: (&#39;kurtPop&#39;, &#39;OrNull&#39;), &#39;cramersVBiasCorrectedOrNull&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;OrNull&#39;), &#39;groupArrayMovingSumResample&#39;: (&#39;groupArrayMovingSum&#39;, &#39;Resample&#39;), &#39;countResample&#39;: (&#39;count&#39;, &#39;Resample&#39;), &#39;sumCountResample&#39;: (&#39;sumCount&#39;, &#39;Resample&#39;), &#39;simpleLinearRegressionResample&#39;: (&#39;simpleLinearRegression&#39;, &#39;Resample&#39;), &#39;groupBitmapAndResample&#39;: (&#39;groupBitmapAnd&#39;, &#39;Resample&#39;), &#39;maxIntersectionsPositionResample&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;Resample&#39;), &#39;varPopResample&#39;: (&#39;varPop&#39;, &#39;Resample&#39;), &#39;quantileInterpolatedWeightedResample&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;Resample&#39;), &#39;covarSampResample&#39;: (&#39;covarSamp&#39;, &#39;Resample&#39;), &#39;groupArraySampleResample&#39;: (&#39;groupArraySample&#39;, &#39;Resample&#39;), &#39;quantilesInterpolatedWeightedResample&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;Resample&#39;), &#39;stddevPopResample&#39;: (&#39;stddevPop&#39;, &#39;Resample&#39;), &#39;groupArrayInsertAtResample&#39;: (&#39;groupArrayInsertAt&#39;, &#39;Resample&#39;), &#39;mannWhitneyUTestResample&#39;: (&#39;mannWhitneyUTest&#39;, &#39;Resample&#39;), &#39;maxResample&#39;: (&#39;max&#39;, &#39;Resample&#39;), &#39;studentTTestResample&#39;: (&#39;studentTTest&#39;, &#39;Resample&#39;), &#39;sumWithOverflowResample&#39;: (&#39;sumWithOverflow&#39;, &#39;Resample&#39;), &#39;quantilesTDigestResample&#39;: (&#39;quantilesTDigest&#39;, &#39;Resample&#39;), &#39;uniqCombined64Resample&#39;: (&#39;uniqCombined64&#39;, &#39;Resample&#39;), &#39;groupArrayResample&#39;: (&#39;groupArray&#39;, &#39;Resample&#39;), &#39;quantilesExactWeightedResample&#39;: (&#39;quantilesExactWeighted&#39;, &#39;Resample&#39;), &#39;quantileDeterministicResample&#39;: (&#39;quantileDeterministic&#39;, &#39;Resample&#39;), &#39;last_valueResample&#39;: (&#39;last_value&#39;, &#39;Resample&#39;), &#39;groupBitAndResample&#39;: (&#39;groupBitAnd&#39;, &#39;Resample&#39;), &#39;sumResample&#39;: (&#39;sum&#39;, &#39;Resample&#39;), &#39;quantileTimingWeightedResample&#39;: (&#39;quantileTimingWeighted&#39;, &#39;Resample&#39;), &#39;groupUniqArrayResample&#39;: (&#39;groupUniqArray&#39;, &#39;Resample&#39;), &#39;quantileBFloat16WeightedResample&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;Resample&#39;), &#39;quantileExactLowResample&#39;: (&#39;quantileExactLow&#39;, &#39;Resample&#39;), &#39;quantilesExactLowResample&#39;: (&#39;quantilesExactLow&#39;, &#39;Resample&#39;), &#39;groupBitXorResample&#39;: (&#39;groupBitXor&#39;, &#39;Resample&#39;), &#39;uniqHLL12Resample&#39;: (&#39;uniqHLL12&#39;, &#39;Resample&#39;), &#39;groupBitmapOrResample&#39;: (&#39;groupBitmapOr&#39;, &#39;Resample&#39;), &#39;uniqCombinedResample&#39;: (&#39;uniqCombined&#39;, &#39;Resample&#39;), &#39;quantileTDigestWeightedResample&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;Resample&#39;), &#39;stochasticLogisticRegressionResample&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;Resample&#39;), &#39;quantilesBFloat16Resample&#39;: (&#39;quantilesBFloat16&#39;, &#39;Resample&#39;), &#39;groupBitmapResample&#39;: (&#39;groupBitmap&#39;, &#39;Resample&#39;), &#39;groupBitmapXorResample&#39;: (&#39;groupBitmapXor&#39;, &#39;Resample&#39;), &#39;argMaxResample&#39;: (&#39;argMax&#39;, &#39;Resample&#39;), &#39;groupArrayMovingAvgResample&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;Resample&#39;), &#39;boundingRatioResample&#39;: (&#39;boundingRatio&#39;, &#39;Resample&#39;), &#39;quantileTDigestResample&#39;: (&#39;quantileTDigest&#39;, &#39;Resample&#39;), &#39;kurtSampResample&#39;: (&#39;kurtSamp&#39;, &#39;Resample&#39;), &#39;quantilesTDigestWeightedResample&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;Resample&#39;), &#39;stddevSampResample&#39;: (&#39;stddevSamp&#39;, &#39;Resample&#39;), &#39;quantilesExactHighResample&#39;: (&#39;quantilesExactHigh&#39;, &#39;Resample&#39;), &#39;sumKahanResample&#39;: (&#39;sumKahan&#39;, &#39;Resample&#39;), &#39;uniqResample&#39;: (&#39;uniq&#39;, &#39;Resample&#39;), &#39;quantilesTimingWeightedResample&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;Resample&#39;), &#39;topKResample&#39;: (&#39;topK&#39;, &#39;Resample&#39;), &#39;quantilesTimingResample&#39;: (&#39;quantilesTiming&#39;, &#39;Resample&#39;), &#39;quantileExactWeightedResample&#39;: (&#39;quantileExactWeighted&#39;, &#39;Resample&#39;), &#39;stochasticLinearRegressionResample&#39;: (&#39;stochasticLinearRegression&#39;, &#39;Resample&#39;), &#39;varSampResample&#39;: (&#39;varSamp&#39;, &#39;Resample&#39;), &#39;groupArrayLastResample&#39;: (&#39;groupArrayLast&#39;, &#39;Resample&#39;), &#39;quantilesGKResample&#39;: (&#39;quantilesGK&#39;, &#39;Resample&#39;), &#39;anyResample&#39;: (&#39;any&#39;, &#39;Resample&#39;), &#39;rankCorrResample&#39;: (&#39;rankCorr&#39;, &#39;Resample&#39;), &#39;quantilesExactResample&#39;: (&#39;quantilesExact&#39;, &#39;Resample&#39;), &#39;argMinResample&#39;: (&#39;argMin&#39;, &#39;Resample&#39;), &#39;anyHeavyResample&#39;: (&#39;anyHeavy&#39;, &#39;Resample&#39;), &#39;quantileGKResample&#39;: (&#39;quantileGK&#39;, &#39;Resample&#39;), &#39;anyLastResample&#39;: (&#39;anyLast&#39;, &#39;Resample&#39;), &#39;maxIntersectionsResample&#39;: (&#39;maxIntersections&#39;, &#39;Resample&#39;), &#39;corrResample&#39;: (&#39;corr&#39;, &#39;Resample&#39;), &#39;deltaSumResample&#39;: (&#39;deltaSum&#39;, &#39;Resample&#39;), &#39;topKWeightedResample&#39;: (&#39;topKWeighted&#39;, &#39;Resample&#39;), &#39;welchTTestResample&#39;: (&#39;welchTTest&#39;, &#39;Resample&#39;), &#39;uniqExactResample&#39;: (&#39;uniqExact&#39;, &#39;Resample&#39;), &#39;uniqThetaResample&#39;: (&#39;uniqTheta&#39;, &#39;Resample&#39;), &#39;deltaSumTimestampResample&#39;: (&#39;deltaSumTimestamp&#39;, &#39;Resample&#39;), &#39;quantileExactHighResample&#39;: (&#39;quantileExactHigh&#39;, &#39;Resample&#39;), &#39;quantileExactResample&#39;: (&#39;quantileExact&#39;, &#39;Resample&#39;), &#39;skewSampResample&#39;: (&#39;skewSamp&#39;, &#39;Resample&#39;), &#39;maxMapResample&#39;: (&#39;maxMap&#39;, &#39;Resample&#39;), &#39;covarPopResample&#39;: (&#39;covarPop&#39;, &#39;Resample&#39;), &#39;kolmogorovSmirnovTestResample&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;Resample&#39;), &#39;quantileResample&#39;: (&#39;quantile&#39;, &#39;Resample&#39;), &#39;theilsUResample&#39;: (&#39;theilsU&#39;, &#39;Resample&#39;), &#39;largestTriangleThreeBucketsResample&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;Resample&#39;), &#39;medianResample&#39;: (&#39;median&#39;, &#39;Resample&#39;), &#39;avgResample&#39;: (&#39;avg&#39;, &#39;Resample&#39;), &#39;quantileBFloat16Resample&#39;: (&#39;quantileBFloat16&#39;, &#39;Resample&#39;), &#39;avgWeightedResample&#39;: (&#39;avgWeighted&#39;, &#39;Resample&#39;), &#39;quantilesResample&#39;: (&#39;quantiles&#39;, &#39;Resample&#39;), &#39;categoricalInformationValueResample&#39;: (&#39;categoricalInformationValue&#39;, &#39;Resample&#39;), &#39;quantilesBFloat16WeightedResample&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;Resample&#39;), &#39;cramersVResample&#39;: (&#39;cramersV&#39;, &#39;Resample&#39;), &#39;exponentialMovingAverageResample&#39;: (&#39;exponentialMovingAverage&#39;, &#39;Resample&#39;), &#39;groupBitOrResample&#39;: (&#39;groupBitOr&#39;, &#39;Resample&#39;), &#39;contingencyResample&#39;: (&#39;contingency&#39;, &#39;Resample&#39;), &#39;quantilesDeterministicResample&#39;: (&#39;quantilesDeterministic&#39;, &#39;Resample&#39;), &#39;skewPopResample&#39;: (&#39;skewPop&#39;, &#39;Resample&#39;), &#39;entropyResample&#39;: (&#39;entropy&#39;, &#39;Resample&#39;), &#39;sumMapResample&#39;: (&#39;sumMap&#39;, &#39;Resample&#39;), &#39;minResample&#39;: (&#39;min&#39;, &#39;Resample&#39;), &#39;meanZTestResample&#39;: (&#39;meanZTest&#39;, &#39;Resample&#39;), &#39;first_valueResample&#39;: (&#39;first_value&#39;, &#39;Resample&#39;), &#39;quantileTimingResample&#39;: (&#39;quantileTiming&#39;, &#39;Resample&#39;), &#39;sparkBarResample&#39;: (&#39;sparkBar&#39;, &#39;Resample&#39;), &#39;intervalLengthSumResample&#39;: (&#39;intervalLengthSum&#39;, &#39;Resample&#39;), &#39;minMapResample&#39;: (&#39;minMap&#39;, &#39;Resample&#39;), &#39;kurtPopResample&#39;: (&#39;kurtPop&#39;, &#39;Resample&#39;), &#39;cramersVBiasCorrectedResample&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;Resample&#39;), &#39;groupArrayMovingSumArgMin&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ArgMin&#39;), &#39;countArgMin&#39;: (&#39;count&#39;, &#39;ArgMin&#39;), &#39;sumCountArgMin&#39;: (&#39;sumCount&#39;, &#39;ArgMin&#39;), &#39;simpleLinearRegressionArgMin&#39;: (&#39;simpleLinearRegression&#39;, &#39;ArgMin&#39;), &#39;groupBitmapAndArgMin&#39;: (&#39;groupBitmapAnd&#39;, &#39;ArgMin&#39;), &#39;maxIntersectionsPositionArgMin&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ArgMin&#39;), &#39;varPopArgMin&#39;: (&#39;varPop&#39;, &#39;ArgMin&#39;), &#39;quantileInterpolatedWeightedArgMin&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ArgMin&#39;), &#39;covarSampArgMin&#39;: (&#39;covarSamp&#39;, &#39;ArgMin&#39;), &#39;groupArraySampleArgMin&#39;: (&#39;groupArraySample&#39;, &#39;ArgMin&#39;), &#39;quantilesInterpolatedWeightedArgMin&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ArgMin&#39;), &#39;stddevPopArgMin&#39;: (&#39;stddevPop&#39;, &#39;ArgMin&#39;), &#39;groupArrayInsertAtArgMin&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ArgMin&#39;), &#39;mannWhitneyUTestArgMin&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ArgMin&#39;), &#39;maxArgMin&#39;: (&#39;max&#39;, &#39;ArgMin&#39;), &#39;studentTTestArgMin&#39;: (&#39;studentTTest&#39;, &#39;ArgMin&#39;), &#39;sumWithOverflowArgMin&#39;: (&#39;sumWithOverflow&#39;, &#39;ArgMin&#39;), &#39;quantilesTDigestArgMin&#39;: (&#39;quantilesTDigest&#39;, &#39;ArgMin&#39;), &#39;uniqCombined64ArgMin&#39;: (&#39;uniqCombined64&#39;, &#39;ArgMin&#39;), &#39;groupArrayArgMin&#39;: (&#39;groupArray&#39;, &#39;ArgMin&#39;), &#39;quantilesExactWeightedArgMin&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ArgMin&#39;), &#39;quantileDeterministicArgMin&#39;: (&#39;quantileDeterministic&#39;, &#39;ArgMin&#39;), &#39;last_valueArgMin&#39;: (&#39;last_value&#39;, &#39;ArgMin&#39;), &#39;groupBitAndArgMin&#39;: (&#39;groupBitAnd&#39;, &#39;ArgMin&#39;), &#39;sumArgMin&#39;: (&#39;sum&#39;, &#39;ArgMin&#39;), &#39;quantileTimingWeightedArgMin&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ArgMin&#39;), &#39;groupUniqArrayArgMin&#39;: (&#39;groupUniqArray&#39;, &#39;ArgMin&#39;), &#39;quantileBFloat16WeightedArgMin&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ArgMin&#39;), &#39;quantileExactLowArgMin&#39;: (&#39;quantileExactLow&#39;, &#39;ArgMin&#39;), &#39;quantilesExactLowArgMin&#39;: (&#39;quantilesExactLow&#39;, &#39;ArgMin&#39;), &#39;groupBitXorArgMin&#39;: (&#39;groupBitXor&#39;, &#39;ArgMin&#39;), &#39;uniqHLL12ArgMin&#39;: (&#39;uniqHLL12&#39;, &#39;ArgMin&#39;), &#39;groupBitmapOrArgMin&#39;: (&#39;groupBitmapOr&#39;, &#39;ArgMin&#39;), &#39;uniqCombinedArgMin&#39;: (&#39;uniqCombined&#39;, &#39;ArgMin&#39;), &#39;quantileTDigestWeightedArgMin&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ArgMin&#39;), &#39;stochasticLogisticRegressionArgMin&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ArgMin&#39;), &#39;quantilesBFloat16ArgMin&#39;: (&#39;quantilesBFloat16&#39;, &#39;ArgMin&#39;), &#39;groupBitmapArgMin&#39;: (&#39;groupBitmap&#39;, &#39;ArgMin&#39;), &#39;groupBitmapXorArgMin&#39;: (&#39;groupBitmapXor&#39;, &#39;ArgMin&#39;), &#39;argMaxArgMin&#39;: (&#39;argMax&#39;, &#39;ArgMin&#39;), &#39;groupArrayMovingAvgArgMin&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ArgMin&#39;), &#39;boundingRatioArgMin&#39;: (&#39;boundingRatio&#39;, &#39;ArgMin&#39;), &#39;quantileTDigestArgMin&#39;: (&#39;quantileTDigest&#39;, &#39;ArgMin&#39;), &#39;kurtSampArgMin&#39;: (&#39;kurtSamp&#39;, &#39;ArgMin&#39;), &#39;quantilesTDigestWeightedArgMin&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ArgMin&#39;), &#39;stddevSampArgMin&#39;: (&#39;stddevSamp&#39;, &#39;ArgMin&#39;), &#39;quantilesExactHighArgMin&#39;: (&#39;quantilesExactHigh&#39;, &#39;ArgMin&#39;), &#39;sumKahanArgMin&#39;: (&#39;sumKahan&#39;, &#39;ArgMin&#39;), &#39;uniqArgMin&#39;: (&#39;uniq&#39;, &#39;ArgMin&#39;), &#39;quantilesTimingWeightedArgMin&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ArgMin&#39;), &#39;topKArgMin&#39;: (&#39;topK&#39;, &#39;ArgMin&#39;), &#39;quantilesTimingArgMin&#39;: (&#39;quantilesTiming&#39;, &#39;ArgMin&#39;), &#39;quantileExactWeightedArgMin&#39;: (&#39;quantileExactWeighted&#39;, &#39;ArgMin&#39;), &#39;stochasticLinearRegressionArgMin&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ArgMin&#39;), &#39;varSampArgMin&#39;: (&#39;varSamp&#39;, &#39;ArgMin&#39;), &#39;groupArrayLastArgMin&#39;: (&#39;groupArrayLast&#39;, &#39;ArgMin&#39;), &#39;quantilesGKArgMin&#39;: (&#39;quantilesGK&#39;, &#39;ArgMin&#39;), &#39;anyArgMin&#39;: (&#39;any&#39;, &#39;ArgMin&#39;), &#39;rankCorrArgMin&#39;: (&#39;rankCorr&#39;, &#39;ArgMin&#39;), &#39;quantilesExactArgMin&#39;: (&#39;quantilesExact&#39;, &#39;ArgMin&#39;), &#39;argMinArgMin&#39;: (&#39;argMin&#39;, &#39;ArgMin&#39;), &#39;anyHeavyArgMin&#39;: (&#39;anyHeavy&#39;, &#39;ArgMin&#39;), &#39;quantileGKArgMin&#39;: (&#39;quantileGK&#39;, &#39;ArgMin&#39;), &#39;anyLastArgMin&#39;: (&#39;anyLast&#39;, &#39;ArgMin&#39;), &#39;maxIntersectionsArgMin&#39;: (&#39;maxIntersections&#39;, &#39;ArgMin&#39;), &#39;corrArgMin&#39;: (&#39;corr&#39;, &#39;ArgMin&#39;), &#39;deltaSumArgMin&#39;: (&#39;deltaSum&#39;, &#39;ArgMin&#39;), &#39;topKWeightedArgMin&#39;: (&#39;topKWeighted&#39;, &#39;ArgMin&#39;), &#39;welchTTestArgMin&#39;: (&#39;welchTTest&#39;, &#39;ArgMin&#39;), &#39;uniqExactArgMin&#39;: (&#39;uniqExact&#39;, &#39;ArgMin&#39;), &#39;uniqThetaArgMin&#39;: (&#39;uniqTheta&#39;, &#39;ArgMin&#39;), &#39;deltaSumTimestampArgMin&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ArgMin&#39;), &#39;quantileExactHighArgMin&#39;: (&#39;quantileExactHigh&#39;, &#39;ArgMin&#39;), &#39;quantileExactArgMin&#39;: (&#39;quantileExact&#39;, &#39;ArgMin&#39;), &#39;skewSampArgMin&#39;: (&#39;skewSamp&#39;, &#39;ArgMin&#39;), &#39;maxMapArgMin&#39;: (&#39;maxMap&#39;, &#39;ArgMin&#39;), &#39;covarPopArgMin&#39;: (&#39;covarPop&#39;, &#39;ArgMin&#39;), &#39;kolmogorovSmirnovTestArgMin&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ArgMin&#39;), &#39;quantileArgMin&#39;: (&#39;quantile&#39;, &#39;ArgMin&#39;), &#39;theilsUArgMin&#39;: (&#39;theilsU&#39;, &#39;ArgMin&#39;), &#39;largestTriangleThreeBucketsArgMin&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ArgMin&#39;), &#39;medianArgMin&#39;: (&#39;median&#39;, &#39;ArgMin&#39;), &#39;avgArgMin&#39;: (&#39;avg&#39;, &#39;ArgMin&#39;), &#39;quantileBFloat16ArgMin&#39;: (&#39;quantileBFloat16&#39;, &#39;ArgMin&#39;), &#39;avgWeightedArgMin&#39;: (&#39;avgWeighted&#39;, &#39;ArgMin&#39;), &#39;quantilesArgMin&#39;: (&#39;quantiles&#39;, &#39;ArgMin&#39;), &#39;categoricalInformationValueArgMin&#39;: (&#39;categoricalInformationValue&#39;, &#39;ArgMin&#39;), &#39;quantilesBFloat16WeightedArgMin&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ArgMin&#39;), &#39;cramersVArgMin&#39;: (&#39;cramersV&#39;, &#39;ArgMin&#39;), &#39;exponentialMovingAverageArgMin&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ArgMin&#39;), &#39;groupBitOrArgMin&#39;: (&#39;groupBitOr&#39;, &#39;ArgMin&#39;), &#39;contingencyArgMin&#39;: (&#39;contingency&#39;, &#39;ArgMin&#39;), &#39;quantilesDeterministicArgMin&#39;: (&#39;quantilesDeterministic&#39;, &#39;ArgMin&#39;), &#39;skewPopArgMin&#39;: (&#39;skewPop&#39;, &#39;ArgMin&#39;), &#39;entropyArgMin&#39;: (&#39;entropy&#39;, &#39;ArgMin&#39;), &#39;sumMapArgMin&#39;: (&#39;sumMap&#39;, &#39;ArgMin&#39;), &#39;minArgMin&#39;: (&#39;min&#39;, &#39;ArgMin&#39;), &#39;meanZTestArgMin&#39;: (&#39;meanZTest&#39;, &#39;ArgMin&#39;), &#39;first_valueArgMin&#39;: (&#39;first_value&#39;, &#39;ArgMin&#39;), &#39;quantileTimingArgMin&#39;: (&#39;quantileTiming&#39;, &#39;ArgMin&#39;), &#39;sparkBarArgMin&#39;: (&#39;sparkBar&#39;, &#39;ArgMin&#39;), &#39;intervalLengthSumArgMin&#39;: (&#39;intervalLengthSum&#39;, &#39;ArgMin&#39;), &#39;minMapArgMin&#39;: (&#39;minMap&#39;, &#39;ArgMin&#39;), &#39;kurtPopArgMin&#39;: (&#39;kurtPop&#39;, &#39;ArgMin&#39;), &#39;cramersVBiasCorrectedArgMin&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ArgMin&#39;), &#39;groupArrayMovingSumArgMax&#39;: (&#39;groupArrayMovingSum&#39;, &#39;ArgMax&#39;), &#39;countArgMax&#39;: (&#39;count&#39;, &#39;ArgMax&#39;), &#39;sumCountArgMax&#39;: (&#39;sumCount&#39;, &#39;ArgMax&#39;), &#39;simpleLinearRegressionArgMax&#39;: (&#39;simpleLinearRegression&#39;, &#39;ArgMax&#39;), &#39;groupBitmapAndArgMax&#39;: (&#39;groupBitmapAnd&#39;, &#39;ArgMax&#39;), &#39;maxIntersectionsPositionArgMax&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;ArgMax&#39;), &#39;varPopArgMax&#39;: (&#39;varPop&#39;, &#39;ArgMax&#39;), &#39;quantileInterpolatedWeightedArgMax&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;ArgMax&#39;), &#39;covarSampArgMax&#39;: (&#39;covarSamp&#39;, &#39;ArgMax&#39;), &#39;groupArraySampleArgMax&#39;: (&#39;groupArraySample&#39;, &#39;ArgMax&#39;), &#39;quantilesInterpolatedWeightedArgMax&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;ArgMax&#39;), &#39;stddevPopArgMax&#39;: (&#39;stddevPop&#39;, &#39;ArgMax&#39;), &#39;groupArrayInsertAtArgMax&#39;: (&#39;groupArrayInsertAt&#39;, &#39;ArgMax&#39;), &#39;mannWhitneyUTestArgMax&#39;: (&#39;mannWhitneyUTest&#39;, &#39;ArgMax&#39;), &#39;maxArgMax&#39;: (&#39;max&#39;, &#39;ArgMax&#39;), &#39;studentTTestArgMax&#39;: (&#39;studentTTest&#39;, &#39;ArgMax&#39;), &#39;sumWithOverflowArgMax&#39;: (&#39;sumWithOverflow&#39;, &#39;ArgMax&#39;), &#39;quantilesTDigestArgMax&#39;: (&#39;quantilesTDigest&#39;, &#39;ArgMax&#39;), &#39;uniqCombined64ArgMax&#39;: (&#39;uniqCombined64&#39;, &#39;ArgMax&#39;), &#39;groupArrayArgMax&#39;: (&#39;groupArray&#39;, &#39;ArgMax&#39;), &#39;quantilesExactWeightedArgMax&#39;: (&#39;quantilesExactWeighted&#39;, &#39;ArgMax&#39;), &#39;quantileDeterministicArgMax&#39;: (&#39;quantileDeterministic&#39;, &#39;ArgMax&#39;), &#39;last_valueArgMax&#39;: (&#39;last_value&#39;, &#39;ArgMax&#39;), &#39;groupBitAndArgMax&#39;: (&#39;groupBitAnd&#39;, &#39;ArgMax&#39;), &#39;sumArgMax&#39;: (&#39;sum&#39;, &#39;ArgMax&#39;), &#39;quantileTimingWeightedArgMax&#39;: (&#39;quantileTimingWeighted&#39;, &#39;ArgMax&#39;), &#39;groupUniqArrayArgMax&#39;: (&#39;groupUniqArray&#39;, &#39;ArgMax&#39;), &#39;quantileBFloat16WeightedArgMax&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;ArgMax&#39;), &#39;quantileExactLowArgMax&#39;: (&#39;quantileExactLow&#39;, &#39;ArgMax&#39;), &#39;quantilesExactLowArgMax&#39;: (&#39;quantilesExactLow&#39;, &#39;ArgMax&#39;), &#39;groupBitXorArgMax&#39;: (&#39;groupBitXor&#39;, &#39;ArgMax&#39;), &#39;uniqHLL12ArgMax&#39;: (&#39;uniqHLL12&#39;, &#39;ArgMax&#39;), &#39;groupBitmapOrArgMax&#39;: (&#39;groupBitmapOr&#39;, &#39;ArgMax&#39;), &#39;uniqCombinedArgMax&#39;: (&#39;uniqCombined&#39;, &#39;ArgMax&#39;), &#39;quantileTDigestWeightedArgMax&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;ArgMax&#39;), &#39;stochasticLogisticRegressionArgMax&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;ArgMax&#39;), &#39;quantilesBFloat16ArgMax&#39;: (&#39;quantilesBFloat16&#39;, &#39;ArgMax&#39;), &#39;groupBitmapArgMax&#39;: (&#39;groupBitmap&#39;, &#39;ArgMax&#39;), &#39;groupBitmapXorArgMax&#39;: (&#39;groupBitmapXor&#39;, &#39;ArgMax&#39;), &#39;argMaxArgMax&#39;: (&#39;argMax&#39;, &#39;ArgMax&#39;), &#39;groupArrayMovingAvgArgMax&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;ArgMax&#39;), &#39;boundingRatioArgMax&#39;: (&#39;boundingRatio&#39;, &#39;ArgMax&#39;), &#39;quantileTDigestArgMax&#39;: (&#39;quantileTDigest&#39;, &#39;ArgMax&#39;), &#39;kurtSampArgMax&#39;: (&#39;kurtSamp&#39;, &#39;ArgMax&#39;), &#39;quantilesTDigestWeightedArgMax&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;ArgMax&#39;), &#39;stddevSampArgMax&#39;: (&#39;stddevSamp&#39;, &#39;ArgMax&#39;), &#39;quantilesExactHighArgMax&#39;: (&#39;quantilesExactHigh&#39;, &#39;ArgMax&#39;), &#39;sumKahanArgMax&#39;: (&#39;sumKahan&#39;, &#39;ArgMax&#39;), &#39;uniqArgMax&#39;: (&#39;uniq&#39;, &#39;ArgMax&#39;), &#39;quantilesTimingWeightedArgMax&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;ArgMax&#39;), &#39;topKArgMax&#39;: (&#39;topK&#39;, &#39;ArgMax&#39;), &#39;quantilesTimingArgMax&#39;: (&#39;quantilesTiming&#39;, &#39;ArgMax&#39;), &#39;quantileExactWeightedArgMax&#39;: (&#39;quantileExactWeighted&#39;, &#39;ArgMax&#39;), &#39;stochasticLinearRegressionArgMax&#39;: (&#39;stochasticLinearRegression&#39;, &#39;ArgMax&#39;), &#39;varSampArgMax&#39;: (&#39;varSamp&#39;, &#39;ArgMax&#39;), &#39;groupArrayLastArgMax&#39;: (&#39;groupArrayLast&#39;, &#39;ArgMax&#39;), &#39;quantilesGKArgMax&#39;: (&#39;quantilesGK&#39;, &#39;ArgMax&#39;), &#39;anyArgMax&#39;: (&#39;any&#39;, &#39;ArgMax&#39;), &#39;rankCorrArgMax&#39;: (&#39;rankCorr&#39;, &#39;ArgMax&#39;), &#39;quantilesExactArgMax&#39;: (&#39;quantilesExact&#39;, &#39;ArgMax&#39;), &#39;argMinArgMax&#39;: (&#39;argMin&#39;, &#39;ArgMax&#39;), &#39;anyHeavyArgMax&#39;: (&#39;anyHeavy&#39;, &#39;ArgMax&#39;), &#39;quantileGKArgMax&#39;: (&#39;quantileGK&#39;, &#39;ArgMax&#39;), &#39;anyLastArgMax&#39;: (&#39;anyLast&#39;, &#39;ArgMax&#39;), &#39;maxIntersectionsArgMax&#39;: (&#39;maxIntersections&#39;, &#39;ArgMax&#39;), &#39;corrArgMax&#39;: (&#39;corr&#39;, &#39;ArgMax&#39;), &#39;deltaSumArgMax&#39;: (&#39;deltaSum&#39;, &#39;ArgMax&#39;), &#39;topKWeightedArgMax&#39;: (&#39;topKWeighted&#39;, &#39;ArgMax&#39;), &#39;welchTTestArgMax&#39;: (&#39;welchTTest&#39;, &#39;ArgMax&#39;), &#39;uniqExactArgMax&#39;: (&#39;uniqExact&#39;, &#39;ArgMax&#39;), &#39;uniqThetaArgMax&#39;: (&#39;uniqTheta&#39;, &#39;ArgMax&#39;), &#39;deltaSumTimestampArgMax&#39;: (&#39;deltaSumTimestamp&#39;, &#39;ArgMax&#39;), &#39;quantileExactHighArgMax&#39;: (&#39;quantileExactHigh&#39;, &#39;ArgMax&#39;), &#39;quantileExactArgMax&#39;: (&#39;quantileExact&#39;, &#39;ArgMax&#39;), &#39;skewSampArgMax&#39;: (&#39;skewSamp&#39;, &#39;ArgMax&#39;), &#39;maxMapArgMax&#39;: (&#39;maxMap&#39;, &#39;ArgMax&#39;), &#39;covarPopArgMax&#39;: (&#39;covarPop&#39;, &#39;ArgMax&#39;), &#39;kolmogorovSmirnovTestArgMax&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;ArgMax&#39;), &#39;quantileArgMax&#39;: (&#39;quantile&#39;, &#39;ArgMax&#39;), &#39;theilsUArgMax&#39;: (&#39;theilsU&#39;, &#39;ArgMax&#39;), &#39;largestTriangleThreeBucketsArgMax&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;ArgMax&#39;), &#39;medianArgMax&#39;: (&#39;median&#39;, &#39;ArgMax&#39;), &#39;avgArgMax&#39;: (&#39;avg&#39;, &#39;ArgMax&#39;), &#39;quantileBFloat16ArgMax&#39;: (&#39;quantileBFloat16&#39;, &#39;ArgMax&#39;), &#39;avgWeightedArgMax&#39;: (&#39;avgWeighted&#39;, &#39;ArgMax&#39;), &#39;quantilesArgMax&#39;: (&#39;quantiles&#39;, &#39;ArgMax&#39;), &#39;categoricalInformationValueArgMax&#39;: (&#39;categoricalInformationValue&#39;, &#39;ArgMax&#39;), &#39;quantilesBFloat16WeightedArgMax&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;ArgMax&#39;), &#39;cramersVArgMax&#39;: (&#39;cramersV&#39;, &#39;ArgMax&#39;), &#39;exponentialMovingAverageArgMax&#39;: (&#39;exponentialMovingAverage&#39;, &#39;ArgMax&#39;), &#39;groupBitOrArgMax&#39;: (&#39;groupBitOr&#39;, &#39;ArgMax&#39;), &#39;contingencyArgMax&#39;: (&#39;contingency&#39;, &#39;ArgMax&#39;), &#39;quantilesDeterministicArgMax&#39;: (&#39;quantilesDeterministic&#39;, &#39;ArgMax&#39;), &#39;skewPopArgMax&#39;: (&#39;skewPop&#39;, &#39;ArgMax&#39;), &#39;entropyArgMax&#39;: (&#39;entropy&#39;, &#39;ArgMax&#39;), &#39;sumMapArgMax&#39;: (&#39;sumMap&#39;, &#39;ArgMax&#39;), &#39;minArgMax&#39;: (&#39;min&#39;, &#39;ArgMax&#39;), &#39;meanZTestArgMax&#39;: (&#39;meanZTest&#39;, &#39;ArgMax&#39;), &#39;first_valueArgMax&#39;: (&#39;first_value&#39;, &#39;ArgMax&#39;), &#39;quantileTimingArgMax&#39;: (&#39;quantileTiming&#39;, &#39;ArgMax&#39;), &#39;sparkBarArgMax&#39;: (&#39;sparkBar&#39;, &#39;ArgMax&#39;), &#39;intervalLengthSumArgMax&#39;: (&#39;intervalLengthSum&#39;, &#39;ArgMax&#39;), &#39;minMapArgMax&#39;: (&#39;minMap&#39;, &#39;ArgMax&#39;), &#39;kurtPopArgMax&#39;: (&#39;kurtPop&#39;, &#39;ArgMax&#39;), &#39;cramersVBiasCorrectedArgMax&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;ArgMax&#39;), &#39;groupArrayMovingSum&#39;: (&#39;groupArrayMovingSum&#39;, &#39;&#39;), &#39;count&#39;: (&#39;count&#39;, &#39;&#39;), &#39;sumCount&#39;: (&#39;sumCount&#39;, &#39;&#39;), &#39;simpleLinearRegression&#39;: (&#39;simpleLinearRegression&#39;, &#39;&#39;), &#39;groupBitmapAnd&#39;: (&#39;groupBitmapAnd&#39;, &#39;&#39;), &#39;maxIntersectionsPosition&#39;: (&#39;maxIntersectionsPosition&#39;, &#39;&#39;), &#39;varPop&#39;: (&#39;varPop&#39;, &#39;&#39;), &#39;quantileInterpolatedWeighted&#39;: (&#39;quantileInterpolatedWeighted&#39;, &#39;&#39;), &#39;covarSamp&#39;: (&#39;covarSamp&#39;, &#39;&#39;), &#39;groupArraySample&#39;: (&#39;groupArraySample&#39;, &#39;&#39;), &#39;quantilesInterpolatedWeighted&#39;: (&#39;quantilesInterpolatedWeighted&#39;, &#39;&#39;), &#39;stddevPop&#39;: (&#39;stddevPop&#39;, &#39;&#39;), &#39;groupArrayInsertAt&#39;: (&#39;groupArrayInsertAt&#39;, &#39;&#39;), &#39;mannWhitneyUTest&#39;: (&#39;mannWhitneyUTest&#39;, &#39;&#39;), &#39;max&#39;: (&#39;max&#39;, &#39;&#39;), &#39;studentTTest&#39;: (&#39;studentTTest&#39;, &#39;&#39;), &#39;sumWithOverflow&#39;: (&#39;sumWithOverflow&#39;, &#39;&#39;), &#39;quantilesTDigest&#39;: (&#39;quantilesTDigest&#39;, &#39;&#39;), &#39;uniqCombined64&#39;: (&#39;uniqCombined64&#39;, &#39;&#39;), &#39;groupArray&#39;: (&#39;groupArray&#39;, &#39;&#39;), &#39;quantilesExactWeighted&#39;: (&#39;quantilesExactWeighted&#39;, &#39;&#39;), &#39;quantileDeterministic&#39;: (&#39;quantileDeterministic&#39;, &#39;&#39;), &#39;last_value&#39;: (&#39;last_value&#39;, &#39;&#39;), &#39;groupBitAnd&#39;: (&#39;groupBitAnd&#39;, &#39;&#39;), &#39;sum&#39;: (&#39;sum&#39;, &#39;&#39;), &#39;quantileTimingWeighted&#39;: (&#39;quantileTimingWeighted&#39;, &#39;&#39;), &#39;groupUniqArray&#39;: (&#39;groupUniqArray&#39;, &#39;&#39;), &#39;quantileBFloat16Weighted&#39;: (&#39;quantileBFloat16Weighted&#39;, &#39;&#39;), &#39;quantileExactLow&#39;: (&#39;quantileExactLow&#39;, &#39;&#39;), &#39;quantilesExactLow&#39;: (&#39;quantilesExactLow&#39;, &#39;&#39;), &#39;groupBitXor&#39;: (&#39;groupBitXor&#39;, &#39;&#39;), &#39;uniqHLL12&#39;: (&#39;uniqHLL12&#39;, &#39;&#39;), &#39;groupBitmapOr&#39;: (&#39;groupBitmapOr&#39;, &#39;&#39;), &#39;uniqCombined&#39;: (&#39;uniqCombined&#39;, &#39;&#39;), &#39;quantileTDigestWeighted&#39;: (&#39;quantileTDigestWeighted&#39;, &#39;&#39;), &#39;stochasticLogisticRegression&#39;: (&#39;stochasticLogisticRegression&#39;, &#39;&#39;), &#39;quantilesBFloat16&#39;: (&#39;quantilesBFloat16&#39;, &#39;&#39;), &#39;groupBitmap&#39;: (&#39;groupBitmap&#39;, &#39;&#39;), &#39;groupBitmapXor&#39;: (&#39;groupBitmapXor&#39;, &#39;&#39;), &#39;argMax&#39;: (&#39;argMax&#39;, &#39;&#39;), &#39;groupArrayMovingAvg&#39;: (&#39;groupArrayMovingAvg&#39;, &#39;&#39;), &#39;boundingRatio&#39;: (&#39;boundingRatio&#39;, &#39;&#39;), &#39;quantileTDigest&#39;: (&#39;quantileTDigest&#39;, &#39;&#39;), &#39;kurtSamp&#39;: (&#39;kurtSamp&#39;, &#39;&#39;), &#39;quantilesTDigestWeighted&#39;: (&#39;quantilesTDigestWeighted&#39;, &#39;&#39;), &#39;stddevSamp&#39;: (&#39;stddevSamp&#39;, &#39;&#39;), &#39;quantilesExactHigh&#39;: (&#39;quantilesExactHigh&#39;, &#39;&#39;), &#39;sumKahan&#39;: (&#39;sumKahan&#39;, &#39;&#39;), &#39;uniq&#39;: (&#39;uniq&#39;, &#39;&#39;), &#39;quantilesTimingWeighted&#39;: (&#39;quantilesTimingWeighted&#39;, &#39;&#39;), &#39;topK&#39;: (&#39;topK&#39;, &#39;&#39;), &#39;quantilesTiming&#39;: (&#39;quantilesTiming&#39;, &#39;&#39;), &#39;quantileExactWeighted&#39;: (&#39;quantileExactWeighted&#39;, &#39;&#39;), &#39;stochasticLinearRegression&#39;: (&#39;stochasticLinearRegression&#39;, &#39;&#39;), &#39;varSamp&#39;: (&#39;varSamp&#39;, &#39;&#39;), &#39;groupArrayLast&#39;: (&#39;groupArrayLast&#39;, &#39;&#39;), &#39;quantilesGK&#39;: (&#39;quantilesGK&#39;, &#39;&#39;), &#39;any&#39;: (&#39;any&#39;, &#39;&#39;), &#39;rankCorr&#39;: (&#39;rankCorr&#39;, &#39;&#39;), &#39;quantilesExact&#39;: (&#39;quantilesExact&#39;, &#39;&#39;), &#39;argMin&#39;: (&#39;argMin&#39;, &#39;&#39;), &#39;anyHeavy&#39;: (&#39;anyHeavy&#39;, &#39;&#39;), &#39;quantileGK&#39;: (&#39;quantileGK&#39;, &#39;&#39;), &#39;anyLast&#39;: (&#39;anyLast&#39;, &#39;&#39;), &#39;maxIntersections&#39;: (&#39;maxIntersections&#39;, &#39;&#39;), &#39;corr&#39;: (&#39;corr&#39;, &#39;&#39;), &#39;deltaSum&#39;: (&#39;deltaSum&#39;, &#39;&#39;), &#39;topKWeighted&#39;: (&#39;topKWeighted&#39;, &#39;&#39;), &#39;welchTTest&#39;: (&#39;welchTTest&#39;, &#39;&#39;), &#39;uniqExact&#39;: (&#39;uniqExact&#39;, &#39;&#39;), &#39;uniqTheta&#39;: (&#39;uniqTheta&#39;, &#39;&#39;), &#39;deltaSumTimestamp&#39;: (&#39;deltaSumTimestamp&#39;, &#39;&#39;), &#39;quantileExactHigh&#39;: (&#39;quantileExactHigh&#39;, &#39;&#39;), &#39;quantileExact&#39;: (&#39;quantileExact&#39;, &#39;&#39;), &#39;skewSamp&#39;: (&#39;skewSamp&#39;, &#39;&#39;), &#39;covarPop&#39;: (&#39;covarPop&#39;, &#39;&#39;), &#39;kolmogorovSmirnovTest&#39;: (&#39;kolmogorovSmirnovTest&#39;, &#39;&#39;), &#39;quantile&#39;: (&#39;quantile&#39;, &#39;&#39;), &#39;theilsU&#39;: (&#39;theilsU&#39;, &#39;&#39;), &#39;largestTriangleThreeBuckets&#39;: (&#39;largestTriangleThreeBuckets&#39;, &#39;&#39;), &#39;median&#39;: (&#39;median&#39;, &#39;&#39;), &#39;avg&#39;: (&#39;avg&#39;, &#39;&#39;), &#39;quantileBFloat16&#39;: (&#39;quantileBFloat16&#39;, &#39;&#39;), &#39;avgWeighted&#39;: (&#39;avgWeighted&#39;, &#39;&#39;), &#39;quantiles&#39;: (&#39;quantiles&#39;, &#39;&#39;), &#39;categoricalInformationValue&#39;: (&#39;categoricalInformationValue&#39;, &#39;&#39;), &#39;quantilesBFloat16Weighted&#39;: (&#39;quantilesBFloat16Weighted&#39;, &#39;&#39;), &#39;cramersV&#39;: (&#39;cramersV&#39;, &#39;&#39;), &#39;exponentialMovingAverage&#39;: (&#39;exponentialMovingAverage&#39;, &#39;&#39;), &#39;groupBitOr&#39;: (&#39;groupBitOr&#39;, &#39;&#39;), &#39;contingency&#39;: (&#39;contingency&#39;, &#39;&#39;), &#39;quantilesDeterministic&#39;: (&#39;quantilesDeterministic&#39;, &#39;&#39;), &#39;skewPop&#39;: (&#39;skewPop&#39;, &#39;&#39;), &#39;entropy&#39;: (&#39;entropy&#39;, &#39;&#39;), &#39;min&#39;: (&#39;min&#39;, &#39;&#39;), &#39;meanZTest&#39;: (&#39;meanZTest&#39;, &#39;&#39;), &#39;first_value&#39;: (&#39;first_value&#39;, &#39;&#39;), &#39;quantileTiming&#39;: (&#39;quantileTiming&#39;, &#39;&#39;), &#39;sparkBar&#39;: (&#39;sparkBar&#39;, &#39;&#39;), &#39;intervalLengthSum&#39;: (&#39;intervalLengthSum&#39;, &#39;&#39;), &#39;kurtPop&#39;: (&#39;kurtPop&#39;, &#39;&#39;), &#39;cramersVBiasCorrected&#39;: (&#39;cramersVBiasCorrected&#39;, &#39;&#39;)}</span>
</div>
@@ -2752,7 +2797,7 @@ Default: 3</li>
<div id="ClickHouse.Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS_WITH_ALIASED_ARGS</span> =
-<span class="default_value">{&#39;TUPLE&#39;, &#39;STRUCT&#39;}</span>
+<span class="default_value">{&#39;STRUCT&#39;, &#39;TUPLE&#39;}</span>
</div>
@@ -2817,7 +2862,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">JOIN_KINDS</span> =
<input id="ClickHouse.Parser.JOIN_KINDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;}</span>
</div>
@@ -2830,7 +2875,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="ClickHouse.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -2996,211 +3041,225 @@ Default: 3</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator-505"><a href="#ClickHouse.Generator-505"><span class="linenos">505</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-506"><a href="#ClickHouse.Generator-506"><span class="linenos">506</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-507"><a href="#ClickHouse.Generator-507"><span class="linenos">507</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-508"><a href="#ClickHouse.Generator-508"><span class="linenos">508</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-509"><a href="#ClickHouse.Generator-509"><span class="linenos">509</span></a> <span class="n">TABLESAMPLE_REQUIRES_PARENS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-510"><a href="#ClickHouse.Generator-510"><span class="linenos">510</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-511"><a href="#ClickHouse.Generator-511"><span class="linenos">511</span></a> <span class="n">TABLESAMPLE_KEYWORDS</span> <span class="o">=</span> <span class="s2">&quot;SAMPLE&quot;</span>
-</span><span id="ClickHouse.Generator-512"><a href="#ClickHouse.Generator-512"><span class="linenos">512</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-513"><a href="#ClickHouse.Generator-513"><span class="linenos">513</span></a>
-</span><span id="ClickHouse.Generator-514"><a href="#ClickHouse.Generator-514"><span class="linenos">514</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-515"><a href="#ClickHouse.Generator-515"><span class="linenos">515</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-516"><a href="#ClickHouse.Generator-516"><span class="linenos">516</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-517"><a href="#ClickHouse.Generator-517"><span class="linenos">517</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-518"><a href="#ClickHouse.Generator-518"><span class="linenos">518</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-519"><a href="#ClickHouse.Generator-519"><span class="linenos">519</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-520"><a href="#ClickHouse.Generator-520"><span class="linenos">520</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-521"><a href="#ClickHouse.Generator-521"><span class="linenos">521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-522"><a href="#ClickHouse.Generator-522"><span class="linenos">522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-523"><a href="#ClickHouse.Generator-523"><span class="linenos">523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-524"><a href="#ClickHouse.Generator-524"><span class="linenos">524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-525"><a href="#ClickHouse.Generator-525"><span class="linenos">525</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-526"><a href="#ClickHouse.Generator-526"><span class="linenos">526</span></a>
-</span><span id="ClickHouse.Generator-527"><a href="#ClickHouse.Generator-527"><span class="linenos">527</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-528"><a href="#ClickHouse.Generator-528"><span class="linenos">528</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><span id="ClickHouse.Generator-529"><a href="#ClickHouse.Generator-529"><span class="linenos">529</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-530"><a href="#ClickHouse.Generator-530"><span class="linenos">530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-531"><a href="#ClickHouse.Generator-531"><span class="linenos">531</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-532"><a href="#ClickHouse.Generator-532"><span class="linenos">532</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE32</span><span class="p">:</span> <span class="s2">&quot;Date32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-533"><a href="#ClickHouse.Generator-533"><span class="linenos">533</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-534"><a href="#ClickHouse.Generator-534"><span class="linenos">534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-535"><a href="#ClickHouse.Generator-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-536"><a href="#ClickHouse.Generator-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-537"><a href="#ClickHouse.Generator-537"><span class="linenos">537</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-538"><a href="#ClickHouse.Generator-538"><span class="linenos">538</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-539"><a href="#ClickHouse.Generator-539"><span class="linenos">539</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-540"><a href="#ClickHouse.Generator-540"><span class="linenos">540</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-541"><a href="#ClickHouse.Generator-541"><span class="linenos">541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-542"><a href="#ClickHouse.Generator-542"><span class="linenos">542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-543"><a href="#ClickHouse.Generator-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-544"><a href="#ClickHouse.Generator-544"><span class="linenos">544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-545"><a href="#ClickHouse.Generator-545"><span class="linenos">545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-546"><a href="#ClickHouse.Generator-546"><span class="linenos">546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-547"><a href="#ClickHouse.Generator-547"><span class="linenos">547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-548"><a href="#ClickHouse.Generator-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-549"><a href="#ClickHouse.Generator-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-550"><a href="#ClickHouse.Generator-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-551"><a href="#ClickHouse.Generator-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-552"><a href="#ClickHouse.Generator-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-553"><a href="#ClickHouse.Generator-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-554"><a href="#ClickHouse.Generator-554"><span class="linenos">554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-555"><a href="#ClickHouse.Generator-555"><span class="linenos">555</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-556"><a href="#ClickHouse.Generator-556"><span class="linenos">556</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-557"><a href="#ClickHouse.Generator-557"><span class="linenos">557</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV4</span><span class="p">:</span> <span class="s2">&quot;IPv4&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-558"><a href="#ClickHouse.Generator-558"><span class="linenos">558</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV6</span><span class="p">:</span> <span class="s2">&quot;IPv6&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-559"><a href="#ClickHouse.Generator-559"><span class="linenos">559</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;AggregateFunction&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-560"><a href="#ClickHouse.Generator-560"><span class="linenos">560</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;SimpleAggregateFunction&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-561"><a href="#ClickHouse.Generator-561"><span class="linenos">561</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-562"><a href="#ClickHouse.Generator-562"><span class="linenos">562</span></a>
-</span><span id="ClickHouse.Generator-563"><a href="#ClickHouse.Generator-563"><span class="linenos">563</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-564"><a href="#ClickHouse.Generator-564"><span class="linenos">564</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><span id="ClickHouse.Generator-565"><a href="#ClickHouse.Generator-565"><span class="linenos">565</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-566"><a href="#ClickHouse.Generator-566"><span class="linenos">566</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-567"><a href="#ClickHouse.Generator-567"><span class="linenos">567</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arraySum&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-568"><a href="#ClickHouse.Generator-568"><span class="linenos">568</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMax&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-569"><a href="#ClickHouse.Generator-569"><span class="linenos">569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMin&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-570"><a href="#ClickHouse.Generator-570"><span class="linenos">570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-571"><a href="#ClickHouse.Generator-571"><span class="linenos">571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-572"><a href="#ClickHouse.Generator-572"><span class="linenos">572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;countIf&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-573"><a href="#ClickHouse.Generator-573"><span class="linenos">573</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="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;CURRENT_DATE&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-574"><a href="#ClickHouse.Generator-574"><span class="linenos">574</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-575"><a href="#ClickHouse.Generator-575"><span class="linenos">575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-576"><a href="#ClickHouse.Generator-576"><span class="linenos">576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arrayJoin&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-577"><a href="#ClickHouse.Generator-577"><span class="linenos">577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-578"><a href="#ClickHouse.Generator-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;isNaN&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-579"><a href="#ClickHouse.Generator-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse.Generator-580"><a href="#ClickHouse.Generator-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;nullIf&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-581"><a href="#ClickHouse.Generator-581"><span class="linenos">581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-582"><a href="#ClickHouse.Generator-582"><span class="linenos">582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-583"><a href="#ClickHouse.Generator-583"><span class="linenos">583</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-584"><a href="#ClickHouse.Generator-584"><span class="linenos">584</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-585"><a href="#ClickHouse.Generator-585"><span class="linenos">585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;randCanonical&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-586"><a href="#ClickHouse.Generator-586"><span class="linenos">586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">]),</span>
-</span><span id="ClickHouse.Generator-587"><a href="#ClickHouse.Generator-587"><span class="linenos">587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;startsWith&quot;</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-588"><a href="#ClickHouse.Generator-588"><span class="linenos">588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-589"><a href="#ClickHouse.Generator-589"><span class="linenos">589</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-590"><a href="#ClickHouse.Generator-590"><span class="linenos">590</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
-</span><span id="ClickHouse.Generator-591"><a href="#ClickHouse.Generator-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</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;xor&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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
-</span><span id="ClickHouse.Generator-592"><a href="#ClickHouse.Generator-592"><span class="linenos">592</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-593"><a href="#ClickHouse.Generator-593"><span class="linenos">593</span></a>
-</span><span id="ClickHouse.Generator-594"><a href="#ClickHouse.Generator-594"><span class="linenos">594</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-595"><a href="#ClickHouse.Generator-595"><span class="linenos">595</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><span id="ClickHouse.Generator-596"><a href="#ClickHouse.Generator-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-597"><a href="#ClickHouse.Generator-597"><span class="linenos">597</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-598"><a href="#ClickHouse.Generator-598"><span class="linenos">598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-599"><a href="#ClickHouse.Generator-599"><span class="linenos">599</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-600"><a href="#ClickHouse.Generator-600"><span class="linenos">600</span></a>
-</span><span id="ClickHouse.Generator-601"><a href="#ClickHouse.Generator-601"><span class="linenos">601</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-602"><a href="#ClickHouse.Generator-602"><span class="linenos">602</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="ClickHouse.Generator-603"><a href="#ClickHouse.Generator-603"><span class="linenos">603</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ClickHouse.Generator-604"><a href="#ClickHouse.Generator-604"><span class="linenos">604</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse.Generator-605"><a href="#ClickHouse.Generator-605"><span class="linenos">605</span></a>
-</span><span id="ClickHouse.Generator-606"><a href="#ClickHouse.Generator-606"><span class="linenos">606</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
-</span><span id="ClickHouse.Generator-607"><a href="#ClickHouse.Generator-607"><span class="linenos">607</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
-</span><span id="ClickHouse.Generator-608"><a href="#ClickHouse.Generator-608"><span class="linenos">608</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ClickHouse.Generator-609"><a href="#ClickHouse.Generator-609"><span class="linenos">609</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-610"><a href="#ClickHouse.Generator-610"><span class="linenos">610</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-611"><a href="#ClickHouse.Generator-611"><span class="linenos">611</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-612"><a href="#ClickHouse.Generator-612"><span class="linenos">612</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-613"><a href="#ClickHouse.Generator-613"><span class="linenos">613</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-614"><a href="#ClickHouse.Generator-614"><span class="linenos">614</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-615"><a href="#ClickHouse.Generator-615"><span class="linenos">615</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-616"><a href="#ClickHouse.Generator-616"><span class="linenos">616</span></a> <span class="p">}</span>
-</span><span id="ClickHouse.Generator-617"><a href="#ClickHouse.Generator-617"><span class="linenos">617</span></a>
-</span><span id="ClickHouse.Generator-618"><a href="#ClickHouse.Generator-618"><span class="linenos">618</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-619"><a href="#ClickHouse.Generator-619"><span class="linenos">619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="ClickHouse.Generator-620"><a href="#ClickHouse.Generator-620"><span class="linenos">620</span></a>
-</span><span id="ClickHouse.Generator-621"><a href="#ClickHouse.Generator-621"><span class="linenos">621</span></a> <span class="k">def</span> <span class="nf">_any_to_has</span><span class="p">(</span>
-</span><span id="ClickHouse.Generator-622"><a href="#ClickHouse.Generator-622"><span class="linenos">622</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-623"><a href="#ClickHouse.Generator-623"><span class="linenos">623</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-624"><a href="#ClickHouse.Generator-624"><span class="linenos">624</span></a> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">],</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="ClickHouse.Generator-625"><a href="#ClickHouse.Generator-625"><span class="linenos">625</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="ClickHouse.Generator-626"><a href="#ClickHouse.Generator-626"><span class="linenos">626</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-627"><a href="#ClickHouse.Generator-627"><span class="linenos">627</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-628"><a href="#ClickHouse.Generator-628"><span class="linenos">628</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
-</span><span id="ClickHouse.Generator-629"><a href="#ClickHouse.Generator-629"><span class="linenos">629</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="ClickHouse.Generator-630"><a href="#ClickHouse.Generator-630"><span class="linenos">630</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-631"><a href="#ClickHouse.Generator-631"><span class="linenos">631</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="ClickHouse.Generator-632"><a href="#ClickHouse.Generator-632"><span class="linenos">632</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
-</span><span id="ClickHouse.Generator-633"><a href="#ClickHouse.Generator-633"><span class="linenos">633</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-634"><a href="#ClickHouse.Generator-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="n">default</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-635"><a href="#ClickHouse.Generator-635"><span class="linenos">635</span></a> <span class="k">return</span> <span class="n">prefix</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;has&quot;</span><span class="p">,</span> <span class="n">arr</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-636"><a href="#ClickHouse.Generator-636"><span class="linenos">636</span></a>
-</span><span id="ClickHouse.Generator-637"><a href="#ClickHouse.Generator-637"><span class="linenos">637</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-638"><a href="#ClickHouse.Generator-638"><span class="linenos">638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-639"><a href="#ClickHouse.Generator-639"><span class="linenos">639</span></a>
-</span><span id="ClickHouse.Generator-640"><a href="#ClickHouse.Generator-640"><span class="linenos">640</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-641"><a href="#ClickHouse.Generator-641"><span class="linenos">641</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-642"><a href="#ClickHouse.Generator-642"><span class="linenos">642</span></a>
-</span><span id="ClickHouse.Generator-643"><a href="#ClickHouse.Generator-643"><span class="linenos">643</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-644"><a href="#ClickHouse.Generator-644"><span class="linenos">644</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
-</span><span id="ClickHouse.Generator-645"><a href="#ClickHouse.Generator-645"><span class="linenos">645</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-646"><a href="#ClickHouse.Generator-646"><span class="linenos">646</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="ClickHouse.Generator-647"><a href="#ClickHouse.Generator-647"><span class="linenos">647</span></a>
-</span><span id="ClickHouse.Generator-648"><a href="#ClickHouse.Generator-648"><span class="linenos">648</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-649"><a href="#ClickHouse.Generator-649"><span class="linenos">649</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
-</span><span id="ClickHouse.Generator-650"><a href="#ClickHouse.Generator-650"><span class="linenos">650</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
-</span><span id="ClickHouse.Generator-651"><a href="#ClickHouse.Generator-651"><span class="linenos">651</span></a> <span class="c1">#</span>
-</span><span id="ClickHouse.Generator-652"><a href="#ClickHouse.Generator-652"><span class="linenos">652</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
-</span><span id="ClickHouse.Generator-653"><a href="#ClickHouse.Generator-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-654"><a href="#ClickHouse.Generator-654"><span class="linenos">654</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
-</span><span id="ClickHouse.Generator-655"><a href="#ClickHouse.Generator-655"><span class="linenos">655</span></a>
-</span><span id="ClickHouse.Generator-656"><a href="#ClickHouse.Generator-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-657"><a href="#ClickHouse.Generator-657"><span class="linenos">657</span></a>
-</span><span id="ClickHouse.Generator-658"><a href="#ClickHouse.Generator-658"><span class="linenos">658</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-659"><a href="#ClickHouse.Generator-659"><span class="linenos">659</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-660"><a href="#ClickHouse.Generator-660"><span class="linenos">660</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-661"><a href="#ClickHouse.Generator-661"><span class="linenos">661</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-662"><a href="#ClickHouse.Generator-662"><span class="linenos">662</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator-663"><a href="#ClickHouse.Generator-663"><span class="linenos">663</span></a>
-</span><span id="ClickHouse.Generator-664"><a href="#ClickHouse.Generator-664"><span class="linenos">664</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-665"><a href="#ClickHouse.Generator-665"><span class="linenos">665</span></a>
-</span><span id="ClickHouse.Generator-666"><a href="#ClickHouse.Generator-666"><span class="linenos">666</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="ClickHouse.Generator-667"><a href="#ClickHouse.Generator-667"><span class="linenos">667</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="ClickHouse.Generator-668"><a href="#ClickHouse.Generator-668"><span class="linenos">668</span></a> <span class="p">(</span>
-</span><span id="ClickHouse.Generator-669"><a href="#ClickHouse.Generator-669"><span class="linenos">669</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-670"><a href="#ClickHouse.Generator-670"><span class="linenos">670</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-671"><a href="#ClickHouse.Generator-671"><span class="linenos">671</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse.Generator-672"><a href="#ClickHouse.Generator-672"><span class="linenos">672</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Generator-673"><a href="#ClickHouse.Generator-673"><span class="linenos">673</span></a> <span class="p">(</span>
-</span><span id="ClickHouse.Generator-674"><a href="#ClickHouse.Generator-674"><span class="linenos">674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-675"><a href="#ClickHouse.Generator-675"><span class="linenos">675</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-676"><a href="#ClickHouse.Generator-676"><span class="linenos">676</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse.Generator-677"><a href="#ClickHouse.Generator-677"><span class="linenos">677</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Generator-678"><a href="#ClickHouse.Generator-678"><span class="linenos">678</span></a> <span class="p">]</span>
-</span><span id="ClickHouse.Generator-679"><a href="#ClickHouse.Generator-679"><span class="linenos">679</span></a>
-</span><span id="ClickHouse.Generator-680"><a href="#ClickHouse.Generator-680"><span class="linenos">680</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-681"><a href="#ClickHouse.Generator-681"><span class="linenos">681</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-682"><a href="#ClickHouse.Generator-682"><span class="linenos">682</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator-511"><a href="#ClickHouse.Generator-511"><span class="linenos">511</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-512"><a href="#ClickHouse.Generator-512"><span class="linenos">512</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-513"><a href="#ClickHouse.Generator-513"><span class="linenos">513</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-514"><a href="#ClickHouse.Generator-514"><span class="linenos">514</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-515"><a href="#ClickHouse.Generator-515"><span class="linenos">515</span></a> <span class="n">TABLESAMPLE_REQUIRES_PARENS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-516"><a href="#ClickHouse.Generator-516"><span class="linenos">516</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-517"><a href="#ClickHouse.Generator-517"><span class="linenos">517</span></a> <span class="n">TABLESAMPLE_KEYWORDS</span> <span class="o">=</span> <span class="s2">&quot;SAMPLE&quot;</span>
+</span><span id="ClickHouse.Generator-518"><a href="#ClickHouse.Generator-518"><span class="linenos">518</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-519"><a href="#ClickHouse.Generator-519"><span class="linenos">519</span></a>
+</span><span id="ClickHouse.Generator-520"><a href="#ClickHouse.Generator-520"><span class="linenos">520</span></a> <span class="n">STRING_TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-521"><a href="#ClickHouse.Generator-521"><span class="linenos">521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-522"><a href="#ClickHouse.Generator-522"><span class="linenos">522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-523"><a href="#ClickHouse.Generator-523"><span class="linenos">523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-524"><a href="#ClickHouse.Generator-524"><span class="linenos">524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-525"><a href="#ClickHouse.Generator-525"><span class="linenos">525</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-526"><a href="#ClickHouse.Generator-526"><span class="linenos">526</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-527"><a href="#ClickHouse.Generator-527"><span class="linenos">527</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-528"><a href="#ClickHouse.Generator-528"><span class="linenos">528</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-529"><a href="#ClickHouse.Generator-529"><span class="linenos">529</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-530"><a href="#ClickHouse.Generator-530"><span class="linenos">530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-531"><a href="#ClickHouse.Generator-531"><span class="linenos">531</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-532"><a href="#ClickHouse.Generator-532"><span class="linenos">532</span></a>
+</span><span id="ClickHouse.Generator-533"><a href="#ClickHouse.Generator-533"><span class="linenos">533</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-534"><a href="#ClickHouse.Generator-534"><span class="linenos">534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-535"><a href="#ClickHouse.Generator-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-536"><a href="#ClickHouse.Generator-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-537"><a href="#ClickHouse.Generator-537"><span class="linenos">537</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-538"><a href="#ClickHouse.Generator-538"><span class="linenos">538</span></a>
+</span><span id="ClickHouse.Generator-539"><a href="#ClickHouse.Generator-539"><span class="linenos">539</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-540"><a href="#ClickHouse.Generator-540"><span class="linenos">540</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><span id="ClickHouse.Generator-541"><a href="#ClickHouse.Generator-541"><span class="linenos">541</span></a> <span class="o">**</span><span class="n">STRING_TYPE_MAPPING</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-542"><a href="#ClickHouse.Generator-542"><span class="linenos">542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-543"><a href="#ClickHouse.Generator-543"><span class="linenos">543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-544"><a href="#ClickHouse.Generator-544"><span class="linenos">544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE32</span><span class="p">:</span> <span class="s2">&quot;Date32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-545"><a href="#ClickHouse.Generator-545"><span class="linenos">545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-546"><a href="#ClickHouse.Generator-546"><span class="linenos">546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-547"><a href="#ClickHouse.Generator-547"><span class="linenos">547</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM</span><span class="p">:</span> <span class="s2">&quot;Enum&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-548"><a href="#ClickHouse.Generator-548"><span class="linenos">548</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">:</span> <span class="s2">&quot;Enum8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-549"><a href="#ClickHouse.Generator-549"><span class="linenos">549</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">:</span> <span class="s2">&quot;Enum16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-550"><a href="#ClickHouse.Generator-550"><span class="linenos">550</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">:</span> <span class="s2">&quot;FixedString&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-551"><a href="#ClickHouse.Generator-551"><span class="linenos">551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-552"><a href="#ClickHouse.Generator-552"><span class="linenos">552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-553"><a href="#ClickHouse.Generator-553"><span class="linenos">553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-554"><a href="#ClickHouse.Generator-554"><span class="linenos">554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT128</span><span class="p">:</span> <span class="s2">&quot;Int128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-555"><a href="#ClickHouse.Generator-555"><span class="linenos">555</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT256</span><span class="p">:</span> <span class="s2">&quot;Int256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-556"><a href="#ClickHouse.Generator-556"><span class="linenos">556</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">:</span> <span class="s2">&quot;LowCardinality&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-557"><a href="#ClickHouse.Generator-557"><span class="linenos">557</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-558"><a href="#ClickHouse.Generator-558"><span class="linenos">558</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NESTED</span><span class="p">:</span> <span class="s2">&quot;Nested&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-559"><a href="#ClickHouse.Generator-559"><span class="linenos">559</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-560"><a href="#ClickHouse.Generator-560"><span class="linenos">560</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-561"><a href="#ClickHouse.Generator-561"><span class="linenos">561</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-562"><a href="#ClickHouse.Generator-562"><span class="linenos">562</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-563"><a href="#ClickHouse.Generator-563"><span class="linenos">563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">:</span> <span class="s2">&quot;UInt64&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-564"><a href="#ClickHouse.Generator-564"><span class="linenos">564</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UInt32&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-565"><a href="#ClickHouse.Generator-565"><span class="linenos">565</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT128</span><span class="p">:</span> <span class="s2">&quot;UInt128&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-566"><a href="#ClickHouse.Generator-566"><span class="linenos">566</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT256</span><span class="p">:</span> <span class="s2">&quot;UInt256&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-567"><a href="#ClickHouse.Generator-567"><span class="linenos">567</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">:</span> <span class="s2">&quot;UInt16&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-568"><a href="#ClickHouse.Generator-568"><span class="linenos">568</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">:</span> <span class="s2">&quot;UInt8&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-569"><a href="#ClickHouse.Generator-569"><span class="linenos">569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV4</span><span class="p">:</span> <span class="s2">&quot;IPv4&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-570"><a href="#ClickHouse.Generator-570"><span class="linenos">570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">IPV6</span><span class="p">:</span> <span class="s2">&quot;IPv6&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-571"><a href="#ClickHouse.Generator-571"><span class="linenos">571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;AggregateFunction&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-572"><a href="#ClickHouse.Generator-572"><span class="linenos">572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">:</span> <span class="s2">&quot;SimpleAggregateFunction&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-573"><a href="#ClickHouse.Generator-573"><span class="linenos">573</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-574"><a href="#ClickHouse.Generator-574"><span class="linenos">574</span></a>
+</span><span id="ClickHouse.Generator-575"><a href="#ClickHouse.Generator-575"><span class="linenos">575</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-576"><a href="#ClickHouse.Generator-576"><span class="linenos">576</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><span id="ClickHouse.Generator-577"><a href="#ClickHouse.Generator-577"><span class="linenos">577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;any&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-578"><a href="#ClickHouse.Generator-578"><span class="linenos">578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;uniq&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-579"><a href="#ClickHouse.Generator-579"><span class="linenos">579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arraySum&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-580"><a href="#ClickHouse.Generator-580"><span class="linenos">580</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMax&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-581"><a href="#ClickHouse.Generator-581"><span class="linenos">581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;argMin&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-582"><a href="#ClickHouse.Generator-582"><span class="linenos">582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-583"><a href="#ClickHouse.Generator-583"><span class="linenos">583</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CAST&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-584"><a href="#ClickHouse.Generator-584"><span class="linenos">584</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;countIf&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-585"><a href="#ClickHouse.Generator-585"><span class="linenos">585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="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;CURRENT_DATE&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-586"><a href="#ClickHouse.Generator-586"><span class="linenos">586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_ADD&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-587"><a href="#ClickHouse.Generator-587"><span class="linenos">587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-588"><a href="#ClickHouse.Generator-588"><span class="linenos">588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;arrayJoin&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-589"><a href="#ClickHouse.Generator-589"><span class="linenos">589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-590"><a href="#ClickHouse.Generator-590"><span class="linenos">590</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;isNaN&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-591"><a href="#ClickHouse.Generator-591"><span class="linenos">591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSONExtractString&quot;</span><span class="p">,</span> <span class="n">quoted_index</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-592"><a href="#ClickHouse.Generator-592"><span class="linenos">592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSONExtractString&quot;</span><span class="p">,</span> <span class="n">quoted_index</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-593"><a href="#ClickHouse.Generator-593"><span class="linenos">593</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">:</span> <span class="n">json_path_key_only_name</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-594"><a href="#ClickHouse.Generator-594"><span class="linenos">594</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-595"><a href="#ClickHouse.Generator-595"><span class="linenos">595</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse.Generator-596"><a href="#ClickHouse.Generator-596"><span class="linenos">596</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;nullIf&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-597"><a href="#ClickHouse.Generator-597"><span class="linenos">597</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-598"><a href="#ClickHouse.Generator-598"><span class="linenos">598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-599"><a href="#ClickHouse.Generator-599"><span class="linenos">599</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-600"><a href="#ClickHouse.Generator-600"><span class="linenos">600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-601"><a href="#ClickHouse.Generator-601"><span class="linenos">601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;randCanonical&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-602"><a href="#ClickHouse.Generator-602"><span class="linenos">602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">]),</span>
+</span><span id="ClickHouse.Generator-603"><a href="#ClickHouse.Generator-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StartsWith</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;startsWith&quot;</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-604"><a href="#ClickHouse.Generator-604"><span class="linenos">604</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-605"><a href="#ClickHouse.Generator-605"><span class="linenos">605</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-606"><a href="#ClickHouse.Generator-606"><span class="linenos">606</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
+</span><span id="ClickHouse.Generator-607"><a href="#ClickHouse.Generator-607"><span class="linenos">607</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</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;xor&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">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">expressions</span><span class="p">),</span>
+</span><span id="ClickHouse.Generator-608"><a href="#ClickHouse.Generator-608"><span class="linenos">608</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-609"><a href="#ClickHouse.Generator-609"><span class="linenos">609</span></a>
+</span><span id="ClickHouse.Generator-610"><a href="#ClickHouse.Generator-610"><span class="linenos">610</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-611"><a href="#ClickHouse.Generator-611"><span class="linenos">611</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><span id="ClickHouse.Generator-612"><a href="#ClickHouse.Generator-612"><span class="linenos">612</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-613"><a href="#ClickHouse.Generator-613"><span class="linenos">613</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-614"><a href="#ClickHouse.Generator-614"><span class="linenos">614</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-615"><a href="#ClickHouse.Generator-615"><span class="linenos">615</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-616"><a href="#ClickHouse.Generator-616"><span class="linenos">616</span></a>
+</span><span id="ClickHouse.Generator-617"><a href="#ClickHouse.Generator-617"><span class="linenos">617</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-618"><a href="#ClickHouse.Generator-618"><span class="linenos">618</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="ClickHouse.Generator-619"><a href="#ClickHouse.Generator-619"><span class="linenos">619</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ClickHouse.Generator-620"><a href="#ClickHouse.Generator-620"><span class="linenos">620</span></a> <span class="n">GROUPINGS_SEP</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse.Generator-621"><a href="#ClickHouse.Generator-621"><span class="linenos">621</span></a>
+</span><span id="ClickHouse.Generator-622"><a href="#ClickHouse.Generator-622"><span class="linenos">622</span></a> <span class="c1"># there&#39;s no list in docs, but it can be found in Clickhouse code</span>
+</span><span id="ClickHouse.Generator-623"><a href="#ClickHouse.Generator-623"><span class="linenos">623</span></a> <span class="c1"># see `ClickHouse/src/Parsers/ParserCreate*.cpp`</span>
+</span><span id="ClickHouse.Generator-624"><a href="#ClickHouse.Generator-624"><span class="linenos">624</span></a> <span class="n">ON_CLUSTER_TARGETS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ClickHouse.Generator-625"><a href="#ClickHouse.Generator-625"><span class="linenos">625</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-626"><a href="#ClickHouse.Generator-626"><span class="linenos">626</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-627"><a href="#ClickHouse.Generator-627"><span class="linenos">627</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-628"><a href="#ClickHouse.Generator-628"><span class="linenos">628</span></a> <span class="s2">&quot;DICTIONARY&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-629"><a href="#ClickHouse.Generator-629"><span class="linenos">629</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-630"><a href="#ClickHouse.Generator-630"><span class="linenos">630</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-631"><a href="#ClickHouse.Generator-631"><span class="linenos">631</span></a> <span class="s2">&quot;NAMED COLLECTION&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-632"><a href="#ClickHouse.Generator-632"><span class="linenos">632</span></a> <span class="p">}</span>
+</span><span id="ClickHouse.Generator-633"><a href="#ClickHouse.Generator-633"><span class="linenos">633</span></a>
+</span><span id="ClickHouse.Generator-634"><a href="#ClickHouse.Generator-634"><span class="linenos">634</span></a> <span class="k">def</span> <span class="nf">_jsonpathsubscript_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">JSONPathSubscript</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-635"><a href="#ClickHouse.Generator-635"><span class="linenos">635</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-636"><a href="#ClickHouse.Generator-636"><span class="linenos">636</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="ClickHouse.Generator-637"><a href="#ClickHouse.Generator-637"><span class="linenos">637</span></a>
+</span><span id="ClickHouse.Generator-638"><a href="#ClickHouse.Generator-638"><span class="linenos">638</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-639"><a href="#ClickHouse.Generator-639"><span class="linenos">639</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="ClickHouse.Generator-640"><a href="#ClickHouse.Generator-640"><span class="linenos">640</span></a>
+</span><span id="ClickHouse.Generator-641"><a href="#ClickHouse.Generator-641"><span class="linenos">641</span></a> <span class="k">def</span> <span class="nf">_any_to_has</span><span class="p">(</span>
+</span><span id="ClickHouse.Generator-642"><a href="#ClickHouse.Generator-642"><span class="linenos">642</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-643"><a href="#ClickHouse.Generator-643"><span class="linenos">643</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-644"><a href="#ClickHouse.Generator-644"><span class="linenos">644</span></a> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">],</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="ClickHouse.Generator-645"><a href="#ClickHouse.Generator-645"><span class="linenos">645</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="ClickHouse.Generator-646"><a href="#ClickHouse.Generator-646"><span class="linenos">646</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-647"><a href="#ClickHouse.Generator-647"><span class="linenos">647</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-648"><a href="#ClickHouse.Generator-648"><span class="linenos">648</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="ClickHouse.Generator-649"><a href="#ClickHouse.Generator-649"><span class="linenos">649</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="ClickHouse.Generator-650"><a href="#ClickHouse.Generator-650"><span class="linenos">650</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-651"><a href="#ClickHouse.Generator-651"><span class="linenos">651</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="ClickHouse.Generator-652"><a href="#ClickHouse.Generator-652"><span class="linenos">652</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span>
+</span><span id="ClickHouse.Generator-653"><a href="#ClickHouse.Generator-653"><span class="linenos">653</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-654"><a href="#ClickHouse.Generator-654"><span class="linenos">654</span></a> <span class="k">return</span> <span class="n">default</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-655"><a href="#ClickHouse.Generator-655"><span class="linenos">655</span></a> <span class="k">return</span> <span class="n">prefix</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;has&quot;</span><span class="p">,</span> <span class="n">arr</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-656"><a href="#ClickHouse.Generator-656"><span class="linenos">656</span></a>
+</span><span id="ClickHouse.Generator-657"><a href="#ClickHouse.Generator-657"><span class="linenos">657</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-658"><a href="#ClickHouse.Generator-658"><span class="linenos">658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-659"><a href="#ClickHouse.Generator-659"><span class="linenos">659</span></a>
+</span><span id="ClickHouse.Generator-660"><a href="#ClickHouse.Generator-660"><span class="linenos">660</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-661"><a href="#ClickHouse.Generator-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-662"><a href="#ClickHouse.Generator-662"><span class="linenos">662</span></a>
+</span><span id="ClickHouse.Generator-663"><a href="#ClickHouse.Generator-663"><span class="linenos">663</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-664"><a href="#ClickHouse.Generator-664"><span class="linenos">664</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
+</span><span id="ClickHouse.Generator-665"><a href="#ClickHouse.Generator-665"><span class="linenos">665</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-666"><a href="#ClickHouse.Generator-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse.Generator-667"><a href="#ClickHouse.Generator-667"><span class="linenos">667</span></a>
+</span><span id="ClickHouse.Generator-668"><a href="#ClickHouse.Generator-668"><span class="linenos">668</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-669"><a href="#ClickHouse.Generator-669"><span class="linenos">669</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="ClickHouse.Generator-670"><a href="#ClickHouse.Generator-670"><span class="linenos">670</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="ClickHouse.Generator-671"><a href="#ClickHouse.Generator-671"><span class="linenos">671</span></a> <span class="c1">#</span>
+</span><span id="ClickHouse.Generator-672"><a href="#ClickHouse.Generator-672"><span class="linenos">672</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="ClickHouse.Generator-673"><a href="#ClickHouse.Generator-673"><span class="linenos">673</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-674"><a href="#ClickHouse.Generator-674"><span class="linenos">674</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
+</span><span id="ClickHouse.Generator-675"><a href="#ClickHouse.Generator-675"><span class="linenos">675</span></a>
+</span><span id="ClickHouse.Generator-676"><a href="#ClickHouse.Generator-676"><span class="linenos">676</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-677"><a href="#ClickHouse.Generator-677"><span class="linenos">677</span></a>
+</span><span id="ClickHouse.Generator-678"><a href="#ClickHouse.Generator-678"><span class="linenos">678</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-679"><a href="#ClickHouse.Generator-679"><span class="linenos">679</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-680"><a href="#ClickHouse.Generator-680"><span class="linenos">680</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-681"><a href="#ClickHouse.Generator-681"><span class="linenos">681</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-682"><a href="#ClickHouse.Generator-682"><span class="linenos">682</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="ClickHouse.Generator-683"><a href="#ClickHouse.Generator-683"><span class="linenos">683</span></a>
-</span><span id="ClickHouse.Generator-684"><a href="#ClickHouse.Generator-684"><span class="linenos">684</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-685"><a href="#ClickHouse.Generator-685"><span class="linenos">685</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-686"><a href="#ClickHouse.Generator-686"><span class="linenos">686</span></a>
-</span><span id="ClickHouse.Generator-687"><a href="#ClickHouse.Generator-687"><span class="linenos">687</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-688"><a href="#ClickHouse.Generator-688"><span class="linenos">688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-689"><a href="#ClickHouse.Generator-689"><span class="linenos">689</span></a>
-</span><span id="ClickHouse.Generator-690"><a href="#ClickHouse.Generator-690"><span class="linenos">690</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-691"><a href="#ClickHouse.Generator-691"><span class="linenos">691</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-692"><a href="#ClickHouse.Generator-692"><span class="linenos">692</span></a>
-</span><span id="ClickHouse.Generator-693"><a href="#ClickHouse.Generator-693"><span class="linenos">693</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-694"><a href="#ClickHouse.Generator-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator-695"><a href="#ClickHouse.Generator-695"><span class="linenos">695</span></a>
-</span><span id="ClickHouse.Generator-696"><a href="#ClickHouse.Generator-696"><span class="linenos">696</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-697"><a href="#ClickHouse.Generator-697"><span class="linenos">697</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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="ClickHouse.Generator-698"><a href="#ClickHouse.Generator-698"><span class="linenos">698</span></a>
-</span><span id="ClickHouse.Generator-699"><a href="#ClickHouse.Generator-699"><span class="linenos">699</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator-700"><a href="#ClickHouse.Generator-700"><span class="linenos">700</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="ClickHouse.Generator-701"><a href="#ClickHouse.Generator-701"><span class="linenos">701</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator-702"><a href="#ClickHouse.Generator-702"><span class="linenos">702</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-703"><a href="#ClickHouse.Generator-703"><span class="linenos">703</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="ClickHouse.Generator-704"><a href="#ClickHouse.Generator-704"><span class="linenos">704</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="ClickHouse.Generator-705"><a href="#ClickHouse.Generator-705"><span class="linenos">705</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Generator-706"><a href="#ClickHouse.Generator-706"><span class="linenos">706</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator-707"><a href="#ClickHouse.Generator-707"><span class="linenos">707</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator-708"><a href="#ClickHouse.Generator-708"><span class="linenos">708</span></a>
-</span><span id="ClickHouse.Generator-709"><a href="#ClickHouse.Generator-709"><span class="linenos">709</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-684"><a href="#ClickHouse.Generator-684"><span class="linenos">684</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-685"><a href="#ClickHouse.Generator-685"><span class="linenos">685</span></a>
+</span><span id="ClickHouse.Generator-686"><a href="#ClickHouse.Generator-686"><span class="linenos">686</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="ClickHouse.Generator-687"><a href="#ClickHouse.Generator-687"><span class="linenos">687</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="ClickHouse.Generator-688"><a href="#ClickHouse.Generator-688"><span class="linenos">688</span></a> <span class="p">(</span>
+</span><span id="ClickHouse.Generator-689"><a href="#ClickHouse.Generator-689"><span class="linenos">689</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-690"><a href="#ClickHouse.Generator-690"><span class="linenos">690</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-691"><a href="#ClickHouse.Generator-691"><span class="linenos">691</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse.Generator-692"><a href="#ClickHouse.Generator-692"><span class="linenos">692</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Generator-693"><a href="#ClickHouse.Generator-693"><span class="linenos">693</span></a> <span class="p">(</span>
+</span><span id="ClickHouse.Generator-694"><a href="#ClickHouse.Generator-694"><span class="linenos">694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-695"><a href="#ClickHouse.Generator-695"><span class="linenos">695</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-696"><a href="#ClickHouse.Generator-696"><span class="linenos">696</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse.Generator-697"><a href="#ClickHouse.Generator-697"><span class="linenos">697</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Generator-698"><a href="#ClickHouse.Generator-698"><span class="linenos">698</span></a> <span class="p">]</span>
+</span><span id="ClickHouse.Generator-699"><a href="#ClickHouse.Generator-699"><span class="linenos">699</span></a>
+</span><span id="ClickHouse.Generator-700"><a href="#ClickHouse.Generator-700"><span class="linenos">700</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-701"><a href="#ClickHouse.Generator-701"><span class="linenos">701</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-702"><a href="#ClickHouse.Generator-702"><span class="linenos">702</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="ClickHouse.Generator-703"><a href="#ClickHouse.Generator-703"><span class="linenos">703</span></a>
+</span><span id="ClickHouse.Generator-704"><a href="#ClickHouse.Generator-704"><span class="linenos">704</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-705"><a href="#ClickHouse.Generator-705"><span class="linenos">705</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-706"><a href="#ClickHouse.Generator-706"><span class="linenos">706</span></a>
+</span><span id="ClickHouse.Generator-707"><a href="#ClickHouse.Generator-707"><span class="linenos">707</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-708"><a href="#ClickHouse.Generator-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-709"><a href="#ClickHouse.Generator-709"><span class="linenos">709</span></a>
+</span><span id="ClickHouse.Generator-710"><a href="#ClickHouse.Generator-710"><span class="linenos">710</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-711"><a href="#ClickHouse.Generator-711"><span class="linenos">711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-712"><a href="#ClickHouse.Generator-712"><span class="linenos">712</span></a>
+</span><span id="ClickHouse.Generator-713"><a href="#ClickHouse.Generator-713"><span class="linenos">713</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-714"><a href="#ClickHouse.Generator-714"><span class="linenos">714</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator-715"><a href="#ClickHouse.Generator-715"><span class="linenos">715</span></a>
+</span><span id="ClickHouse.Generator-716"><a href="#ClickHouse.Generator-716"><span class="linenos">716</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-717"><a href="#ClickHouse.Generator-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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="ClickHouse.Generator-718"><a href="#ClickHouse.Generator-718"><span class="linenos">718</span></a>
+</span><span id="ClickHouse.Generator-719"><a href="#ClickHouse.Generator-719"><span class="linenos">719</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator-720"><a href="#ClickHouse.Generator-720"><span class="linenos">720</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="ClickHouse.Generator-721"><a href="#ClickHouse.Generator-721"><span class="linenos">721</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator-722"><a href="#ClickHouse.Generator-722"><span class="linenos">722</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-723"><a href="#ClickHouse.Generator-723"><span class="linenos">723</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="ClickHouse.Generator-724"><a href="#ClickHouse.Generator-724"><span class="linenos">724</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="ClickHouse.Generator-725"><a href="#ClickHouse.Generator-725"><span class="linenos">725</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Generator-726"><a href="#ClickHouse.Generator-726"><span class="linenos">726</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator-727"><a href="#ClickHouse.Generator-727"><span class="linenos">727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator-728"><a href="#ClickHouse.Generator-728"><span class="linenos">728</span></a>
+</span><span id="ClickHouse.Generator-729"><a href="#ClickHouse.Generator-729"><span class="linenos">729</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -3340,6 +3399,19 @@ Default: True</li>
</div>
+ <div id="ClickHouse.Generator.SUPPORTED_JSON_PATH_PARTS" class="classattr">
+ <div class="attr variable">
+ <span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
+<input id="ClickHouse.Generator.SUPPORTED_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <label class="view-value-button pdoc-button" for="ClickHouse.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;}</span>
+
+
+ </div>
+ <a class="headerlink" href="#ClickHouse.Generator.SUPPORTED_JSON_PATH_PARTS"></a>
+
+
+
+ </div>
<div id="ClickHouse.Generator.TYPE_MAPPING" class="classattr">
<div class="attr variable">
<span class="name">TYPE_MAPPING</span> =
@@ -3357,7 +3429,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="ClickHouse.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ClickHouse.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AutoRefreshProperty">sqlglot.expressions.AutoRefreshProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InheritsProperty">sqlglot.expressions.InheritsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InputModelProperty">sqlglot.expressions.InputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalSpan">sqlglot.expressions.IntervalSpan</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OutputModelProperty">sqlglot.expressions.OutputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RemoteWithConnectionModelProperty">sqlglot.expressions.RemoteWithConnectionModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SampleProperty">sqlglot.expressions.SampleProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetConfigProperty">sqlglot.expressions.SetConfigProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlReadWriteProperty">sqlglot.expressions.SqlReadWriteProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransformModelProperty">sqlglot.expressions.TransformModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;: &lt;function arg_max_or_min_no_count.&lt;locals&gt;._arg_max_or_min_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;: &lt;function arg_max_or_min_no_count.&lt;locals&gt;._arg_max_or_min_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Final">sqlglot.expressions.Final</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _quantile_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ClickHouse.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;: &lt;function json_path_key_only_name&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AutoRefreshProperty">sqlglot.expressions.AutoRefreshProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InheritsProperty">sqlglot.expressions.InheritsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InputModelProperty">sqlglot.expressions.InputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalSpan">sqlglot.expressions.IntervalSpan</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OutputModelProperty">sqlglot.expressions.OutputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RemoteWithConnectionModelProperty">sqlglot.expressions.RemoteWithConnectionModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SampleProperty">sqlglot.expressions.SampleProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetConfigProperty">sqlglot.expressions.SetConfigProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlReadWriteProperty">sqlglot.expressions.SqlReadWriteProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransformModelProperty">sqlglot.expressions.TransformModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;: &lt;function arg_max_or_min_no_count.&lt;locals&gt;._arg_max_or_min_sql&gt;, &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;: &lt;function arg_max_or_min_no_count.&lt;locals&gt;._arg_max_or_min_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function inline_array_sql&gt;, &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Final">sqlglot.expressions.Final</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function json_extract_segments.&lt;locals&gt;._json_extract_segments&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function json_extract_segments.&lt;locals&gt;._json_extract_segments&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _quantile_sql&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function <a href="#ClickHouse.Generator">ClickHouse.Generator</a>.&lt;lambda&gt;&gt;}</span>
</div>
@@ -3430,7 +3502,7 @@ Default: True</li>
<div id="ClickHouse.Generator.ON_CLUSTER_TARGETS" class="classattr">
<div class="attr variable">
<span class="name">ON_CLUSTER_TARGETS</span> =
-<span class="default_value">{&#39;TABLE&#39;, &#39;VIEW&#39;, &#39;DICTIONARY&#39;, &#39;INDEX&#39;, &#39;NAMED COLLECTION&#39;, &#39;FUNCTION&#39;, &#39;DATABASE&#39;}</span>
+<span class="default_value">{&#39;VIEW&#39;, &#39;DICTIONARY&#39;, &#39;FUNCTION&#39;, &#39;NAMED COLLECTION&#39;, &#39;DATABASE&#39;, &#39;TABLE&#39;, &#39;INDEX&#39;}</span>
</div>
@@ -3450,8 +3522,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.likeproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.likeproperty_sql-618"><a href="#ClickHouse.Generator.likeproperty_sql-618"><span class="linenos">618</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.likeproperty_sql-619"><a href="#ClickHouse.Generator.likeproperty_sql-619"><span class="linenos">619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="ClickHouse.Generator.likeproperty_sql-638"><a href="#ClickHouse.Generator.likeproperty_sql-638"><span class="linenos">638</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.likeproperty_sql-639"><a href="#ClickHouse.Generator.likeproperty_sql-639"><span class="linenos">639</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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>
@@ -3469,8 +3541,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.eq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.eq_sql-637"><a href="#ClickHouse.Generator.eq_sql-637"><span class="linenos">637</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.eq_sql-638"><a href="#ClickHouse.Generator.eq_sql-638"><span class="linenos">638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.eq_sql-657"><a href="#ClickHouse.Generator.eq_sql-657"><span class="linenos">657</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.eq_sql-658"><a href="#ClickHouse.Generator.eq_sql-658"><span class="linenos">658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">eq_sql</span><span class="p">)</span>
</span></pre></div>
@@ -3488,8 +3560,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.neq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.neq_sql-640"><a href="#ClickHouse.Generator.neq_sql-640"><span class="linenos">640</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.neq_sql-641"><a href="#ClickHouse.Generator.neq_sql-641"><span class="linenos">641</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.neq_sql-660"><a href="#ClickHouse.Generator.neq_sql-660"><span class="linenos">660</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.neq_sql-661"><a href="#ClickHouse.Generator.neq_sql-661"><span class="linenos">661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_any_to_has</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">neq_sql</span><span class="p">,</span> <span class="s2">&quot;NOT &quot;</span><span class="p">)</span>
</span></pre></div>
@@ -3507,10 +3579,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.regexpilike_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.regexpilike_sql-643"><a href="#ClickHouse.Generator.regexpilike_sql-643"><span class="linenos">643</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.regexpilike_sql-644"><a href="#ClickHouse.Generator.regexpilike_sql-644"><span class="linenos">644</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
-</span><span id="ClickHouse.Generator.regexpilike_sql-645"><a href="#ClickHouse.Generator.regexpilike_sql-645"><span class="linenos">645</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.regexpilike_sql-646"><a href="#ClickHouse.Generator.regexpilike_sql-646"><span class="linenos">646</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.regexpilike_sql-663"><a href="#ClickHouse.Generator.regexpilike_sql-663"><span class="linenos">663</span></a> <span class="k">def</span> <span class="nf">regexpilike_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">RegexpILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.regexpilike_sql-664"><a href="#ClickHouse.Generator.regexpilike_sql-664"><span class="linenos">664</span></a> <span class="c1"># Manually add a flag to make the search case-insensitive</span>
+</span><span id="ClickHouse.Generator.regexpilike_sql-665"><a href="#ClickHouse.Generator.regexpilike_sql-665"><span class="linenos">665</span></a> <span class="n">regex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;(?i)&#39;&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.regexpilike_sql-666"><a href="#ClickHouse.Generator.regexpilike_sql-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">regex</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -3528,15 +3600,15 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.datatype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.datatype_sql-648"><a href="#ClickHouse.Generator.datatype_sql-648"><span class="linenos">648</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.datatype_sql-649"><a href="#ClickHouse.Generator.datatype_sql-649"><span class="linenos">649</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
-</span><span id="ClickHouse.Generator.datatype_sql-650"><a href="#ClickHouse.Generator.datatype_sql-650"><span class="linenos">650</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
-</span><span id="ClickHouse.Generator.datatype_sql-651"><a href="#ClickHouse.Generator.datatype_sql-651"><span class="linenos">651</span></a> <span class="c1">#</span>
-</span><span id="ClickHouse.Generator.datatype_sql-652"><a href="#ClickHouse.Generator.datatype_sql-652"><span class="linenos">652</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
-</span><span id="ClickHouse.Generator.datatype_sql-653"><a href="#ClickHouse.Generator.datatype_sql-653"><span class="linenos">653</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.datatype_sql-654"><a href="#ClickHouse.Generator.datatype_sql-654"><span class="linenos">654</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
-</span><span id="ClickHouse.Generator.datatype_sql-655"><a href="#ClickHouse.Generator.datatype_sql-655"><span class="linenos">655</span></a>
-</span><span id="ClickHouse.Generator.datatype_sql-656"><a href="#ClickHouse.Generator.datatype_sql-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.datatype_sql-668"><a href="#ClickHouse.Generator.datatype_sql-668"><span class="linenos">668</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.datatype_sql-669"><a href="#ClickHouse.Generator.datatype_sql-669"><span class="linenos">669</span></a> <span class="c1"># String is the standard ClickHouse type, every other variant is just an alias.</span>
+</span><span id="ClickHouse.Generator.datatype_sql-670"><a href="#ClickHouse.Generator.datatype_sql-670"><span class="linenos">670</span></a> <span class="c1"># Additionally, any supplied length parameter will be ignored.</span>
+</span><span id="ClickHouse.Generator.datatype_sql-671"><a href="#ClickHouse.Generator.datatype_sql-671"><span class="linenos">671</span></a> <span class="c1">#</span>
+</span><span id="ClickHouse.Generator.datatype_sql-672"><a href="#ClickHouse.Generator.datatype_sql-672"><span class="linenos">672</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/data-types/string</span>
+</span><span id="ClickHouse.Generator.datatype_sql-673"><a href="#ClickHouse.Generator.datatype_sql-673"><span class="linenos">673</span></a> <span class="k">if</span> <span class="n">expression</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">STRING_TYPE_MAPPING</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.datatype_sql-674"><a href="#ClickHouse.Generator.datatype_sql-674"><span class="linenos">674</span></a> <span class="k">return</span> <span class="s2">&quot;String&quot;</span>
+</span><span id="ClickHouse.Generator.datatype_sql-675"><a href="#ClickHouse.Generator.datatype_sql-675"><span class="linenos">675</span></a>
+</span><span id="ClickHouse.Generator.datatype_sql-676"><a href="#ClickHouse.Generator.datatype_sql-676"><span class="linenos">676</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -3554,13 +3626,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.cte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.cte_sql-658"><a href="#ClickHouse.Generator.cte_sql-658"><span class="linenos">658</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.cte_sql-659"><a href="#ClickHouse.Generator.cte_sql-659"><span class="linenos">659</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator.cte_sql-660"><a href="#ClickHouse.Generator.cte_sql-660"><span class="linenos">660</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.cte_sql-661"><a href="#ClickHouse.Generator.cte_sql-661"><span class="linenos">661</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.cte_sql-662"><a href="#ClickHouse.Generator.cte_sql-662"><span class="linenos">662</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator.cte_sql-663"><a href="#ClickHouse.Generator.cte_sql-663"><span class="linenos">663</span></a>
-</span><span id="ClickHouse.Generator.cte_sql-664"><a href="#ClickHouse.Generator.cte_sql-664"><span class="linenos">664</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.cte_sql-678"><a href="#ClickHouse.Generator.cte_sql-678"><span class="linenos">678</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.cte_sql-679"><a href="#ClickHouse.Generator.cte_sql-679"><span class="linenos">679</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scalar&quot;</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator.cte_sql-680"><a href="#ClickHouse.Generator.cte_sql-680"><span class="linenos">680</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.cte_sql-681"><a href="#ClickHouse.Generator.cte_sql-681"><span class="linenos">681</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.cte_sql-682"><a href="#ClickHouse.Generator.cte_sql-682"><span class="linenos">682</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator.cte_sql-683"><a href="#ClickHouse.Generator.cte_sql-683"><span class="linenos">683</span></a>
+</span><span id="ClickHouse.Generator.cte_sql-684"><a href="#ClickHouse.Generator.cte_sql-684"><span class="linenos">684</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -3578,19 +3650,19 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.after_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.after_limit_modifiers-666"><a href="#ClickHouse.Generator.after_limit_modifiers-666"><span class="linenos">666</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-667"><a href="#ClickHouse.Generator.after_limit_modifiers-667"><span class="linenos">667</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-668"><a href="#ClickHouse.Generator.after_limit_modifiers-668"><span class="linenos">668</span></a> <span class="p">(</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-669"><a href="#ClickHouse.Generator.after_limit_modifiers-669"><span class="linenos">669</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-670"><a href="#ClickHouse.Generator.after_limit_modifiers-670"><span class="linenos">670</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-671"><a href="#ClickHouse.Generator.after_limit_modifiers-671"><span class="linenos">671</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-672"><a href="#ClickHouse.Generator.after_limit_modifiers-672"><span class="linenos">672</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-673"><a href="#ClickHouse.Generator.after_limit_modifiers-673"><span class="linenos">673</span></a> <span class="p">(</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-674"><a href="#ClickHouse.Generator.after_limit_modifiers-674"><span class="linenos">674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-675"><a href="#ClickHouse.Generator.after_limit_modifiers-675"><span class="linenos">675</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-676"><a href="#ClickHouse.Generator.after_limit_modifiers-676"><span class="linenos">676</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-677"><a href="#ClickHouse.Generator.after_limit_modifiers-677"><span class="linenos">677</span></a> <span class="p">),</span>
-</span><span id="ClickHouse.Generator.after_limit_modifiers-678"><a href="#ClickHouse.Generator.after_limit_modifiers-678"><span class="linenos">678</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.after_limit_modifiers-686"><a href="#ClickHouse.Generator.after_limit_modifiers-686"><span class="linenos">686</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-687"><a href="#ClickHouse.Generator.after_limit_modifiers-687"><span class="linenos">687</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-688"><a href="#ClickHouse.Generator.after_limit_modifiers-688"><span class="linenos">688</span></a> <span class="p">(</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-689"><a href="#ClickHouse.Generator.after_limit_modifiers-689"><span class="linenos">689</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SETTINGS &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-690"><a href="#ClickHouse.Generator.after_limit_modifiers-690"><span class="linenos">690</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;settings&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-691"><a href="#ClickHouse.Generator.after_limit_modifiers-691"><span class="linenos">691</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-692"><a href="#ClickHouse.Generator.after_limit_modifiers-692"><span class="linenos">692</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-693"><a href="#ClickHouse.Generator.after_limit_modifiers-693"><span class="linenos">693</span></a> <span class="p">(</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-694"><a href="#ClickHouse.Generator.after_limit_modifiers-694"><span class="linenos">694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;FORMAT &quot;</span><span class="p">)</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;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-695"><a href="#ClickHouse.Generator.after_limit_modifiers-695"><span class="linenos">695</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-696"><a href="#ClickHouse.Generator.after_limit_modifiers-696"><span class="linenos">696</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-697"><a href="#ClickHouse.Generator.after_limit_modifiers-697"><span class="linenos">697</span></a> <span class="p">),</span>
+</span><span id="ClickHouse.Generator.after_limit_modifiers-698"><a href="#ClickHouse.Generator.after_limit_modifiers-698"><span class="linenos">698</span></a> <span class="p">]</span>
</span></pre></div>
@@ -3608,9 +3680,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.parameterizedagg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.parameterizedagg_sql-680"><a href="#ClickHouse.Generator.parameterizedagg_sql-680"><span class="linenos">680</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.parameterizedagg_sql-681"><a href="#ClickHouse.Generator.parameterizedagg_sql-681"><span class="linenos">681</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.parameterizedagg_sql-682"><a href="#ClickHouse.Generator.parameterizedagg_sql-682"><span class="linenos">682</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.parameterizedagg_sql-700"><a href="#ClickHouse.Generator.parameterizedagg_sql-700"><span class="linenos">700</span></a> <span class="k">def</span> <span class="nf">parameterizedagg_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">ParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.parameterizedagg_sql-701"><a href="#ClickHouse.Generator.parameterizedagg_sql-701"><span class="linenos">701</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;params&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.parameterizedagg_sql-702"><a href="#ClickHouse.Generator.parameterizedagg_sql-702"><span class="linenos">702</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -3628,8 +3700,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.anonymousaggfunc_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.anonymousaggfunc_sql-684"><a href="#ClickHouse.Generator.anonymousaggfunc_sql-684"><span class="linenos">684</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.anonymousaggfunc_sql-685"><a href="#ClickHouse.Generator.anonymousaggfunc_sql-685"><span class="linenos">685</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.anonymousaggfunc_sql-704"><a href="#ClickHouse.Generator.anonymousaggfunc_sql-704"><span class="linenos">704</span></a> <span class="k">def</span> <span class="nf">anonymousaggfunc_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">AnonymousAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.anonymousaggfunc_sql-705"><a href="#ClickHouse.Generator.anonymousaggfunc_sql-705"><span class="linenos">705</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -3647,8 +3719,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.combinedaggfunc_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.combinedaggfunc_sql-687"><a href="#ClickHouse.Generator.combinedaggfunc_sql-687"><span class="linenos">687</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.combinedaggfunc_sql-688"><a href="#ClickHouse.Generator.combinedaggfunc_sql-688"><span class="linenos">688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.combinedaggfunc_sql-707"><a href="#ClickHouse.Generator.combinedaggfunc_sql-707"><span class="linenos">707</span></a> <span class="k">def</span> <span class="nf">combinedaggfunc_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">CombinedAggFunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.combinedaggfunc_sql-708"><a href="#ClickHouse.Generator.combinedaggfunc_sql-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymousaggfunc_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -3666,8 +3738,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.combinedparameterizedagg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.combinedparameterizedagg_sql-690"><a href="#ClickHouse.Generator.combinedparameterizedagg_sql-690"><span class="linenos">690</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.combinedparameterizedagg_sql-691"><a href="#ClickHouse.Generator.combinedparameterizedagg_sql-691"><span class="linenos">691</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.combinedparameterizedagg_sql-710"><a href="#ClickHouse.Generator.combinedparameterizedagg_sql-710"><span class="linenos">710</span></a> <span class="k">def</span> <span class="nf">combinedparameterizedagg_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">CombinedParameterizedAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.combinedparameterizedagg_sql-711"><a href="#ClickHouse.Generator.combinedparameterizedagg_sql-711"><span class="linenos">711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterizedagg_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -3685,8 +3757,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.placeholder_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.placeholder_sql-693"><a href="#ClickHouse.Generator.placeholder_sql-693"><span class="linenos">693</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.placeholder_sql-694"><a href="#ClickHouse.Generator.placeholder_sql-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.placeholder_sql-713"><a href="#ClickHouse.Generator.placeholder_sql-713"><span class="linenos">713</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.placeholder_sql-714"><a href="#ClickHouse.Generator.placeholder_sql-714"><span class="linenos">714</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;kind&#39;</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -3704,8 +3776,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.oncluster_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.oncluster_sql-696"><a href="#ClickHouse.Generator.oncluster_sql-696"><span class="linenos">696</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.oncluster_sql-697"><a href="#ClickHouse.Generator.oncluster_sql-697"><span class="linenos">697</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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="ClickHouse.Generator.oncluster_sql-716"><a href="#ClickHouse.Generator.oncluster_sql-716"><span class="linenos">716</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.oncluster_sql-717"><a href="#ClickHouse.Generator.oncluster_sql-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ON CLUSTER </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>
@@ -3723,17 +3795,17 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.createable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.createable_sql-699"><a href="#ClickHouse.Generator.createable_sql-699"><span class="linenos">699</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ClickHouse.Generator.createable_sql-700"><a href="#ClickHouse.Generator.createable_sql-700"><span class="linenos">700</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="ClickHouse.Generator.createable_sql-701"><a href="#ClickHouse.Generator.createable_sql-701"><span class="linenos">701</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
-</span><span id="ClickHouse.Generator.createable_sql-702"><a href="#ClickHouse.Generator.createable_sql-702"><span class="linenos">702</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.createable_sql-703"><a href="#ClickHouse.Generator.createable_sql-703"><span class="linenos">703</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="ClickHouse.Generator.createable_sql-704"><a href="#ClickHouse.Generator.createable_sql-704"><span class="linenos">704</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
-</span><span id="ClickHouse.Generator.createable_sql-705"><a href="#ClickHouse.Generator.createable_sql-705"><span class="linenos">705</span></a> <span class="p">)</span>
-</span><span id="ClickHouse.Generator.createable_sql-706"><a href="#ClickHouse.Generator.createable_sql-706"><span class="linenos">706</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="ClickHouse.Generator.createable_sql-707"><a href="#ClickHouse.Generator.createable_sql-707"><span class="linenos">707</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="ClickHouse.Generator.createable_sql-708"><a href="#ClickHouse.Generator.createable_sql-708"><span class="linenos">708</span></a>
-</span><span id="ClickHouse.Generator.createable_sql-709"><a href="#ClickHouse.Generator.createable_sql-709"><span class="linenos">709</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.createable_sql-719"><a href="#ClickHouse.Generator.createable_sql-719"><span class="linenos">719</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ClickHouse.Generator.createable_sql-720"><a href="#ClickHouse.Generator.createable_sql-720"><span class="linenos">720</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="ClickHouse.Generator.createable_sql-721"><a href="#ClickHouse.Generator.createable_sql-721"><span class="linenos">721</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ON_CLUSTER_TARGETS</span> <span class="ow">and</span> <span class="n">locations</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">):</span>
+</span><span id="ClickHouse.Generator.createable_sql-722"><a href="#ClickHouse.Generator.createable_sql-722"><span class="linenos">722</span></a> <span class="n">this_name</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="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.createable_sql-723"><a href="#ClickHouse.Generator.createable_sql-723"><span class="linenos">723</span></a> <span class="n">this_properties</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="ClickHouse.Generator.createable_sql-724"><a href="#ClickHouse.Generator.createable_sql-724"><span class="linenos">724</span></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">locations</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">]]</span>
+</span><span id="ClickHouse.Generator.createable_sql-725"><a href="#ClickHouse.Generator.createable_sql-725"><span class="linenos">725</span></a> <span class="p">)</span>
+</span><span id="ClickHouse.Generator.createable_sql-726"><a href="#ClickHouse.Generator.createable_sql-726"><span class="linenos">726</span></a> <span class="n">this_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="ClickHouse.Generator.createable_sql-727"><a href="#ClickHouse.Generator.createable_sql-727"><span class="linenos">727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this_name</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_properties</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="ClickHouse.Generator.createable_sql-728"><a href="#ClickHouse.Generator.createable_sql-728"><span class="linenos">728</span></a>
+</span><span id="ClickHouse.Generator.createable_sql-729"><a href="#ClickHouse.Generator.createable_sql-729"><span class="linenos">729</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">locations</span><span class="p">)</span>
</span></pre></div>
@@ -3799,10 +3871,10 @@ Default: True</li>
<dd id="ClickHouse.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="ClickHouse.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="ClickHouse.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="ClickHouse.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="ClickHouse.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="ClickHouse.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="ClickHouse.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
- <dd id="ClickHouse.Generator.SUPPORTED_JSON_PATH_PARTS" class="variable"><a href="../generator.html#Generator.SUPPORTED_JSON_PATH_PARTS">SUPPORTED_JSON_PATH_PARTS</a></dd>
<dd id="ClickHouse.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
<dd id="ClickHouse.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
<dd id="ClickHouse.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/databricks.html b/docs/sqlglot/dialects/databricks.html
index 187063c..8c89a59 100644
--- a/docs/sqlglot/dialects/databricks.html
+++ b/docs/sqlglot/dialects/databricks.html
@@ -1139,6 +1139,7 @@ Default: True</li>
<dd id="Databricks.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Databricks.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Databricks.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Databricks.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Databricks.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Databricks.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Databricks.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
@@ -1535,6 +1536,8 @@ Default: True</li>
<dd id="Databricks.Tokenizer.UNICODE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.UNICODE_STRINGS">UNICODE_STRINGS</a></dd>
<dd id="Databricks.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Databricks.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Databricks.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Databricks.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Databricks.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Databricks.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Databricks.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
diff --git a/docs/sqlglot/dialects/dialect.html b/docs/sqlglot/dialects/dialect.html
index 37bf8ce..7b67d8a 100644
--- a/docs/sqlglot/dialects/dialect.html
+++ b/docs/sqlglot/dialects/dialect.html
@@ -490,7 +490,10 @@
<a class="function" href="#parse_json_extract_path">parse_json_extract_path</a>
</li>
<li>
- <a class="function" href="#json_path_segments">json_path_segments</a>
+ <a class="function" href="#json_extract_segments">json_extract_segments</a>
+ </li>
+ <li>
+ <a class="function" href="#json_path_key_only_name">json_path_key_only_name</a>
</li>
</ul>
@@ -536,507 +539,507 @@
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="n">DATE_ADD_OR_SUB</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</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">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">]</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="kn">from</span> <span class="nn">sqlglot._typing</span> <span class="kn">import</span> <span class="n">B</span><span class="p">,</span> <span class="n">E</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="kn">from</span> <span class="nn">sqlglot._typing</span> <span class="kn">import</span> <span class="n">B</span><span class="p">,</span> <span class="n">E</span><span class="p">,</span> <span class="n">F</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;sqlglot&quot;</span><span class="p">)</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">JSON_EXTRACT_TYPE</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">]</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="k">class</span> <span class="nc">Dialects</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Dialects supported by SQLGLot.&quot;&quot;&quot;</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">DIALECT</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;sqlglot&quot;</span><span class="p">)</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="k">class</span> <span class="nc">Dialects</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Dialects supported by SQLGLot.&quot;&quot;&quot;</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">BIGQUERY</span> <span class="o">=</span> <span class="s2">&quot;bigquery&quot;</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">CLICKHOUSE</span> <span class="o">=</span> <span class="s2">&quot;clickhouse&quot;</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">DATABRICKS</span> <span class="o">=</span> <span class="s2">&quot;databricks&quot;</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">DORIS</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">DUCKDB</span> <span class="o">=</span> <span class="s2">&quot;duckdb&quot;</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">HIVE</span> <span class="o">=</span> <span class="s2">&quot;hive&quot;</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">MYSQL</span> <span class="o">=</span> <span class="s2">&quot;mysql&quot;</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">ORACLE</span> <span class="o">=</span> <span class="s2">&quot;oracle&quot;</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">POSTGRES</span> <span class="o">=</span> <span class="s2">&quot;postgres&quot;</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">PRESTO</span> <span class="o">=</span> <span class="s2">&quot;presto&quot;</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="k">class</span> <span class="nc">NormalizationStrategy</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">AutoName</span><span class="p">):</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">LOWERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are lowercased.&quot;&quot;&quot;</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">UPPERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are uppercased.&quot;&quot;&quot;</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">CASE_SENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-sensitive, regardless of quotes.&quot;&quot;&quot;</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">CASE_INSENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-insensitive, regardless of quotes.&quot;&quot;&quot;</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="k">class</span> <span class="nc">_Dialect</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">classes</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">other</span><span class="p">:</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">DIALECT</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">BIGQUERY</span> <span class="o">=</span> <span class="s2">&quot;bigquery&quot;</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">CLICKHOUSE</span> <span class="o">=</span> <span class="s2">&quot;clickhouse&quot;</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">DATABRICKS</span> <span class="o">=</span> <span class="s2">&quot;databricks&quot;</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">DORIS</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">DUCKDB</span> <span class="o">=</span> <span class="s2">&quot;duckdb&quot;</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">HIVE</span> <span class="o">=</span> <span class="s2">&quot;hive&quot;</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">MYSQL</span> <span class="o">=</span> <span class="s2">&quot;mysql&quot;</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">ORACLE</span> <span class="o">=</span> <span class="s2">&quot;oracle&quot;</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">POSTGRES</span> <span class="o">=</span> <span class="s2">&quot;postgres&quot;</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">PRESTO</span> <span class="o">=</span> <span class="s2">&quot;presto&quot;</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a><span class="k">class</span> <span class="nc">NormalizationStrategy</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">AutoName</span><span class="p">):</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">LOWERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are lowercased.&quot;&quot;&quot;</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">UPPERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are uppercased.&quot;&quot;&quot;</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">CASE_SENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-sensitive, regardless of quotes.&quot;&quot;&quot;</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">CASE_INSENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-insensitive, regardless of quotes.&quot;&quot;&quot;</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="k">class</span> <span class="nc">_Dialect</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">classes</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">other</span><span class="p">:</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]:</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]:</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">attrs</span><span class="p">):</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">attrs</span><span class="p">)</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">enum</span> <span class="o">=</span> <span class="n">Dialects</span><span class="o">.</span><span class="n">__members__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">clsname</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">[</span><span class="n">enum</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="n">enum</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">clsname</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">klass</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a>
-</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">)</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span><span class="p">)</span> <span class="k">if</span> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="k">else</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="p">)</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">)</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a>
-</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]:</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</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">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">]]:</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">attrs</span><span class="p">):</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">clsname</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">attrs</span><span class="p">)</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a> <span class="n">enum</span> <span class="o">=</span> <span class="n">Dialects</span><span class="o">.</span><span class="n">__members__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">clsname</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">[</span><span class="n">enum</span><span class="o">.</span><span class="n">value</span> <span class="k">if</span> <span class="n">enum</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">clsname</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">klass</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a>
+</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">)</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_TRIE</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">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span><span class="p">)</span> <span class="k">if</span> <span class="n">klass</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="k">else</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_TRIE</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="p">)</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">)</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a>
-</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Tokenizer&quot;</span><span class="p">,</span> <span class="n">Tokenizer</span><span class="p">)</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Parser&quot;</span><span class="p">,</span> <span class="n">Parser</span><span class="p">)</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Generator&quot;</span><span class="p">,</span> <span class="n">Generator</span><span class="p">)</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a>
-</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">QUOTE_END</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">items</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="p">)[</span><span class="mi">0</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 class="k">def</span> <span class="nf">get_start_end</span><span class="p">(</span><span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a> <span class="p">(</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="o">.</span><span class="n">items</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">t</span> <span class="o">==</span> <span class="n">token_type</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="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="p">)</span>
-</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="n">klass</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">)</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">)</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">)</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">UNICODE_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="p">)</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a>
-</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a> <span class="k">if</span> <span class="n">enum</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">):</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">SELECT_KINDS</span> <span class="o">=</span> <span class="p">()</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a>
-</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">klass</span><span class="o">.</span><span class="n">SUPPORTS_SEMI_ANTI_JOIN</span><span class="p">:</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">|</span> <span class="p">{</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="p">}</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a>
-</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a> <span class="k">return</span> <span class="n">klass</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="p">:</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a>
+</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Tokenizer&quot;</span><span class="p">,</span> <span class="n">Tokenizer</span><span class="p">)</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Parser&quot;</span><span class="p">,</span> <span class="n">Parser</span><span class="p">)</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="s2">&quot;Generator&quot;</span><span class="p">,</span> <span class="n">Generator</span><span class="p">)</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a>
+</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">QUOTE_END</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">items</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a> <span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a>
+</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a> <span class="k">def</span> <span class="nf">get_start_end</span><span class="p">(</span><span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="p">(</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="k">if</span> <span class="n">t</span> <span class="o">==</span> <span class="n">token_type</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="p">),</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="p">)</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a>
+</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BIT_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">)</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">HEX_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">)</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">BYTE_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">)</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">,</span> <span class="n">klass</span><span class="o">.</span><span class="n">UNICODE_END</span> <span class="o">=</span> <span class="n">get_start_end</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="p">)</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="k">if</span> <span class="n">enum</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;bigquery&quot;</span><span class="p">):</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">SELECT_KINDS</span> <span class="o">=</span> <span class="p">()</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a>
+</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">klass</span><span class="o">.</span><span class="n">SUPPORTS_SEMI_ANTI_JOIN</span><span class="p">:</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">klass</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">|</span> <span class="p">{</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a> <span class="p">}</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><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a><span class="k">class</span> <span class="nc">Dialect</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Dialect</span><span class="p">):</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the base index offset for arrays.&quot;&quot;&quot;</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a>
-</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a> <span class="n">WEEK_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the day of week of DATE_TRUNC(week). Defaults to 0 (Monday). -1 would be Sunday.&quot;&quot;&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">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `UNNEST` table aliases are treated as column aliases.&quot;&quot;&quot;</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a>
-</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the table alias comes after tablesample.&quot;&quot;&quot;</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a>
-</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not a size in the table sample clause represents percentage.&quot;&quot;&quot;</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a>
-</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">LOWERCASE</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a>
-</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not an unquoted identifier can start with a digit.&quot;&quot;&quot;</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a>
-</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the DPIPE token (`||`) is a string concatenation operator.&quot;&quot;&quot;</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a>
-</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `CONCAT`&#39;s arguments must be strings.&quot;&quot;&quot;</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a>
-</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not user-defined data types are supported.&quot;&quot;&quot;</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a>
-</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a> <span class="n">SUPPORTS_SEMI_ANTI_JOIN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `SEMI` or `ANTI` joins are supported.&quot;&quot;&quot;</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">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines how function names are going to be normalized.&quot;&quot;&quot;</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a>
-</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether the base comes first in the `LOG` function.&quot;&quot;&quot;</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</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-188"><a href="#L-188"><span class="linenos"> 188</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a><span class="sd"> Indicates the default `NULL` ordering method to use if not explicitly set.</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a><span class="sd"> Possible values: `&quot;nulls_are_small&quot;`, `&quot;nulls_are_large&quot;`, `&quot;nulls_are_last&quot;`</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a>
-</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a><span class="sd"> Whether the behavior of `a / b` depends on the types of `a` and `b`.</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a><span class="sd"> False means `a / b` is always float division.</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a><span class="sd"> True means `a / b` is integer division if both `a` and `b` are integers.</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a>
-</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether division by zero throws an error (`False`) or returns NULL (`True`).&quot;&quot;&quot;</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a>
-</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A `NULL` arg in `CONCAT` yields `NULL` by default, but in some dialects it yields an empty string.&quot;&quot;&quot;</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a>
-</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="n">DATE_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a> <span class="n">DATEINT_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y%m</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&#39;&quot;</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a>
-</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Associates this dialect&#39;s time formats with their equivalent Python `strftime` format.&quot;&quot;&quot;</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a>
-</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a><span class="sd"> Helper which is used for parsing the special syntax `CAST(x AS DATE FORMAT &#39;yyyy&#39;)`.</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a><span class="sd"> If empty, the corresponding trie will be constructed off of `TIME_MAPPING`.</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a>
-</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="n">ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Mapping of an unescaped escape sequence to the corresponding character.&quot;&quot;&quot;</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a>
-</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a><span class="sd"> Columns that are auto-generated by the engine corresponding to this dialect.</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a><span class="sd"> For example, such columns may be excluded from `SELECT *` queries.</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a>
-</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="n">PREFER_CTE_ALIAS_COLUMN</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a><span class="sd"> Some dialects, such as Snowflake, allow you to reference a CTE column alias in the</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a><span class="sd"> HAVING clause of the CTE. This flag will cause the CTE alias columns to override</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a><span class="sd"> any projection aliases in the subquery.</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a>
-</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a><span class="sd"> For example,</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a><span class="sd"> WITH y(c) AS (</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a><span class="sd"> SELECT SUM(a) FROM (SELECT 1 a) AS x HAVING c &gt; 0</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a><span class="sd"> ) SELECT c FROM y;</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a>
-</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a><span class="sd"> will be rewritten as</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="k">return</span> <span class="n">klass</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a>
+</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a>
+</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a><span class="k">class</span> <span class="nc">Dialect</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Dialect</span><span class="p">):</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the base index offset for arrays.&quot;&quot;&quot;</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a>
+</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a> <span class="n">WEEK_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the day of week of DATE_TRUNC(week). Defaults to 0 (Monday). -1 would be Sunday.&quot;&quot;&quot;</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a>
+</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `UNNEST` table aliases are treated as column aliases.&quot;&quot;&quot;</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a>
+</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the table alias comes after tablesample.&quot;&quot;&quot;</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a>
+</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not a size in the table sample clause represents percentage.&quot;&quot;&quot;</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a>
+</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">LOWERCASE</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a>
+</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not an unquoted identifier can start with a digit.&quot;&quot;&quot;</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a>
+</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the DPIPE token (`||`) is a string concatenation operator.&quot;&quot;&quot;</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a>
+</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `CONCAT`&#39;s arguments must be strings.&quot;&quot;&quot;</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a>
+</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not user-defined data types are supported.&quot;&quot;&quot;</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a>
+</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="n">SUPPORTS_SEMI_ANTI_JOIN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `SEMI` or `ANTI` joins are supported.&quot;&quot;&quot;</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a>
+</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines how function names are going to be normalized.&quot;&quot;&quot;</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a>
+</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether the base comes first in the `LOG` function.&quot;&quot;&quot;</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a>
+</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</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-190"><a href="#L-190"><span class="linenos"> 190</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a><span class="sd"> Indicates the default `NULL` ordering method to use if not explicitly set.</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a><span class="sd"> Possible values: `&quot;nulls_are_small&quot;`, `&quot;nulls_are_large&quot;`, `&quot;nulls_are_last&quot;`</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a>
+</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a><span class="sd"> Whether the behavior of `a / b` depends on the types of `a` and `b`.</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a><span class="sd"> False means `a / b` is always float division.</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a><span class="sd"> True means `a / b` is integer division if both `a` and `b` are integers.</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a>
+</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether division by zero throws an error (`False`) or returns NULL (`True`).&quot;&quot;&quot;</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a>
+</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A `NULL` arg in `CONCAT` yields `NULL` by default, but in some dialects it yields an empty string.&quot;&quot;&quot;</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a>
+</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="n">DATE_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="n">DATEINT_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y%m</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&#39;&quot;</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a>
+</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="n">TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Associates this dialect&#39;s time formats with their equivalent Python `strftime` format.&quot;&quot;&quot;</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a>
+</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a><span class="sd"> Helper which is used for parsing the special syntax `CAST(x AS DATE FORMAT &#39;yyyy&#39;)`.</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a><span class="sd"> If empty, the corresponding trie will be constructed off of `TIME_MAPPING`.</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a>
+</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Mapping of an unescaped escape sequence to the corresponding character.&quot;&quot;&quot;</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a>
+</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a><span class="sd"> Columns that are auto-generated by the engine corresponding to this dialect.</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a><span class="sd"> For example, such columns may be excluded from `SELECT *` queries.</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a>
+</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="n">PREFER_CTE_ALIAS_COLUMN</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a><span class="sd"> Some dialects, such as Snowflake, allow you to reference a CTE column alias in the</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a><span class="sd"> HAVING clause of the CTE. This flag will cause the CTE alias columns to override</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a><span class="sd"> any projection aliases in the subquery.</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a>
+</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a><span class="sd"> For example,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a><span class="sd"> WITH y(c) AS (</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a><span class="sd"> SELECT SUM(a) FROM (SELECT 1 a) AS x HAVING c &gt; 0</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a><span class="sd"> ) SELECT c FROM y;</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="sd"> WITH y(c) AS (</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a><span class="sd"> SELECT SUM(a) AS c FROM (SELECT 1 AS a) AS x HAVING c &gt; 0</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a><span class="sd"> ) SELECT c FROM y;</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a><span class="sd"> &quot;&quot;&quot;</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="c1"># --- Autofilled ---</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a><span class="sd"> will be rewritten as</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a>
+</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a><span class="sd"> WITH y(c) AS (</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a><span class="sd"> SELECT SUM(a) AS c FROM (SELECT 1 AS a) AS x HAVING c &gt; 0</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a><span class="sd"> ) SELECT c FROM y;</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a>
-</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a>
-</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="c1"># A trie of the time_mapping keys</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a>
-</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a>
-</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="c1"># --- Autofilled ---</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a>
+</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a>
+</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="c1"># A trie of the time_mapping keys</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <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="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</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="c1"># Delimiters for string literals and identifiers</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a>
-</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="c1"># Delimiters for bit, hex, byte and unicode literals</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">UNICODE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="n">UNICODE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a>
-</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a>
-</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a><span class="sd"> Args:</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</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="sd"> Example:</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</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="sd"> Returns:</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a><span class="sd"> The corresponding Dialect instance.</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a>
-</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a> <span class="p">)</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a>
-</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="kn">from</span> <span class="nn">difflib</span> <span class="kn">import</span> <span class="n">get_close_matches</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a>
-</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">get_close_matches</span><span class="p">(</span><span class="n">dialect_name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="k">if</span> <span class="n">similar</span><span class="p">:</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; Did you mean </span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">?&quot;</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="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.</span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="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="c1"># Delimiters for string literals and identifiers</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</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"># Delimiters for bit, hex, byte and unicode literals</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a> <span class="n">UNICODE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a> <span class="n">UNICODE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a>
+</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a>
+</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a><span class="sd"> Args:</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a>
+</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a><span class="sd"> Example:</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a>
+</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a><span class="sd"> Returns:</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a><span class="sd"> The corresponding Dialect instance.</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a><span class="sd"> &quot;&quot;&quot;</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="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="p">)</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a>
+</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="kn">from</span> <span class="nn">difflib</span> <span class="kn">import</span> <span class="n">get_close_matches</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="n">similar</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">get_close_matches</span><span class="p">(</span><span class="n">dialect_name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="k">if</span> <span class="n">similar</span><span class="p">:</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; Did you mean </span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">?&quot;</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">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.</span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a>
-</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a>
-</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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-331"><a href="#L-331"><span class="linenos"> 331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts a time format in this dialect to its equivalent Python `strftime` format.&quot;&quot;&quot;</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a> <span class="k">return</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><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="c1"># the time formats are quoted</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="p">)</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a>
-</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="k">return</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a>
-</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</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-333"><a href="#L-333"><span class="linenos"> 333</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts a time format in this dialect to its equivalent Python `strftime` format.&quot;&quot;&quot;</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="k">return</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><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="c1"># the time formats are quoted</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</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="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a> <span class="k">return</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a>
-</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a>
-</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</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">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a>
-</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="c1"># Does not currently take dialect state into account</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a>
-</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="c1"># Does not currently take dialect state into account</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a>
-</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a>
-</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a><span class="sd"> For example, an identifier like `FoO` would be resolved as `foo` in Postgres, because it</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a><span class="sd"> it would resolve it as `FOO`. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a>
-</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a>
-</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a>
-</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="nb">isinstance</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">Identifier</span><span class="p">)</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a> <span class="p">)</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="p">):</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="p">(</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="p">),</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="p">)</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a>
-</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a> <span class="k">return</span> <span class="n">expression</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="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</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">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a>
+</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="c1"># Does not currently take dialect state into account</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a>
+</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="c1"># Does not currently take dialect state into account</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a>
+</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a>
+</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a><span class="sd"> For example, an identifier like `FoO` would be resolved as `foo` in Postgres, because it</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a><span class="sd"> it would resolve it as `FOO`. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</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="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</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="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a>
+</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="nb">isinstance</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">Identifier</span><span class="p">)</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="p">)</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="p">):</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="p">(</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="p">),</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="p">)</span>
</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a>
-</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</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="kc">False</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="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</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">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="p">)</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a>
-</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a>
-</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a><span class="sd"> Args:</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a><span class="sd"> identify:</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a><span class="sd"> `&quot;always&quot;` or `True`: Always returns `True`.</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a><span class="sd"> `&quot;safe&quot;`: Only returns `True` if the identifier is case-insensitive.</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a>
-</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a><span class="sd"> Returns:</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a>
-</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a>
-</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="k">return</span> <span class="n">expression</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="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a>
+</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="p">)</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a>
+</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a>
+</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a><span class="sd"> Args:</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a><span class="sd"> identify:</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a><span class="sd"> `&quot;always&quot;` or `True`: Always returns `True`.</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a><span class="sd"> `&quot;safe&quot;`: Only returns `True` if the identifier is case-insensitive.</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="sd"> Returns:</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a>
+</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a>
-</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a><span class="sd"> Adds quotes to a given identifier.</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a>
-</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a><span class="sd"> Args:</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a><span class="sd"> expression: The expression of interest. If it&#39;s not an `Identifier`, this method is a no-op.</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a><span class="sd"> identify: If set to `False`, the quotes will only be added if the identifier is deemed</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a><span class="sd"> &quot;unsafe&quot;, with respect to its characters and this dialect&#39;s normalization strategy.</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Identifier</span><span class="p">):</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><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="k">return</span> <span class="n">expression</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="k">return</span> <span class="kc">False</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="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a><span class="sd"> Adds quotes to a given identifier.</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a>
+</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a><span class="sd"> Args:</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a><span class="sd"> expression: The expression of interest. If it&#39;s not an `Identifier`, this method is a no-op.</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a><span class="sd"> identify: If set to `False`, the quotes will only be added if the identifier is deemed</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a><span class="sd"> &quot;unsafe&quot;, with respect to its characters and this dialect&#39;s normalization strategy.</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Identifier</span><span class="p">):</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <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="k">def</span> <span class="nf">to_json_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">path_text</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><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a> <span class="k">return</span> <span class="n">parse_json_path</span><span class="p">(</span><span class="n">path_text</span><span class="p">)</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid JSON path syntax. </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a>
-</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="k">return</span> <span class="n">path</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="k">return</span> <span class="n">expression</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">to_json_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">path_text</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a>
+</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="k">return</span> <span class="n">parse_json_path</span><span class="p">(</span><span class="n">path_text</span><span class="p">)</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid JSON path syntax. </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a>
-</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a>
-</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a>
-</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a>
-</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="p">]</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a>
-</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a>
-</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="nd">@property</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</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="k">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a>
-</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a>
-</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a>
-</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a><span class="n">DialectType</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">],</span> <span class="kc">None</span><span class="p">]</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="k">return</span> <span class="n">path</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a>
+</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a>
+</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a>
+</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a>
+</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><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="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a>
+</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="nd">@property</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</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">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</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="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</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">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a>
</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a>
-</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a>
-</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a><span class="k">def</span> <span class="nf">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</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="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">flatten</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a>
-</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="k">def</span> <span class="nf">approx_count_distinct_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">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;accuracy&quot;</span><span class="p">):</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT does not support accuracy&quot;</span><span class="p">)</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a>
-</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">def</span> <span class="nf">if_sql</span><span class="p">(</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">false_value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">],</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="k">def</span> <span class="nf">_if_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="n">name</span><span class="p">,</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <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;true&quot;</span><span class="p">),</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <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;false&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">false_value</span><span class="p">,</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="p">)</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a>
-</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="k">return</span> <span class="n">_if_sql</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a><span class="n">DialectType</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">Dialect</span><span class="p">],</span> <span class="kc">None</span><span class="p">]</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a>
+</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a>
+</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a><span class="k">def</span> <span class="nf">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</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="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">flatten</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a>
+</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a>
+</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a><span class="k">def</span> <span class="nf">approx_count_distinct_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;accuracy&quot;</span><span class="p">):</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT does not support accuracy&quot;</span><span class="p">)</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a>
+</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">if_sql</span><span class="p">(</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">false_value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="k">def</span> <span class="nf">_if_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <span class="n">name</span><span class="p">,</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a> <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;true&quot;</span><span class="p">),</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a> <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;false&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">false_value</span><span class="p">,</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="p">)</span>
</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a>
-</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a>
-</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_sql</span><span class="p">(</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a> <span class="k">return</span> <span class="n">_if_sql</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a>
+</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">JSON_EXTRACT_TYPE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="ow">and</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">Literal</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;json&quot;</span><span class="p">))</span>
@@ -1528,45 +1531,60 @@
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a>
</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a>
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a><span class="k">def</span> <span class="nf">parse_json_extract_path</span><span class="p">(</span>
-</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">supports_null_if_invalid</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="k">def</span> <span class="nf">_parse_json_extract_path</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="n">null_if_invalid</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a>
-</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="n">segments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">()]</span>
-</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
-</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">)))</span>
-</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">))</span>
-</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="k">elif</span> <span class="n">supports_null_if_invalid</span><span class="p">:</span>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="n">null_if_invalid</span> <span class="o">=</span> <span class="n">arg</span>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a>
-</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</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-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="n">jsonpath</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPath</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">segments</span><span class="p">)</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
-</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="c1"># This is done to avoid failing in the expression validator due to the arg count</span>
-</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a> <span class="k">del</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
-</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="k">if</span> <span class="n">expr_type</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="k">return</span> <span class="n">expr_type</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">jsonpath</span><span class="p">,</span> <span class="n">null_if_invalid</span><span class="o">=</span><span class="n">null_if_invalid</span><span class="p">)</span>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="k">return</span> <span class="n">expr_type</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">jsonpath</span><span class="p">)</span>
-</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="k">return</span> <span class="n">_parse_json_extract_path</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a>
-</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a>
-</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a><span class="k">def</span> <span class="nf">json_path_segments</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="n">segments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="k">for</span> <span class="n">segment</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="n">path</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">segment</span><span class="p">)</span>
-</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="k">return</span> <span class="n">segments</span>
+</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">F</span><span class="p">],</span> <span class="n">zero_based_indexing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">F</span><span class="p">]:</span>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="k">def</span> <span class="nf">_parse_json_extract_path</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">F</span><span class="p">:</span>
+</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="n">segments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">()]</span>
+</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="c1"># We use the fallback parser because we can&#39;t really transpile non-literals safely</span>
+</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="k">return</span> <span class="n">expr_type</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a>
+</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="n">index</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">index</span> <span class="k">if</span> <span class="n">zero_based_indexing</span> <span class="k">else</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="p">)</span>
+</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">))</span>
+</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a>
+</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="c1"># This is done to avoid failing in the expression validator due to the arg count</span>
+</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="k">del</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="k">return</span> <span class="n">expr_type</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">JSONPath</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">segments</span><span class="p">))</span>
+</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a>
+</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="k">return</span> <span class="n">_parse_json_extract_path</span>
+</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a>
+</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a>
+</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a><span class="k">def</span> <span class="nf">json_extract_segments</span><span class="p">(</span>
+</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">quoted_index</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">JSON_EXTRACT_TYPE</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="k">def</span> <span class="nf">_json_extract_segments</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">JSON_EXTRACT_TYPE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="n">path</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPath</span><span class="p">):</span>
+</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a>
+</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="n">segments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="k">for</span> <span class="n">segment</span> <span class="ow">in</span> <span class="n">path</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="n">path</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">segment</span><span class="p">)</span>
+</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
+</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">segment</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">quoted_index</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">segment</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">)</span>
+</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="p">):</span>
+</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a>
+</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</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">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">segments</span><span class="p">)</span>
+</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a>
+</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="k">return</span> <span class="n">_json_extract_segments</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a><span class="k">def</span> <span class="nf">json_path_key_only_name</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">):</span>
+</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported wildcard in JSONPathKey expression&quot;</span><span class="p">)</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -1620,32 +1638,32 @@
</div>
<a class="headerlink" href="#Dialects"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialects-28"><a href="#Dialects-28"><span class="linenos">28</span></a><span class="k">class</span> <span class="nc">Dialects</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span>
-</span><span id="Dialects-29"><a href="#Dialects-29"><span class="linenos">29</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Dialects supported by SQLGLot.&quot;&quot;&quot;</span>
-</span><span id="Dialects-30"><a href="#Dialects-30"><span class="linenos">30</span></a>
-</span><span id="Dialects-31"><a href="#Dialects-31"><span class="linenos">31</span></a> <span class="n">DIALECT</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialects-30"><a href="#Dialects-30"><span class="linenos">30</span></a><span class="k">class</span> <span class="nc">Dialects</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">Enum</span><span class="p">):</span>
+</span><span id="Dialects-31"><a href="#Dialects-31"><span class="linenos">31</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Dialects supported by SQLGLot.&quot;&quot;&quot;</span>
</span><span id="Dialects-32"><a href="#Dialects-32"><span class="linenos">32</span></a>
-</span><span id="Dialects-33"><a href="#Dialects-33"><span class="linenos">33</span></a> <span class="n">BIGQUERY</span> <span class="o">=</span> <span class="s2">&quot;bigquery&quot;</span>
-</span><span id="Dialects-34"><a href="#Dialects-34"><span class="linenos">34</span></a> <span class="n">CLICKHOUSE</span> <span class="o">=</span> <span class="s2">&quot;clickhouse&quot;</span>
-</span><span id="Dialects-35"><a href="#Dialects-35"><span class="linenos">35</span></a> <span class="n">DATABRICKS</span> <span class="o">=</span> <span class="s2">&quot;databricks&quot;</span>
-</span><span id="Dialects-36"><a href="#Dialects-36"><span class="linenos">36</span></a> <span class="n">DORIS</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
-</span><span id="Dialects-37"><a href="#Dialects-37"><span class="linenos">37</span></a> <span class="n">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
-</span><span id="Dialects-38"><a href="#Dialects-38"><span class="linenos">38</span></a> <span class="n">DUCKDB</span> <span class="o">=</span> <span class="s2">&quot;duckdb&quot;</span>
-</span><span id="Dialects-39"><a href="#Dialects-39"><span class="linenos">39</span></a> <span class="n">HIVE</span> <span class="o">=</span> <span class="s2">&quot;hive&quot;</span>
-</span><span id="Dialects-40"><a href="#Dialects-40"><span class="linenos">40</span></a> <span class="n">MYSQL</span> <span class="o">=</span> <span class="s2">&quot;mysql&quot;</span>
-</span><span id="Dialects-41"><a href="#Dialects-41"><span class="linenos">41</span></a> <span class="n">ORACLE</span> <span class="o">=</span> <span class="s2">&quot;oracle&quot;</span>
-</span><span id="Dialects-42"><a href="#Dialects-42"><span class="linenos">42</span></a> <span class="n">POSTGRES</span> <span class="o">=</span> <span class="s2">&quot;postgres&quot;</span>
-</span><span id="Dialects-43"><a href="#Dialects-43"><span class="linenos">43</span></a> <span class="n">PRESTO</span> <span class="o">=</span> <span class="s2">&quot;presto&quot;</span>
-</span><span id="Dialects-44"><a href="#Dialects-44"><span class="linenos">44</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
-</span><span id="Dialects-45"><a href="#Dialects-45"><span class="linenos">45</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
-</span><span id="Dialects-46"><a href="#Dialects-46"><span class="linenos">46</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
-</span><span id="Dialects-47"><a href="#Dialects-47"><span class="linenos">47</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
-</span><span id="Dialects-48"><a href="#Dialects-48"><span class="linenos">48</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
-</span><span id="Dialects-49"><a href="#Dialects-49"><span class="linenos">49</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
-</span><span id="Dialects-50"><a href="#Dialects-50"><span class="linenos">50</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
-</span><span id="Dialects-51"><a href="#Dialects-51"><span class="linenos">51</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
-</span><span id="Dialects-52"><a href="#Dialects-52"><span class="linenos">52</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
-</span><span id="Dialects-53"><a href="#Dialects-53"><span class="linenos">53</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
+</span><span id="Dialects-33"><a href="#Dialects-33"><span class="linenos">33</span></a> <span class="n">DIALECT</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Dialects-34"><a href="#Dialects-34"><span class="linenos">34</span></a>
+</span><span id="Dialects-35"><a href="#Dialects-35"><span class="linenos">35</span></a> <span class="n">BIGQUERY</span> <span class="o">=</span> <span class="s2">&quot;bigquery&quot;</span>
+</span><span id="Dialects-36"><a href="#Dialects-36"><span class="linenos">36</span></a> <span class="n">CLICKHOUSE</span> <span class="o">=</span> <span class="s2">&quot;clickhouse&quot;</span>
+</span><span id="Dialects-37"><a href="#Dialects-37"><span class="linenos">37</span></a> <span class="n">DATABRICKS</span> <span class="o">=</span> <span class="s2">&quot;databricks&quot;</span>
+</span><span id="Dialects-38"><a href="#Dialects-38"><span class="linenos">38</span></a> <span class="n">DORIS</span> <span class="o">=</span> <span class="s2">&quot;doris&quot;</span>
+</span><span id="Dialects-39"><a href="#Dialects-39"><span class="linenos">39</span></a> <span class="n">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
+</span><span id="Dialects-40"><a href="#Dialects-40"><span class="linenos">40</span></a> <span class="n">DUCKDB</span> <span class="o">=</span> <span class="s2">&quot;duckdb&quot;</span>
+</span><span id="Dialects-41"><a href="#Dialects-41"><span class="linenos">41</span></a> <span class="n">HIVE</span> <span class="o">=</span> <span class="s2">&quot;hive&quot;</span>
+</span><span id="Dialects-42"><a href="#Dialects-42"><span class="linenos">42</span></a> <span class="n">MYSQL</span> <span class="o">=</span> <span class="s2">&quot;mysql&quot;</span>
+</span><span id="Dialects-43"><a href="#Dialects-43"><span class="linenos">43</span></a> <span class="n">ORACLE</span> <span class="o">=</span> <span class="s2">&quot;oracle&quot;</span>
+</span><span id="Dialects-44"><a href="#Dialects-44"><span class="linenos">44</span></a> <span class="n">POSTGRES</span> <span class="o">=</span> <span class="s2">&quot;postgres&quot;</span>
+</span><span id="Dialects-45"><a href="#Dialects-45"><span class="linenos">45</span></a> <span class="n">PRESTO</span> <span class="o">=</span> <span class="s2">&quot;presto&quot;</span>
+</span><span id="Dialects-46"><a href="#Dialects-46"><span class="linenos">46</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
+</span><span id="Dialects-47"><a href="#Dialects-47"><span class="linenos">47</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
+</span><span id="Dialects-48"><a href="#Dialects-48"><span class="linenos">48</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
+</span><span id="Dialects-49"><a href="#Dialects-49"><span class="linenos">49</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
+</span><span id="Dialects-50"><a href="#Dialects-50"><span class="linenos">50</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
+</span><span id="Dialects-51"><a href="#Dialects-51"><span class="linenos">51</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
+</span><span id="Dialects-52"><a href="#Dialects-52"><span class="linenos">52</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
+</span><span id="Dialects-53"><a href="#Dialects-53"><span class="linenos">53</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
+</span><span id="Dialects-54"><a href="#Dialects-54"><span class="linenos">54</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
+</span><span id="Dialects-55"><a href="#Dialects-55"><span class="linenos">55</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
</span></pre></div>
@@ -1989,20 +2007,20 @@
</div>
<a class="headerlink" href="#NormalizationStrategy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NormalizationStrategy-56"><a href="#NormalizationStrategy-56"><span class="linenos">56</span></a><span class="k">class</span> <span class="nc">NormalizationStrategy</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">AutoName</span><span class="p">):</span>
-</span><span id="NormalizationStrategy-57"><a href="#NormalizationStrategy-57"><span class="linenos">57</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
-</span><span id="NormalizationStrategy-58"><a href="#NormalizationStrategy-58"><span class="linenos">58</span></a>
-</span><span id="NormalizationStrategy-59"><a href="#NormalizationStrategy-59"><span class="linenos">59</span></a> <span class="n">LOWERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="NormalizationStrategy-60"><a href="#NormalizationStrategy-60"><span class="linenos">60</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are lowercased.&quot;&quot;&quot;</span>
-</span><span id="NormalizationStrategy-61"><a href="#NormalizationStrategy-61"><span class="linenos">61</span></a>
-</span><span id="NormalizationStrategy-62"><a href="#NormalizationStrategy-62"><span class="linenos">62</span></a> <span class="n">UPPERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="NormalizationStrategy-63"><a href="#NormalizationStrategy-63"><span class="linenos">63</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are uppercased.&quot;&quot;&quot;</span>
-</span><span id="NormalizationStrategy-64"><a href="#NormalizationStrategy-64"><span class="linenos">64</span></a>
-</span><span id="NormalizationStrategy-65"><a href="#NormalizationStrategy-65"><span class="linenos">65</span></a> <span class="n">CASE_SENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="NormalizationStrategy-66"><a href="#NormalizationStrategy-66"><span class="linenos">66</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-sensitive, regardless of quotes.&quot;&quot;&quot;</span>
-</span><span id="NormalizationStrategy-67"><a href="#NormalizationStrategy-67"><span class="linenos">67</span></a>
-</span><span id="NormalizationStrategy-68"><a href="#NormalizationStrategy-68"><span class="linenos">68</span></a> <span class="n">CASE_INSENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="NormalizationStrategy-69"><a href="#NormalizationStrategy-69"><span class="linenos">69</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-insensitive, regardless of quotes.&quot;&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NormalizationStrategy-58"><a href="#NormalizationStrategy-58"><span class="linenos">58</span></a><span class="k">class</span> <span class="nc">NormalizationStrategy</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">AutoName</span><span class="p">):</span>
+</span><span id="NormalizationStrategy-59"><a href="#NormalizationStrategy-59"><span class="linenos">59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
+</span><span id="NormalizationStrategy-60"><a href="#NormalizationStrategy-60"><span class="linenos">60</span></a>
+</span><span id="NormalizationStrategy-61"><a href="#NormalizationStrategy-61"><span class="linenos">61</span></a> <span class="n">LOWERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="NormalizationStrategy-62"><a href="#NormalizationStrategy-62"><span class="linenos">62</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are lowercased.&quot;&quot;&quot;</span>
+</span><span id="NormalizationStrategy-63"><a href="#NormalizationStrategy-63"><span class="linenos">63</span></a>
+</span><span id="NormalizationStrategy-64"><a href="#NormalizationStrategy-64"><span class="linenos">64</span></a> <span class="n">UPPERCASE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="NormalizationStrategy-65"><a href="#NormalizationStrategy-65"><span class="linenos">65</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Unquoted identifiers are uppercased.&quot;&quot;&quot;</span>
+</span><span id="NormalizationStrategy-66"><a href="#NormalizationStrategy-66"><span class="linenos">66</span></a>
+</span><span id="NormalizationStrategy-67"><a href="#NormalizationStrategy-67"><span class="linenos">67</span></a> <span class="n">CASE_SENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="NormalizationStrategy-68"><a href="#NormalizationStrategy-68"><span class="linenos">68</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-sensitive, regardless of quotes.&quot;&quot;&quot;</span>
+</span><span id="NormalizationStrategy-69"><a href="#NormalizationStrategy-69"><span class="linenos">69</span></a>
+</span><span id="NormalizationStrategy-70"><a href="#NormalizationStrategy-70"><span class="linenos">70</span></a> <span class="n">CASE_INSENSITIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="NormalizationStrategy-71"><a href="#NormalizationStrategy-71"><span class="linenos">71</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Always case-insensitive, regardless of quotes.&quot;&quot;&quot;</span>
</span></pre></div>
@@ -2138,350 +2156,350 @@
</div>
<a class="headerlink" href="#Dialect"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect-148"><a href="#Dialect-148"><span class="linenos">148</span></a><span class="k">class</span> <span class="nc">Dialect</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Dialect</span><span class="p">):</span>
-</span><span id="Dialect-149"><a href="#Dialect-149"><span class="linenos">149</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Dialect-150"><a href="#Dialect-150"><span class="linenos">150</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the base index offset for arrays.&quot;&quot;&quot;</span>
-</span><span id="Dialect-151"><a href="#Dialect-151"><span class="linenos">151</span></a>
-</span><span id="Dialect-152"><a href="#Dialect-152"><span class="linenos">152</span></a> <span class="n">WEEK_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Dialect-153"><a href="#Dialect-153"><span class="linenos">153</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the day of week of DATE_TRUNC(week). Defaults to 0 (Monday). -1 would be Sunday.&quot;&quot;&quot;</span>
-</span><span id="Dialect-154"><a href="#Dialect-154"><span class="linenos">154</span></a>
-</span><span id="Dialect-155"><a href="#Dialect-155"><span class="linenos">155</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-156"><a href="#Dialect-156"><span class="linenos">156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `UNNEST` table aliases are treated as column aliases.&quot;&quot;&quot;</span>
-</span><span id="Dialect-157"><a href="#Dialect-157"><span class="linenos">157</span></a>
-</span><span id="Dialect-158"><a href="#Dialect-158"><span class="linenos">158</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-159"><a href="#Dialect-159"><span class="linenos">159</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the table alias comes after tablesample.&quot;&quot;&quot;</span>
-</span><span id="Dialect-160"><a href="#Dialect-160"><span class="linenos">160</span></a>
-</span><span id="Dialect-161"><a href="#Dialect-161"><span class="linenos">161</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-162"><a href="#Dialect-162"><span class="linenos">162</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not a size in the table sample clause represents percentage.&quot;&quot;&quot;</span>
-</span><span id="Dialect-163"><a href="#Dialect-163"><span class="linenos">163</span></a>
-</span><span id="Dialect-164"><a href="#Dialect-164"><span class="linenos">164</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">LOWERCASE</span>
-</span><span id="Dialect-165"><a href="#Dialect-165"><span class="linenos">165</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
-</span><span id="Dialect-166"><a href="#Dialect-166"><span class="linenos">166</span></a>
-</span><span id="Dialect-167"><a href="#Dialect-167"><span class="linenos">167</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-168"><a href="#Dialect-168"><span class="linenos">168</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not an unquoted identifier can start with a digit.&quot;&quot;&quot;</span>
-</span><span id="Dialect-169"><a href="#Dialect-169"><span class="linenos">169</span></a>
-</span><span id="Dialect-170"><a href="#Dialect-170"><span class="linenos">170</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Dialect-171"><a href="#Dialect-171"><span class="linenos">171</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the DPIPE token (`||`) is a string concatenation operator.&quot;&quot;&quot;</span>
-</span><span id="Dialect-172"><a href="#Dialect-172"><span class="linenos">172</span></a>
-</span><span id="Dialect-173"><a href="#Dialect-173"><span class="linenos">173</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-174"><a href="#Dialect-174"><span class="linenos">174</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `CONCAT`&#39;s arguments must be strings.&quot;&quot;&quot;</span>
-</span><span id="Dialect-175"><a href="#Dialect-175"><span class="linenos">175</span></a>
-</span><span id="Dialect-176"><a href="#Dialect-176"><span class="linenos">176</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Dialect-177"><a href="#Dialect-177"><span class="linenos">177</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not user-defined data types are supported.&quot;&quot;&quot;</span>
-</span><span id="Dialect-178"><a href="#Dialect-178"><span class="linenos">178</span></a>
-</span><span id="Dialect-179"><a href="#Dialect-179"><span class="linenos">179</span></a> <span class="n">SUPPORTS_SEMI_ANTI_JOIN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Dialect-180"><a href="#Dialect-180"><span class="linenos">180</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `SEMI` or `ANTI` joins are supported.&quot;&quot;&quot;</span>
-</span><span id="Dialect-181"><a href="#Dialect-181"><span class="linenos">181</span></a>
-</span><span id="Dialect-182"><a href="#Dialect-182"><span class="linenos">182</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="Dialect-183"><a href="#Dialect-183"><span class="linenos">183</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines how function names are going to be normalized.&quot;&quot;&quot;</span>
-</span><span id="Dialect-184"><a href="#Dialect-184"><span class="linenos">184</span></a>
-</span><span id="Dialect-185"><a href="#Dialect-185"><span class="linenos">185</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Dialect-186"><a href="#Dialect-186"><span class="linenos">186</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether the base comes first in the `LOG` function.&quot;&quot;&quot;</span>
-</span><span id="Dialect-187"><a href="#Dialect-187"><span class="linenos">187</span></a>
-</span><span id="Dialect-188"><a href="#Dialect-188"><span class="linenos">188</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="Dialect-189"><a href="#Dialect-189"><span class="linenos">189</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-190"><a href="#Dialect-190"><span class="linenos">190</span></a><span class="sd"> Indicates the default `NULL` ordering method to use if not explicitly set.</span>
-</span><span id="Dialect-191"><a href="#Dialect-191"><span class="linenos">191</span></a><span class="sd"> Possible values: `&quot;nulls_are_small&quot;`, `&quot;nulls_are_large&quot;`, `&quot;nulls_are_last&quot;`</span>
-</span><span id="Dialect-192"><a href="#Dialect-192"><span class="linenos">192</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-193"><a href="#Dialect-193"><span class="linenos">193</span></a>
-</span><span id="Dialect-194"><a href="#Dialect-194"><span class="linenos">194</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-195"><a href="#Dialect-195"><span class="linenos">195</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-196"><a href="#Dialect-196"><span class="linenos">196</span></a><span class="sd"> Whether the behavior of `a / b` depends on the types of `a` and `b`.</span>
-</span><span id="Dialect-197"><a href="#Dialect-197"><span class="linenos">197</span></a><span class="sd"> False means `a / b` is always float division.</span>
-</span><span id="Dialect-198"><a href="#Dialect-198"><span class="linenos">198</span></a><span class="sd"> True means `a / b` is integer division if both `a` and `b` are integers.</span>
-</span><span id="Dialect-199"><a href="#Dialect-199"><span class="linenos">199</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-200"><a href="#Dialect-200"><span class="linenos">200</span></a>
-</span><span id="Dialect-201"><a href="#Dialect-201"><span class="linenos">201</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-202"><a href="#Dialect-202"><span class="linenos">202</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether division by zero throws an error (`False`) or returns NULL (`True`).&quot;&quot;&quot;</span>
-</span><span id="Dialect-203"><a href="#Dialect-203"><span class="linenos">203</span></a>
-</span><span id="Dialect-204"><a href="#Dialect-204"><span class="linenos">204</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-205"><a href="#Dialect-205"><span class="linenos">205</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A `NULL` arg in `CONCAT` yields `NULL` by default, but in some dialects it yields an empty string.&quot;&quot;&quot;</span>
-</span><span id="Dialect-206"><a href="#Dialect-206"><span class="linenos">206</span></a>
-</span><span id="Dialect-207"><a href="#Dialect-207"><span class="linenos">207</span></a> <span class="n">DATE_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
-</span><span id="Dialect-208"><a href="#Dialect-208"><span class="linenos">208</span></a> <span class="n">DATEINT_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y%m</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
-</span><span id="Dialect-209"><a href="#Dialect-209"><span class="linenos">209</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&#39;&quot;</span>
-</span><span id="Dialect-210"><a href="#Dialect-210"><span class="linenos">210</span></a>
-</span><span id="Dialect-211"><a href="#Dialect-211"><span class="linenos">211</span></a> <span class="n">TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-212"><a href="#Dialect-212"><span class="linenos">212</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Associates this dialect&#39;s time formats with their equivalent Python `strftime` format.&quot;&quot;&quot;</span>
-</span><span id="Dialect-213"><a href="#Dialect-213"><span class="linenos">213</span></a>
-</span><span id="Dialect-214"><a href="#Dialect-214"><span class="linenos">214</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
-</span><span id="Dialect-215"><a href="#Dialect-215"><span class="linenos">215</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
-</span><span id="Dialect-216"><a href="#Dialect-216"><span class="linenos">216</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-217"><a href="#Dialect-217"><span class="linenos">217</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-218"><a href="#Dialect-218"><span class="linenos">218</span></a><span class="sd"> Helper which is used for parsing the special syntax `CAST(x AS DATE FORMAT &#39;yyyy&#39;)`.</span>
-</span><span id="Dialect-219"><a href="#Dialect-219"><span class="linenos">219</span></a><span class="sd"> If empty, the corresponding trie will be constructed off of `TIME_MAPPING`.</span>
-</span><span id="Dialect-220"><a href="#Dialect-220"><span class="linenos">220</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-221"><a href="#Dialect-221"><span class="linenos">221</span></a>
-</span><span id="Dialect-222"><a href="#Dialect-222"><span class="linenos">222</span></a> <span class="n">ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-223"><a href="#Dialect-223"><span class="linenos">223</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Mapping of an unescaped escape sequence to the corresponding character.&quot;&quot;&quot;</span>
-</span><span id="Dialect-224"><a href="#Dialect-224"><span class="linenos">224</span></a>
-</span><span id="Dialect-225"><a href="#Dialect-225"><span class="linenos">225</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Dialect-226"><a href="#Dialect-226"><span class="linenos">226</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-227"><a href="#Dialect-227"><span class="linenos">227</span></a><span class="sd"> Columns that are auto-generated by the engine corresponding to this dialect.</span>
-</span><span id="Dialect-228"><a href="#Dialect-228"><span class="linenos">228</span></a><span class="sd"> For example, such columns may be excluded from `SELECT *` queries.</span>
-</span><span id="Dialect-229"><a href="#Dialect-229"><span class="linenos">229</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-230"><a href="#Dialect-230"><span class="linenos">230</span></a>
-</span><span id="Dialect-231"><a href="#Dialect-231"><span class="linenos">231</span></a> <span class="n">PREFER_CTE_ALIAS_COLUMN</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-232"><a href="#Dialect-232"><span class="linenos">232</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-233"><a href="#Dialect-233"><span class="linenos">233</span></a><span class="sd"> Some dialects, such as Snowflake, allow you to reference a CTE column alias in the</span>
-</span><span id="Dialect-234"><a href="#Dialect-234"><span class="linenos">234</span></a><span class="sd"> HAVING clause of the CTE. This flag will cause the CTE alias columns to override</span>
-</span><span id="Dialect-235"><a href="#Dialect-235"><span class="linenos">235</span></a><span class="sd"> any projection aliases in the subquery.</span>
-</span><span id="Dialect-236"><a href="#Dialect-236"><span class="linenos">236</span></a>
-</span><span id="Dialect-237"><a href="#Dialect-237"><span class="linenos">237</span></a><span class="sd"> For example,</span>
-</span><span id="Dialect-238"><a href="#Dialect-238"><span class="linenos">238</span></a><span class="sd"> WITH y(c) AS (</span>
-</span><span id="Dialect-239"><a href="#Dialect-239"><span class="linenos">239</span></a><span class="sd"> SELECT SUM(a) FROM (SELECT 1 a) AS x HAVING c &gt; 0</span>
-</span><span id="Dialect-240"><a href="#Dialect-240"><span class="linenos">240</span></a><span class="sd"> ) SELECT c FROM y;</span>
-</span><span id="Dialect-241"><a href="#Dialect-241"><span class="linenos">241</span></a>
-</span><span id="Dialect-242"><a href="#Dialect-242"><span class="linenos">242</span></a><span class="sd"> will be rewritten as</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect-150"><a href="#Dialect-150"><span class="linenos">150</span></a><span class="k">class</span> <span class="nc">Dialect</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Dialect</span><span class="p">):</span>
+</span><span id="Dialect-151"><a href="#Dialect-151"><span class="linenos">151</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Dialect-152"><a href="#Dialect-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the base index offset for arrays.&quot;&quot;&quot;</span>
+</span><span id="Dialect-153"><a href="#Dialect-153"><span class="linenos">153</span></a>
+</span><span id="Dialect-154"><a href="#Dialect-154"><span class="linenos">154</span></a> <span class="n">WEEK_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Dialect-155"><a href="#Dialect-155"><span class="linenos">155</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines the day of week of DATE_TRUNC(week). Defaults to 0 (Monday). -1 would be Sunday.&quot;&quot;&quot;</span>
+</span><span id="Dialect-156"><a href="#Dialect-156"><span class="linenos">156</span></a>
+</span><span id="Dialect-157"><a href="#Dialect-157"><span class="linenos">157</span></a> <span class="n">UNNEST_COLUMN_ONLY</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-158"><a href="#Dialect-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `UNNEST` table aliases are treated as column aliases.&quot;&quot;&quot;</span>
+</span><span id="Dialect-159"><a href="#Dialect-159"><span class="linenos">159</span></a>
+</span><span id="Dialect-160"><a href="#Dialect-160"><span class="linenos">160</span></a> <span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-161"><a href="#Dialect-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the table alias comes after tablesample.&quot;&quot;&quot;</span>
+</span><span id="Dialect-162"><a href="#Dialect-162"><span class="linenos">162</span></a>
+</span><span id="Dialect-163"><a href="#Dialect-163"><span class="linenos">163</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-164"><a href="#Dialect-164"><span class="linenos">164</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not a size in the table sample clause represents percentage.&quot;&quot;&quot;</span>
+</span><span id="Dialect-165"><a href="#Dialect-165"><span class="linenos">165</span></a>
+</span><span id="Dialect-166"><a href="#Dialect-166"><span class="linenos">166</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">LOWERCASE</span>
+</span><span id="Dialect-167"><a href="#Dialect-167"><span class="linenos">167</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Specifies the strategy according to which identifiers should be normalized.&quot;&quot;&quot;</span>
+</span><span id="Dialect-168"><a href="#Dialect-168"><span class="linenos">168</span></a>
+</span><span id="Dialect-169"><a href="#Dialect-169"><span class="linenos">169</span></a> <span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-170"><a href="#Dialect-170"><span class="linenos">170</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not an unquoted identifier can start with a digit.&quot;&quot;&quot;</span>
+</span><span id="Dialect-171"><a href="#Dialect-171"><span class="linenos">171</span></a>
+</span><span id="Dialect-172"><a href="#Dialect-172"><span class="linenos">172</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Dialect-173"><a href="#Dialect-173"><span class="linenos">173</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not the DPIPE token (`||`) is a string concatenation operator.&quot;&quot;&quot;</span>
+</span><span id="Dialect-174"><a href="#Dialect-174"><span class="linenos">174</span></a>
+</span><span id="Dialect-175"><a href="#Dialect-175"><span class="linenos">175</span></a> <span class="n">STRICT_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-176"><a href="#Dialect-176"><span class="linenos">176</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `CONCAT`&#39;s arguments must be strings.&quot;&quot;&quot;</span>
+</span><span id="Dialect-177"><a href="#Dialect-177"><span class="linenos">177</span></a>
+</span><span id="Dialect-178"><a href="#Dialect-178"><span class="linenos">178</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Dialect-179"><a href="#Dialect-179"><span class="linenos">179</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not user-defined data types are supported.&quot;&quot;&quot;</span>
+</span><span id="Dialect-180"><a href="#Dialect-180"><span class="linenos">180</span></a>
+</span><span id="Dialect-181"><a href="#Dialect-181"><span class="linenos">181</span></a> <span class="n">SUPPORTS_SEMI_ANTI_JOIN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Dialect-182"><a href="#Dialect-182"><span class="linenos">182</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether or not `SEMI` or `ANTI` joins are supported.&quot;&quot;&quot;</span>
+</span><span id="Dialect-183"><a href="#Dialect-183"><span class="linenos">183</span></a>
+</span><span id="Dialect-184"><a href="#Dialect-184"><span class="linenos">184</span></a> <span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="Dialect-185"><a href="#Dialect-185"><span class="linenos">185</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines how function names are going to be normalized.&quot;&quot;&quot;</span>
+</span><span id="Dialect-186"><a href="#Dialect-186"><span class="linenos">186</span></a>
+</span><span id="Dialect-187"><a href="#Dialect-187"><span class="linenos">187</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Dialect-188"><a href="#Dialect-188"><span class="linenos">188</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether the base comes first in the `LOG` function.&quot;&quot;&quot;</span>
+</span><span id="Dialect-189"><a href="#Dialect-189"><span class="linenos">189</span></a>
+</span><span id="Dialect-190"><a href="#Dialect-190"><span class="linenos">190</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="Dialect-191"><a href="#Dialect-191"><span class="linenos">191</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-192"><a href="#Dialect-192"><span class="linenos">192</span></a><span class="sd"> Indicates the default `NULL` ordering method to use if not explicitly set.</span>
+</span><span id="Dialect-193"><a href="#Dialect-193"><span class="linenos">193</span></a><span class="sd"> Possible values: `&quot;nulls_are_small&quot;`, `&quot;nulls_are_large&quot;`, `&quot;nulls_are_last&quot;`</span>
+</span><span id="Dialect-194"><a href="#Dialect-194"><span class="linenos">194</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-195"><a href="#Dialect-195"><span class="linenos">195</span></a>
+</span><span id="Dialect-196"><a href="#Dialect-196"><span class="linenos">196</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-197"><a href="#Dialect-197"><span class="linenos">197</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-198"><a href="#Dialect-198"><span class="linenos">198</span></a><span class="sd"> Whether the behavior of `a / b` depends on the types of `a` and `b`.</span>
+</span><span id="Dialect-199"><a href="#Dialect-199"><span class="linenos">199</span></a><span class="sd"> False means `a / b` is always float division.</span>
+</span><span id="Dialect-200"><a href="#Dialect-200"><span class="linenos">200</span></a><span class="sd"> True means `a / b` is integer division if both `a` and `b` are integers.</span>
+</span><span id="Dialect-201"><a href="#Dialect-201"><span class="linenos">201</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-202"><a href="#Dialect-202"><span class="linenos">202</span></a>
+</span><span id="Dialect-203"><a href="#Dialect-203"><span class="linenos">203</span></a> <span class="n">SAFE_DIVISION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-204"><a href="#Dialect-204"><span class="linenos">204</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Determines whether division by zero throws an error (`False`) or returns NULL (`True`).&quot;&quot;&quot;</span>
+</span><span id="Dialect-205"><a href="#Dialect-205"><span class="linenos">205</span></a>
+</span><span id="Dialect-206"><a href="#Dialect-206"><span class="linenos">206</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-207"><a href="#Dialect-207"><span class="linenos">207</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;A `NULL` arg in `CONCAT` yields `NULL` by default, but in some dialects it yields an empty string.&quot;&quot;&quot;</span>
+</span><span id="Dialect-208"><a href="#Dialect-208"><span class="linenos">208</span></a>
+</span><span id="Dialect-209"><a href="#Dialect-209"><span class="linenos">209</span></a> <span class="n">DATE_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
+</span><span id="Dialect-210"><a href="#Dialect-210"><span class="linenos">210</span></a> <span class="n">DATEINT_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y%m</span><span class="si">%d</span><span class="s2">&#39;&quot;</span>
+</span><span id="Dialect-211"><a href="#Dialect-211"><span class="linenos">211</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&#39;&quot;</span>
+</span><span id="Dialect-212"><a href="#Dialect-212"><span class="linenos">212</span></a>
+</span><span id="Dialect-213"><a href="#Dialect-213"><span class="linenos">213</span></a> <span class="n">TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-214"><a href="#Dialect-214"><span class="linenos">214</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Associates this dialect&#39;s time formats with their equivalent Python `strftime` format.&quot;&quot;&quot;</span>
+</span><span id="Dialect-215"><a href="#Dialect-215"><span class="linenos">215</span></a>
+</span><span id="Dialect-216"><a href="#Dialect-216"><span class="linenos">216</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_model_rules_date_time</span>
+</span><span id="Dialect-217"><a href="#Dialect-217"><span class="linenos">217</span></a> <span class="c1"># https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Data-Type-Conversions/Character-to-DATE-Conversion/Forcing-a-FORMAT-on-CAST-for-Converting-Character-to-DATE</span>
+</span><span id="Dialect-218"><a href="#Dialect-218"><span class="linenos">218</span></a> <span class="n">FORMAT_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-219"><a href="#Dialect-219"><span class="linenos">219</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-220"><a href="#Dialect-220"><span class="linenos">220</span></a><span class="sd"> Helper which is used for parsing the special syntax `CAST(x AS DATE FORMAT &#39;yyyy&#39;)`.</span>
+</span><span id="Dialect-221"><a href="#Dialect-221"><span class="linenos">221</span></a><span class="sd"> If empty, the corresponding trie will be constructed off of `TIME_MAPPING`.</span>
+</span><span id="Dialect-222"><a href="#Dialect-222"><span class="linenos">222</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-223"><a href="#Dialect-223"><span class="linenos">223</span></a>
+</span><span id="Dialect-224"><a href="#Dialect-224"><span class="linenos">224</span></a> <span class="n">ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-225"><a href="#Dialect-225"><span class="linenos">225</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Mapping of an unescaped escape sequence to the corresponding character.&quot;&quot;&quot;</span>
+</span><span id="Dialect-226"><a href="#Dialect-226"><span class="linenos">226</span></a>
+</span><span id="Dialect-227"><a href="#Dialect-227"><span class="linenos">227</span></a> <span class="n">PSEUDOCOLUMNS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Dialect-228"><a href="#Dialect-228"><span class="linenos">228</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-229"><a href="#Dialect-229"><span class="linenos">229</span></a><span class="sd"> Columns that are auto-generated by the engine corresponding to this dialect.</span>
+</span><span id="Dialect-230"><a href="#Dialect-230"><span class="linenos">230</span></a><span class="sd"> For example, such columns may be excluded from `SELECT *` queries.</span>
+</span><span id="Dialect-231"><a href="#Dialect-231"><span class="linenos">231</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-232"><a href="#Dialect-232"><span class="linenos">232</span></a>
+</span><span id="Dialect-233"><a href="#Dialect-233"><span class="linenos">233</span></a> <span class="n">PREFER_CTE_ALIAS_COLUMN</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-234"><a href="#Dialect-234"><span class="linenos">234</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-235"><a href="#Dialect-235"><span class="linenos">235</span></a><span class="sd"> Some dialects, such as Snowflake, allow you to reference a CTE column alias in the</span>
+</span><span id="Dialect-236"><a href="#Dialect-236"><span class="linenos">236</span></a><span class="sd"> HAVING clause of the CTE. This flag will cause the CTE alias columns to override</span>
+</span><span id="Dialect-237"><a href="#Dialect-237"><span class="linenos">237</span></a><span class="sd"> any projection aliases in the subquery.</span>
+</span><span id="Dialect-238"><a href="#Dialect-238"><span class="linenos">238</span></a>
+</span><span id="Dialect-239"><a href="#Dialect-239"><span class="linenos">239</span></a><span class="sd"> For example,</span>
+</span><span id="Dialect-240"><a href="#Dialect-240"><span class="linenos">240</span></a><span class="sd"> WITH y(c) AS (</span>
+</span><span id="Dialect-241"><a href="#Dialect-241"><span class="linenos">241</span></a><span class="sd"> SELECT SUM(a) FROM (SELECT 1 a) AS x HAVING c &gt; 0</span>
+</span><span id="Dialect-242"><a href="#Dialect-242"><span class="linenos">242</span></a><span class="sd"> ) SELECT c FROM y;</span>
</span><span id="Dialect-243"><a href="#Dialect-243"><span class="linenos">243</span></a>
-</span><span id="Dialect-244"><a href="#Dialect-244"><span class="linenos">244</span></a><span class="sd"> WITH y(c) AS (</span>
-</span><span id="Dialect-245"><a href="#Dialect-245"><span class="linenos">245</span></a><span class="sd"> SELECT SUM(a) AS c FROM (SELECT 1 AS a) AS x HAVING c &gt; 0</span>
-</span><span id="Dialect-246"><a href="#Dialect-246"><span class="linenos">246</span></a><span class="sd"> ) SELECT c FROM y;</span>
-</span><span id="Dialect-247"><a href="#Dialect-247"><span class="linenos">247</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-248"><a href="#Dialect-248"><span class="linenos">248</span></a>
-</span><span id="Dialect-249"><a href="#Dialect-249"><span class="linenos">249</span></a> <span class="c1"># --- Autofilled ---</span>
+</span><span id="Dialect-244"><a href="#Dialect-244"><span class="linenos">244</span></a><span class="sd"> will be rewritten as</span>
+</span><span id="Dialect-245"><a href="#Dialect-245"><span class="linenos">245</span></a>
+</span><span id="Dialect-246"><a href="#Dialect-246"><span class="linenos">246</span></a><span class="sd"> WITH y(c) AS (</span>
+</span><span id="Dialect-247"><a href="#Dialect-247"><span class="linenos">247</span></a><span class="sd"> SELECT SUM(a) AS c FROM (SELECT 1 AS a) AS x HAVING c &gt; 0</span>
+</span><span id="Dialect-248"><a href="#Dialect-248"><span class="linenos">248</span></a><span class="sd"> ) SELECT c FROM y;</span>
+</span><span id="Dialect-249"><a href="#Dialect-249"><span class="linenos">249</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Dialect-250"><a href="#Dialect-250"><span class="linenos">250</span></a>
-</span><span id="Dialect-251"><a href="#Dialect-251"><span class="linenos">251</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
-</span><span id="Dialect-252"><a href="#Dialect-252"><span class="linenos">252</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
-</span><span id="Dialect-253"><a href="#Dialect-253"><span class="linenos">253</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
-</span><span id="Dialect-254"><a href="#Dialect-254"><span class="linenos">254</span></a>
-</span><span id="Dialect-255"><a href="#Dialect-255"><span class="linenos">255</span></a> <span class="c1"># A trie of the time_mapping keys</span>
-</span><span id="Dialect-256"><a href="#Dialect-256"><span class="linenos">256</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-257"><a href="#Dialect-257"><span class="linenos">257</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-258"><a href="#Dialect-258"><span class="linenos">258</span></a>
-</span><span id="Dialect-259"><a href="#Dialect-259"><span class="linenos">259</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-260"><a href="#Dialect-260"><span class="linenos">260</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Dialect-261"><a href="#Dialect-261"><span class="linenos">261</span></a>
-</span><span id="Dialect-262"><a href="#Dialect-262"><span class="linenos">262</span></a> <span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-251"><a href="#Dialect-251"><span class="linenos">251</span></a> <span class="c1"># --- Autofilled ---</span>
+</span><span id="Dialect-252"><a href="#Dialect-252"><span class="linenos">252</span></a>
+</span><span id="Dialect-253"><a href="#Dialect-253"><span class="linenos">253</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="n">Tokenizer</span>
+</span><span id="Dialect-254"><a href="#Dialect-254"><span class="linenos">254</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="n">Parser</span>
+</span><span id="Dialect-255"><a href="#Dialect-255"><span class="linenos">255</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="n">Generator</span>
+</span><span id="Dialect-256"><a href="#Dialect-256"><span class="linenos">256</span></a>
+</span><span id="Dialect-257"><a href="#Dialect-257"><span class="linenos">257</span></a> <span class="c1"># A trie of the time_mapping keys</span>
+</span><span id="Dialect-258"><a href="#Dialect-258"><span class="linenos">258</span></a> <span class="n">TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-259"><a href="#Dialect-259"><span class="linenos">259</span></a> <span class="n">FORMAT_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-260"><a href="#Dialect-260"><span class="linenos">260</span></a>
+</span><span id="Dialect-261"><a href="#Dialect-261"><span class="linenos">261</span></a> <span class="n">INVERSE_TIME_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-262"><a href="#Dialect-262"><span class="linenos">262</span></a> <span class="n">INVERSE_TIME_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Dialect-263"><a href="#Dialect-263"><span class="linenos">263</span></a>
-</span><span id="Dialect-264"><a href="#Dialect-264"><span class="linenos">264</span></a> <span class="c1"># Delimiters for string literals and identifiers</span>
-</span><span id="Dialect-265"><a href="#Dialect-265"><span class="linenos">265</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="Dialect-266"><a href="#Dialect-266"><span class="linenos">266</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="Dialect-267"><a href="#Dialect-267"><span class="linenos">267</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="Dialect-268"><a href="#Dialect-268"><span class="linenos">268</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
-</span><span id="Dialect-269"><a href="#Dialect-269"><span class="linenos">269</span></a>
-</span><span id="Dialect-270"><a href="#Dialect-270"><span class="linenos">270</span></a> <span class="c1"># Delimiters for bit, hex, byte and unicode literals</span>
-</span><span id="Dialect-271"><a href="#Dialect-271"><span class="linenos">271</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-272"><a href="#Dialect-272"><span class="linenos">272</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-273"><a href="#Dialect-273"><span class="linenos">273</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-274"><a href="#Dialect-274"><span class="linenos">274</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-275"><a href="#Dialect-275"><span class="linenos">275</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-276"><a href="#Dialect-276"><span class="linenos">276</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-277"><a href="#Dialect-277"><span class="linenos">277</span></a> <span class="n">UNICODE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-278"><a href="#Dialect-278"><span class="linenos">278</span></a> <span class="n">UNICODE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-279"><a href="#Dialect-279"><span class="linenos">279</span></a>
-</span><span id="Dialect-280"><a href="#Dialect-280"><span class="linenos">280</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-281"><a href="#Dialect-281"><span class="linenos">281</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
-</span><span id="Dialect-282"><a href="#Dialect-282"><span class="linenos">282</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-283"><a href="#Dialect-283"><span class="linenos">283</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
-</span><span id="Dialect-284"><a href="#Dialect-284"><span class="linenos">284</span></a>
-</span><span id="Dialect-285"><a href="#Dialect-285"><span class="linenos">285</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect-286"><a href="#Dialect-286"><span class="linenos">286</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
-</span><span id="Dialect-287"><a href="#Dialect-287"><span class="linenos">287</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
-</span><span id="Dialect-288"><a href="#Dialect-288"><span class="linenos">288</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
-</span><span id="Dialect-289"><a href="#Dialect-289"><span class="linenos">289</span></a>
-</span><span id="Dialect-290"><a href="#Dialect-290"><span class="linenos">290</span></a><span class="sd"> Example:</span>
-</span><span id="Dialect-291"><a href="#Dialect-291"><span class="linenos">291</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
-</span><span id="Dialect-292"><a href="#Dialect-292"><span class="linenos">292</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
-</span><span id="Dialect-293"><a href="#Dialect-293"><span class="linenos">293</span></a>
-</span><span id="Dialect-294"><a href="#Dialect-294"><span class="linenos">294</span></a><span class="sd"> Returns:</span>
-</span><span id="Dialect-295"><a href="#Dialect-295"><span class="linenos">295</span></a><span class="sd"> The corresponding Dialect instance.</span>
-</span><span id="Dialect-296"><a href="#Dialect-296"><span class="linenos">296</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-297"><a href="#Dialect-297"><span class="linenos">297</span></a>
-</span><span id="Dialect-298"><a href="#Dialect-298"><span class="linenos">298</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
-</span><span id="Dialect-299"><a href="#Dialect-299"><span class="linenos">299</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
-</span><span id="Dialect-300"><a href="#Dialect-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
-</span><span id="Dialect-301"><a href="#Dialect-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
-</span><span id="Dialect-302"><a href="#Dialect-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
-</span><span id="Dialect-303"><a href="#Dialect-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="Dialect-304"><a href="#Dialect-304"><span class="linenos">304</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Dialect-305"><a href="#Dialect-305"><span class="linenos">305</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Dialect-306"><a href="#Dialect-306"><span class="linenos">306</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
-</span><span id="Dialect-307"><a href="#Dialect-307"><span class="linenos">307</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
-</span><span id="Dialect-308"><a href="#Dialect-308"><span class="linenos">308</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="Dialect-309"><a href="#Dialect-309"><span class="linenos">309</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="Dialect-310"><a href="#Dialect-310"><span class="linenos">310</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
-</span><span id="Dialect-311"><a href="#Dialect-311"><span class="linenos">311</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
-</span><span id="Dialect-312"><a href="#Dialect-312"><span class="linenos">312</span></a> <span class="p">)</span>
-</span><span id="Dialect-313"><a href="#Dialect-313"><span class="linenos">313</span></a>
-</span><span id="Dialect-314"><a href="#Dialect-314"><span class="linenos">314</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
-</span><span id="Dialect-315"><a href="#Dialect-315"><span class="linenos">315</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="Dialect-316"><a href="#Dialect-316"><span class="linenos">316</span></a> <span class="kn">from</span> <span class="nn">difflib</span> <span class="kn">import</span> <span class="n">get_close_matches</span>
-</span><span id="Dialect-317"><a href="#Dialect-317"><span class="linenos">317</span></a>
-</span><span id="Dialect-318"><a href="#Dialect-318"><span class="linenos">318</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">get_close_matches</span><span class="p">(</span><span class="n">dialect_name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Dialect-319"><a href="#Dialect-319"><span class="linenos">319</span></a> <span class="k">if</span> <span class="n">similar</span><span class="p">:</span>
-</span><span id="Dialect-320"><a href="#Dialect-320"><span class="linenos">320</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; Did you mean </span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">?&quot;</span>
-</span><span id="Dialect-321"><a href="#Dialect-321"><span class="linenos">321</span></a>
-</span><span id="Dialect-322"><a href="#Dialect-322"><span class="linenos">322</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.</span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Dialect-264"><a href="#Dialect-264"><span class="linenos">264</span></a> <span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Dialect-265"><a href="#Dialect-265"><span class="linenos">265</span></a>
+</span><span id="Dialect-266"><a href="#Dialect-266"><span class="linenos">266</span></a> <span class="c1"># Delimiters for string literals and identifiers</span>
+</span><span id="Dialect-267"><a href="#Dialect-267"><span class="linenos">267</span></a> <span class="n">QUOTE_START</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Dialect-268"><a href="#Dialect-268"><span class="linenos">268</span></a> <span class="n">QUOTE_END</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="Dialect-269"><a href="#Dialect-269"><span class="linenos">269</span></a> <span class="n">IDENTIFIER_START</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
+</span><span id="Dialect-270"><a href="#Dialect-270"><span class="linenos">270</span></a> <span class="n">IDENTIFIER_END</span> <span class="o">=</span> <span class="s1">&#39;&quot;&#39;</span>
+</span><span id="Dialect-271"><a href="#Dialect-271"><span class="linenos">271</span></a>
+</span><span id="Dialect-272"><a href="#Dialect-272"><span class="linenos">272</span></a> <span class="c1"># Delimiters for bit, hex, byte and unicode literals</span>
+</span><span id="Dialect-273"><a href="#Dialect-273"><span class="linenos">273</span></a> <span class="n">BIT_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-274"><a href="#Dialect-274"><span class="linenos">274</span></a> <span class="n">BIT_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-275"><a href="#Dialect-275"><span class="linenos">275</span></a> <span class="n">HEX_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-276"><a href="#Dialect-276"><span class="linenos">276</span></a> <span class="n">HEX_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-277"><a href="#Dialect-277"><span class="linenos">277</span></a> <span class="n">BYTE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-278"><a href="#Dialect-278"><span class="linenos">278</span></a> <span class="n">BYTE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-279"><a href="#Dialect-279"><span class="linenos">279</span></a> <span class="n">UNICODE_START</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-280"><a href="#Dialect-280"><span class="linenos">280</span></a> <span class="n">UNICODE_END</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-281"><a href="#Dialect-281"><span class="linenos">281</span></a>
+</span><span id="Dialect-282"><a href="#Dialect-282"><span class="linenos">282</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-283"><a href="#Dialect-283"><span class="linenos">283</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
+</span><span id="Dialect-284"><a href="#Dialect-284"><span class="linenos">284</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-285"><a href="#Dialect-285"><span class="linenos">285</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
+</span><span id="Dialect-286"><a href="#Dialect-286"><span class="linenos">286</span></a>
+</span><span id="Dialect-287"><a href="#Dialect-287"><span class="linenos">287</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect-288"><a href="#Dialect-288"><span class="linenos">288</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
+</span><span id="Dialect-289"><a href="#Dialect-289"><span class="linenos">289</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
+</span><span id="Dialect-290"><a href="#Dialect-290"><span class="linenos">290</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
+</span><span id="Dialect-291"><a href="#Dialect-291"><span class="linenos">291</span></a>
+</span><span id="Dialect-292"><a href="#Dialect-292"><span class="linenos">292</span></a><span class="sd"> Example:</span>
+</span><span id="Dialect-293"><a href="#Dialect-293"><span class="linenos">293</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
+</span><span id="Dialect-294"><a href="#Dialect-294"><span class="linenos">294</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
+</span><span id="Dialect-295"><a href="#Dialect-295"><span class="linenos">295</span></a>
+</span><span id="Dialect-296"><a href="#Dialect-296"><span class="linenos">296</span></a><span class="sd"> Returns:</span>
+</span><span id="Dialect-297"><a href="#Dialect-297"><span class="linenos">297</span></a><span class="sd"> The corresponding Dialect instance.</span>
+</span><span id="Dialect-298"><a href="#Dialect-298"><span class="linenos">298</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-299"><a href="#Dialect-299"><span class="linenos">299</span></a>
+</span><span id="Dialect-300"><a href="#Dialect-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
+</span><span id="Dialect-301"><a href="#Dialect-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
+</span><span id="Dialect-302"><a href="#Dialect-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
+</span><span id="Dialect-303"><a href="#Dialect-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
+</span><span id="Dialect-304"><a href="#Dialect-304"><span class="linenos">304</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
+</span><span id="Dialect-305"><a href="#Dialect-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="Dialect-306"><a href="#Dialect-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Dialect-307"><a href="#Dialect-307"><span class="linenos">307</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Dialect-308"><a href="#Dialect-308"><span class="linenos">308</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
+</span><span id="Dialect-309"><a href="#Dialect-309"><span class="linenos">309</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
+</span><span id="Dialect-310"><a href="#Dialect-310"><span class="linenos">310</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="Dialect-311"><a href="#Dialect-311"><span class="linenos">311</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="Dialect-312"><a href="#Dialect-312"><span class="linenos">312</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
+</span><span id="Dialect-313"><a href="#Dialect-313"><span class="linenos">313</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
+</span><span id="Dialect-314"><a href="#Dialect-314"><span class="linenos">314</span></a> <span class="p">)</span>
+</span><span id="Dialect-315"><a href="#Dialect-315"><span class="linenos">315</span></a>
+</span><span id="Dialect-316"><a href="#Dialect-316"><span class="linenos">316</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
+</span><span id="Dialect-317"><a href="#Dialect-317"><span class="linenos">317</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="Dialect-318"><a href="#Dialect-318"><span class="linenos">318</span></a> <span class="kn">from</span> <span class="nn">difflib</span> <span class="kn">import</span> <span class="n">get_close_matches</span>
+</span><span id="Dialect-319"><a href="#Dialect-319"><span class="linenos">319</span></a>
+</span><span id="Dialect-320"><a href="#Dialect-320"><span class="linenos">320</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">get_close_matches</span><span class="p">(</span><span class="n">dialect_name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Dialect-321"><a href="#Dialect-321"><span class="linenos">321</span></a> <span class="k">if</span> <span class="n">similar</span><span class="p">:</span>
+</span><span id="Dialect-322"><a href="#Dialect-322"><span class="linenos">322</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; Did you mean </span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">?&quot;</span>
</span><span id="Dialect-323"><a href="#Dialect-323"><span class="linenos">323</span></a>
-</span><span id="Dialect-324"><a href="#Dialect-324"><span class="linenos">324</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Dialect-324"><a href="#Dialect-324"><span class="linenos">324</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.</span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Dialect-325"><a href="#Dialect-325"><span class="linenos">325</span></a>
-</span><span id="Dialect-326"><a href="#Dialect-326"><span class="linenos">326</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
+</span><span id="Dialect-326"><a href="#Dialect-326"><span class="linenos">326</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Dialect-327"><a href="#Dialect-327"><span class="linenos">327</span></a>
-</span><span id="Dialect-328"><a href="#Dialect-328"><span class="linenos">328</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-329"><a href="#Dialect-329"><span class="linenos">329</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="Dialect-330"><a href="#Dialect-330"><span class="linenos">330</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Dialect-331"><a href="#Dialect-331"><span class="linenos">331</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="Dialect-332"><a href="#Dialect-332"><span class="linenos">332</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts a time format in this dialect to its equivalent Python `strftime` format.&quot;&quot;&quot;</span>
-</span><span id="Dialect-333"><a href="#Dialect-333"><span class="linenos">333</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Dialect-334"><a href="#Dialect-334"><span class="linenos">334</span></a> <span class="k">return</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><span id="Dialect-335"><a href="#Dialect-335"><span class="linenos">335</span></a> <span class="c1"># the time formats are quoted</span>
-</span><span id="Dialect-336"><a href="#Dialect-336"><span class="linenos">336</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
-</span><span id="Dialect-337"><a href="#Dialect-337"><span class="linenos">337</span></a> <span class="p">)</span>
-</span><span id="Dialect-338"><a href="#Dialect-338"><span class="linenos">338</span></a>
-</span><span id="Dialect-339"><a href="#Dialect-339"><span class="linenos">339</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Dialect-340"><a href="#Dialect-340"><span class="linenos">340</span></a> <span class="k">return</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
-</span><span id="Dialect-341"><a href="#Dialect-341"><span class="linenos">341</span></a>
-</span><span id="Dialect-342"><a href="#Dialect-342"><span class="linenos">342</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-328"><a href="#Dialect-328"><span class="linenos">328</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
+</span><span id="Dialect-329"><a href="#Dialect-329"><span class="linenos">329</span></a>
+</span><span id="Dialect-330"><a href="#Dialect-330"><span class="linenos">330</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-331"><a href="#Dialect-331"><span class="linenos">331</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="Dialect-332"><a href="#Dialect-332"><span class="linenos">332</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Dialect-333"><a href="#Dialect-333"><span class="linenos">333</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="Dialect-334"><a href="#Dialect-334"><span class="linenos">334</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts a time format in this dialect to its equivalent Python `strftime` format.&quot;&quot;&quot;</span>
+</span><span id="Dialect-335"><a href="#Dialect-335"><span class="linenos">335</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Dialect-336"><a href="#Dialect-336"><span class="linenos">336</span></a> <span class="k">return</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><span id="Dialect-337"><a href="#Dialect-337"><span class="linenos">337</span></a> <span class="c1"># the time formats are quoted</span>
+</span><span id="Dialect-338"><a href="#Dialect-338"><span class="linenos">338</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
+</span><span id="Dialect-339"><a href="#Dialect-339"><span class="linenos">339</span></a> <span class="p">)</span>
+</span><span id="Dialect-340"><a href="#Dialect-340"><span class="linenos">340</span></a>
+</span><span id="Dialect-341"><a href="#Dialect-341"><span class="linenos">341</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Dialect-342"><a href="#Dialect-342"><span class="linenos">342</span></a> <span class="k">return</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
</span><span id="Dialect-343"><a href="#Dialect-343"><span class="linenos">343</span></a>
-</span><span id="Dialect-344"><a href="#Dialect-344"><span class="linenos">344</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Dialect-345"><a href="#Dialect-345"><span class="linenos">345</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
-</span><span id="Dialect-346"><a href="#Dialect-346"><span class="linenos">346</span></a>
-</span><span id="Dialect-347"><a href="#Dialect-347"><span class="linenos">347</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Dialect-348"><a href="#Dialect-348"><span class="linenos">348</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
-</span><span id="Dialect-349"><a href="#Dialect-349"><span class="linenos">349</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Dialect-350"><a href="#Dialect-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Dialect-351"><a href="#Dialect-351"><span class="linenos">351</span></a>
-</span><span id="Dialect-352"><a href="#Dialect-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect-353"><a href="#Dialect-353"><span class="linenos">353</span></a> <span class="c1"># Does not currently take dialect state into account</span>
-</span><span id="Dialect-354"><a href="#Dialect-354"><span class="linenos">354</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
-</span><span id="Dialect-355"><a href="#Dialect-355"><span class="linenos">355</span></a>
-</span><span id="Dialect-356"><a href="#Dialect-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="Dialect-357"><a href="#Dialect-357"><span class="linenos">357</span></a> <span class="c1"># Does not currently take dialect state into account</span>
-</span><span id="Dialect-358"><a href="#Dialect-358"><span class="linenos">358</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
-</span><span id="Dialect-359"><a href="#Dialect-359"><span class="linenos">359</span></a>
-</span><span id="Dialect-360"><a href="#Dialect-360"><span class="linenos">360</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect-361"><a href="#Dialect-361"><span class="linenos">361</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-362"><a href="#Dialect-362"><span class="linenos">362</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
-</span><span id="Dialect-363"><a href="#Dialect-363"><span class="linenos">363</span></a>
-</span><span id="Dialect-364"><a href="#Dialect-364"><span class="linenos">364</span></a><span class="sd"> For example, an identifier like `FoO` would be resolved as `foo` in Postgres, because it</span>
-</span><span id="Dialect-365"><a href="#Dialect-365"><span class="linenos">365</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
-</span><span id="Dialect-366"><a href="#Dialect-366"><span class="linenos">366</span></a><span class="sd"> it would resolve it as `FOO`. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
-</span><span id="Dialect-367"><a href="#Dialect-367"><span class="linenos">367</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
-</span><span id="Dialect-368"><a href="#Dialect-368"><span class="linenos">368</span></a>
-</span><span id="Dialect-369"><a href="#Dialect-369"><span class="linenos">369</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
-</span><span id="Dialect-370"><a href="#Dialect-370"><span class="linenos">370</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
-</span><span id="Dialect-371"><a href="#Dialect-371"><span class="linenos">371</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
-</span><span id="Dialect-372"><a href="#Dialect-372"><span class="linenos">372</span></a>
-</span><span id="Dialect-373"><a href="#Dialect-373"><span class="linenos">373</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
-</span><span id="Dialect-374"><a href="#Dialect-374"><span class="linenos">374</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
-</span><span id="Dialect-375"><a href="#Dialect-375"><span class="linenos">375</span></a>
-</span><span id="Dialect-376"><a href="#Dialect-376"><span class="linenos">376</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
-</span><span id="Dialect-377"><a href="#Dialect-377"><span class="linenos">377</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
-</span><span id="Dialect-378"><a href="#Dialect-378"><span class="linenos">378</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-379"><a href="#Dialect-379"><span class="linenos">379</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Dialect-380"><a href="#Dialect-380"><span class="linenos">380</span></a> <span class="nb">isinstance</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">Identifier</span><span class="p">)</span>
-</span><span id="Dialect-381"><a href="#Dialect-381"><span class="linenos">381</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
-</span><span id="Dialect-382"><a href="#Dialect-382"><span class="linenos">382</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Dialect-383"><a href="#Dialect-383"><span class="linenos">383</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Dialect-384"><a href="#Dialect-384"><span class="linenos">384</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
-</span><span id="Dialect-385"><a href="#Dialect-385"><span class="linenos">385</span></a> <span class="p">)</span>
-</span><span id="Dialect-386"><a href="#Dialect-386"><span class="linenos">386</span></a> <span class="p">):</span>
-</span><span id="Dialect-387"><a href="#Dialect-387"><span class="linenos">387</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect-388"><a href="#Dialect-388"><span class="linenos">388</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="Dialect-389"><a href="#Dialect-389"><span class="linenos">389</span></a> <span class="p">(</span>
-</span><span id="Dialect-390"><a href="#Dialect-390"><span class="linenos">390</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Dialect-391"><a href="#Dialect-391"><span class="linenos">391</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
-</span><span id="Dialect-392"><a href="#Dialect-392"><span class="linenos">392</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Dialect-393"><a href="#Dialect-393"><span class="linenos">393</span></a> <span class="p">),</span>
-</span><span id="Dialect-394"><a href="#Dialect-394"><span class="linenos">394</span></a> <span class="p">)</span>
-</span><span id="Dialect-395"><a href="#Dialect-395"><span class="linenos">395</span></a>
-</span><span id="Dialect-396"><a href="#Dialect-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-344"><a href="#Dialect-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-345"><a href="#Dialect-345"><span class="linenos">345</span></a>
+</span><span id="Dialect-346"><a href="#Dialect-346"><span class="linenos">346</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Dialect-347"><a href="#Dialect-347"><span class="linenos">347</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
+</span><span id="Dialect-348"><a href="#Dialect-348"><span class="linenos">348</span></a>
+</span><span id="Dialect-349"><a href="#Dialect-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Dialect-350"><a href="#Dialect-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
+</span><span id="Dialect-351"><a href="#Dialect-351"><span class="linenos">351</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Dialect-352"><a href="#Dialect-352"><span class="linenos">352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Dialect-353"><a href="#Dialect-353"><span class="linenos">353</span></a>
+</span><span id="Dialect-354"><a href="#Dialect-354"><span class="linenos">354</span></a> <span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect-355"><a href="#Dialect-355"><span class="linenos">355</span></a> <span class="c1"># Does not currently take dialect state into account</span>
+</span><span id="Dialect-356"><a href="#Dialect-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">==</span> <span class="n">other</span>
+</span><span id="Dialect-357"><a href="#Dialect-357"><span class="linenos">357</span></a>
+</span><span id="Dialect-358"><a href="#Dialect-358"><span class="linenos">358</span></a> <span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="Dialect-359"><a href="#Dialect-359"><span class="linenos">359</span></a> <span class="c1"># Does not currently take dialect state into account</span>
+</span><span id="Dialect-360"><a href="#Dialect-360"><span class="linenos">360</span></a> <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="Dialect-361"><a href="#Dialect-361"><span class="linenos">361</span></a>
+</span><span id="Dialect-362"><a href="#Dialect-362"><span class="linenos">362</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect-363"><a href="#Dialect-363"><span class="linenos">363</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-364"><a href="#Dialect-364"><span class="linenos">364</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
+</span><span id="Dialect-365"><a href="#Dialect-365"><span class="linenos">365</span></a>
+</span><span id="Dialect-366"><a href="#Dialect-366"><span class="linenos">366</span></a><span class="sd"> For example, an identifier like `FoO` would be resolved as `foo` in Postgres, because it</span>
+</span><span id="Dialect-367"><a href="#Dialect-367"><span class="linenos">367</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
+</span><span id="Dialect-368"><a href="#Dialect-368"><span class="linenos">368</span></a><span class="sd"> it would resolve it as `FOO`. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
+</span><span id="Dialect-369"><a href="#Dialect-369"><span class="linenos">369</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
+</span><span id="Dialect-370"><a href="#Dialect-370"><span class="linenos">370</span></a>
+</span><span id="Dialect-371"><a href="#Dialect-371"><span class="linenos">371</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
+</span><span id="Dialect-372"><a href="#Dialect-372"><span class="linenos">372</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
+</span><span id="Dialect-373"><a href="#Dialect-373"><span class="linenos">373</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
+</span><span id="Dialect-374"><a href="#Dialect-374"><span class="linenos">374</span></a>
+</span><span id="Dialect-375"><a href="#Dialect-375"><span class="linenos">375</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
+</span><span id="Dialect-376"><a href="#Dialect-376"><span class="linenos">376</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
+</span><span id="Dialect-377"><a href="#Dialect-377"><span class="linenos">377</span></a>
+</span><span id="Dialect-378"><a href="#Dialect-378"><span class="linenos">378</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
+</span><span id="Dialect-379"><a href="#Dialect-379"><span class="linenos">379</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
+</span><span id="Dialect-380"><a href="#Dialect-380"><span class="linenos">380</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-381"><a href="#Dialect-381"><span class="linenos">381</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Dialect-382"><a href="#Dialect-382"><span class="linenos">382</span></a> <span class="nb">isinstance</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">Identifier</span><span class="p">)</span>
+</span><span id="Dialect-383"><a href="#Dialect-383"><span class="linenos">383</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
+</span><span id="Dialect-384"><a href="#Dialect-384"><span class="linenos">384</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Dialect-385"><a href="#Dialect-385"><span class="linenos">385</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Dialect-386"><a href="#Dialect-386"><span class="linenos">386</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
+</span><span id="Dialect-387"><a href="#Dialect-387"><span class="linenos">387</span></a> <span class="p">)</span>
+</span><span id="Dialect-388"><a href="#Dialect-388"><span class="linenos">388</span></a> <span class="p">):</span>
+</span><span id="Dialect-389"><a href="#Dialect-389"><span class="linenos">389</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect-390"><a href="#Dialect-390"><span class="linenos">390</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="Dialect-391"><a href="#Dialect-391"><span class="linenos">391</span></a> <span class="p">(</span>
+</span><span id="Dialect-392"><a href="#Dialect-392"><span class="linenos">392</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Dialect-393"><a href="#Dialect-393"><span class="linenos">393</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
+</span><span id="Dialect-394"><a href="#Dialect-394"><span class="linenos">394</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Dialect-395"><a href="#Dialect-395"><span class="linenos">395</span></a> <span class="p">),</span>
+</span><span id="Dialect-396"><a href="#Dialect-396"><span class="linenos">396</span></a> <span class="p">)</span>
</span><span id="Dialect-397"><a href="#Dialect-397"><span class="linenos">397</span></a>
-</span><span id="Dialect-398"><a href="#Dialect-398"><span class="linenos">398</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect-399"><a href="#Dialect-399"><span class="linenos">399</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
-</span><span id="Dialect-400"><a href="#Dialect-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
-</span><span id="Dialect-401"><a href="#Dialect-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Dialect-402"><a href="#Dialect-402"><span class="linenos">402</span></a>
-</span><span id="Dialect-403"><a href="#Dialect-403"><span class="linenos">403</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Dialect-404"><a href="#Dialect-404"><span class="linenos">404</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
-</span><span id="Dialect-405"><a href="#Dialect-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
-</span><span id="Dialect-406"><a href="#Dialect-406"><span class="linenos">406</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
-</span><span id="Dialect-407"><a href="#Dialect-407"><span class="linenos">407</span></a> <span class="p">)</span>
-</span><span id="Dialect-408"><a href="#Dialect-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="Dialect-409"><a href="#Dialect-409"><span class="linenos">409</span></a>
-</span><span id="Dialect-410"><a href="#Dialect-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect-411"><a href="#Dialect-411"><span class="linenos">411</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Dialect-412"><a href="#Dialect-412"><span class="linenos">412</span></a>
-</span><span id="Dialect-413"><a href="#Dialect-413"><span class="linenos">413</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect-414"><a href="#Dialect-414"><span class="linenos">414</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Dialect-415"><a href="#Dialect-415"><span class="linenos">415</span></a><span class="sd"> identify:</span>
-</span><span id="Dialect-416"><a href="#Dialect-416"><span class="linenos">416</span></a><span class="sd"> `&quot;always&quot;` or `True`: Always returns `True`.</span>
-</span><span id="Dialect-417"><a href="#Dialect-417"><span class="linenos">417</span></a><span class="sd"> `&quot;safe&quot;`: Only returns `True` if the identifier is case-insensitive.</span>
-</span><span id="Dialect-418"><a href="#Dialect-418"><span class="linenos">418</span></a>
-</span><span id="Dialect-419"><a href="#Dialect-419"><span class="linenos">419</span></a><span class="sd"> Returns:</span>
-</span><span id="Dialect-420"><a href="#Dialect-420"><span class="linenos">420</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Dialect-421"><a href="#Dialect-421"><span class="linenos">421</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-422"><a href="#Dialect-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Dialect-423"><a href="#Dialect-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Dialect-424"><a href="#Dialect-424"><span class="linenos">424</span></a>
-</span><span id="Dialect-425"><a href="#Dialect-425"><span class="linenos">425</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Dialect-426"><a href="#Dialect-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Dialect-427"><a href="#Dialect-427"><span class="linenos">427</span></a>
-</span><span id="Dialect-428"><a href="#Dialect-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Dialect-398"><a href="#Dialect-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-399"><a href="#Dialect-399"><span class="linenos">399</span></a>
+</span><span id="Dialect-400"><a href="#Dialect-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect-401"><a href="#Dialect-401"><span class="linenos">401</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
+</span><span id="Dialect-402"><a href="#Dialect-402"><span class="linenos">402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
+</span><span id="Dialect-403"><a href="#Dialect-403"><span class="linenos">403</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Dialect-404"><a href="#Dialect-404"><span class="linenos">404</span></a>
+</span><span id="Dialect-405"><a href="#Dialect-405"><span class="linenos">405</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Dialect-406"><a href="#Dialect-406"><span class="linenos">406</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
+</span><span id="Dialect-407"><a href="#Dialect-407"><span class="linenos">407</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
+</span><span id="Dialect-408"><a href="#Dialect-408"><span class="linenos">408</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
+</span><span id="Dialect-409"><a href="#Dialect-409"><span class="linenos">409</span></a> <span class="p">)</span>
+</span><span id="Dialect-410"><a href="#Dialect-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Dialect-411"><a href="#Dialect-411"><span class="linenos">411</span></a>
+</span><span id="Dialect-412"><a href="#Dialect-412"><span class="linenos">412</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect-413"><a href="#Dialect-413"><span class="linenos">413</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Dialect-414"><a href="#Dialect-414"><span class="linenos">414</span></a>
+</span><span id="Dialect-415"><a href="#Dialect-415"><span class="linenos">415</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect-416"><a href="#Dialect-416"><span class="linenos">416</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Dialect-417"><a href="#Dialect-417"><span class="linenos">417</span></a><span class="sd"> identify:</span>
+</span><span id="Dialect-418"><a href="#Dialect-418"><span class="linenos">418</span></a><span class="sd"> `&quot;always&quot;` or `True`: Always returns `True`.</span>
+</span><span id="Dialect-419"><a href="#Dialect-419"><span class="linenos">419</span></a><span class="sd"> `&quot;safe&quot;`: Only returns `True` if the identifier is case-insensitive.</span>
+</span><span id="Dialect-420"><a href="#Dialect-420"><span class="linenos">420</span></a>
+</span><span id="Dialect-421"><a href="#Dialect-421"><span class="linenos">421</span></a><span class="sd"> Returns:</span>
+</span><span id="Dialect-422"><a href="#Dialect-422"><span class="linenos">422</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Dialect-423"><a href="#Dialect-423"><span class="linenos">423</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-424"><a href="#Dialect-424"><span class="linenos">424</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Dialect-425"><a href="#Dialect-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Dialect-426"><a href="#Dialect-426"><span class="linenos">426</span></a>
+</span><span id="Dialect-427"><a href="#Dialect-427"><span class="linenos">427</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Dialect-428"><a href="#Dialect-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
</span><span id="Dialect-429"><a href="#Dialect-429"><span class="linenos">429</span></a>
-</span><span id="Dialect-430"><a href="#Dialect-430"><span class="linenos">430</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect-431"><a href="#Dialect-431"><span class="linenos">431</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect-432"><a href="#Dialect-432"><span class="linenos">432</span></a><span class="sd"> Adds quotes to a given identifier.</span>
-</span><span id="Dialect-433"><a href="#Dialect-433"><span class="linenos">433</span></a>
-</span><span id="Dialect-434"><a href="#Dialect-434"><span class="linenos">434</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect-435"><a href="#Dialect-435"><span class="linenos">435</span></a><span class="sd"> expression: The expression of interest. If it&#39;s not an `Identifier`, this method is a no-op.</span>
-</span><span id="Dialect-436"><a href="#Dialect-436"><span class="linenos">436</span></a><span class="sd"> identify: If set to `False`, the quotes will only be added if the identifier is deemed</span>
-</span><span id="Dialect-437"><a href="#Dialect-437"><span class="linenos">437</span></a><span class="sd"> &quot;unsafe&quot;, with respect to its characters and this dialect&#39;s normalization strategy.</span>
-</span><span id="Dialect-438"><a href="#Dialect-438"><span class="linenos">438</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect-439"><a href="#Dialect-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Identifier</span><span class="p">):</span>
-</span><span id="Dialect-440"><a href="#Dialect-440"><span class="linenos">440</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Dialect-441"><a href="#Dialect-441"><span class="linenos">441</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect-442"><a href="#Dialect-442"><span class="linenos">442</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
-</span><span id="Dialect-443"><a href="#Dialect-443"><span class="linenos">443</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Dialect-444"><a href="#Dialect-444"><span class="linenos">444</span></a> <span class="p">)</span>
-</span><span id="Dialect-445"><a href="#Dialect-445"><span class="linenos">445</span></a>
-</span><span id="Dialect-446"><a href="#Dialect-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-430"><a href="#Dialect-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Dialect-431"><a href="#Dialect-431"><span class="linenos">431</span></a>
+</span><span id="Dialect-432"><a href="#Dialect-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect-433"><a href="#Dialect-433"><span class="linenos">433</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect-434"><a href="#Dialect-434"><span class="linenos">434</span></a><span class="sd"> Adds quotes to a given identifier.</span>
+</span><span id="Dialect-435"><a href="#Dialect-435"><span class="linenos">435</span></a>
+</span><span id="Dialect-436"><a href="#Dialect-436"><span class="linenos">436</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect-437"><a href="#Dialect-437"><span class="linenos">437</span></a><span class="sd"> expression: The expression of interest. If it&#39;s not an `Identifier`, this method is a no-op.</span>
+</span><span id="Dialect-438"><a href="#Dialect-438"><span class="linenos">438</span></a><span class="sd"> identify: If set to `False`, the quotes will only be added if the identifier is deemed</span>
+</span><span id="Dialect-439"><a href="#Dialect-439"><span class="linenos">439</span></a><span class="sd"> &quot;unsafe&quot;, with respect to its characters and this dialect&#39;s normalization strategy.</span>
+</span><span id="Dialect-440"><a href="#Dialect-440"><span class="linenos">440</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect-441"><a href="#Dialect-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Dialect-442"><a href="#Dialect-442"><span class="linenos">442</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Dialect-443"><a href="#Dialect-443"><span class="linenos">443</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect-444"><a href="#Dialect-444"><span class="linenos">444</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
+</span><span id="Dialect-445"><a href="#Dialect-445"><span class="linenos">445</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Dialect-446"><a href="#Dialect-446"><span class="linenos">446</span></a> <span class="p">)</span>
</span><span id="Dialect-447"><a href="#Dialect-447"><span class="linenos">447</span></a>
-</span><span id="Dialect-448"><a href="#Dialect-448"><span class="linenos">448</span></a> <span class="k">def</span> <span class="nf">to_json_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Dialect-449"><a href="#Dialect-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Dialect-450"><a href="#Dialect-450"><span class="linenos">450</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Dialect-451"><a href="#Dialect-451"><span class="linenos">451</span></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="Dialect-452"><a href="#Dialect-452"><span class="linenos">452</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">path_text</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="Dialect-453"><a href="#Dialect-453"><span class="linenos">453</span></a>
-</span><span id="Dialect-454"><a href="#Dialect-454"><span class="linenos">454</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Dialect-455"><a href="#Dialect-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="n">parse_json_path</span><span class="p">(</span><span class="n">path_text</span><span class="p">)</span>
-</span><span id="Dialect-456"><a href="#Dialect-456"><span class="linenos">456</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="Dialect-457"><a href="#Dialect-457"><span class="linenos">457</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid JSON path syntax. </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Dialect-458"><a href="#Dialect-458"><span class="linenos">458</span></a>
-</span><span id="Dialect-459"><a href="#Dialect-459"><span class="linenos">459</span></a> <span class="k">return</span> <span class="n">path</span>
+</span><span id="Dialect-448"><a href="#Dialect-448"><span class="linenos">448</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Dialect-449"><a href="#Dialect-449"><span class="linenos">449</span></a>
+</span><span id="Dialect-450"><a href="#Dialect-450"><span class="linenos">450</span></a> <span class="k">def</span> <span class="nf">to_json_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Dialect-451"><a href="#Dialect-451"><span class="linenos">451</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Dialect-452"><a href="#Dialect-452"><span class="linenos">452</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Dialect-453"><a href="#Dialect-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="Dialect-454"><a href="#Dialect-454"><span class="linenos">454</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">path_text</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="Dialect-455"><a href="#Dialect-455"><span class="linenos">455</span></a>
+</span><span id="Dialect-456"><a href="#Dialect-456"><span class="linenos">456</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Dialect-457"><a href="#Dialect-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="n">parse_json_path</span><span class="p">(</span><span class="n">path_text</span><span class="p">)</span>
+</span><span id="Dialect-458"><a href="#Dialect-458"><span class="linenos">458</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="Dialect-459"><a href="#Dialect-459"><span class="linenos">459</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid JSON path syntax. </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Dialect-460"><a href="#Dialect-460"><span class="linenos">460</span></a>
-</span><span id="Dialect-461"><a href="#Dialect-461"><span class="linenos">461</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Dialect-462"><a href="#Dialect-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Dialect-463"><a href="#Dialect-463"><span class="linenos">463</span></a>
-</span><span id="Dialect-464"><a href="#Dialect-464"><span class="linenos">464</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Dialect-465"><a href="#Dialect-465"><span class="linenos">465</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Dialect-466"><a href="#Dialect-466"><span class="linenos">466</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Dialect-467"><a href="#Dialect-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Dialect-468"><a href="#Dialect-468"><span class="linenos">468</span></a>
-</span><span id="Dialect-469"><a href="#Dialect-469"><span class="linenos">469</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Dialect-470"><a href="#Dialect-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
-</span><span id="Dialect-471"><a href="#Dialect-471"><span class="linenos">471</span></a>
-</span><span id="Dialect-472"><a href="#Dialect-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Dialect-473"><a href="#Dialect-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Dialect-474"><a href="#Dialect-474"><span class="linenos">474</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Dialect-475"><a href="#Dialect-475"><span class="linenos">475</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="Dialect-476"><a href="#Dialect-476"><span class="linenos">476</span></a> <span class="p">]</span>
-</span><span id="Dialect-477"><a href="#Dialect-477"><span class="linenos">477</span></a>
-</span><span id="Dialect-478"><a href="#Dialect-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Dialect-479"><a href="#Dialect-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="Dialect-480"><a href="#Dialect-480"><span class="linenos">480</span></a>
-</span><span id="Dialect-481"><a href="#Dialect-481"><span class="linenos">481</span></a> <span class="nd">@property</span>
-</span><span id="Dialect-482"><a href="#Dialect-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
-</span><span id="Dialect-483"><a href="#Dialect-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
-</span><span id="Dialect-484"><a href="#Dialect-484"><span class="linenos">484</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Dialect-485"><a href="#Dialect-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span>
-</span><span id="Dialect-486"><a href="#Dialect-486"><span class="linenos">486</span></a>
-</span><span id="Dialect-487"><a href="#Dialect-487"><span class="linenos">487</span></a> <span class="k">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
-</span><span id="Dialect-488"><a href="#Dialect-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Dialect-489"><a href="#Dialect-489"><span class="linenos">489</span></a>
-</span><span id="Dialect-490"><a href="#Dialect-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
-</span><span id="Dialect-491"><a href="#Dialect-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Dialect-461"><a href="#Dialect-461"><span class="linenos">461</span></a> <span class="k">return</span> <span class="n">path</span>
+</span><span id="Dialect-462"><a href="#Dialect-462"><span class="linenos">462</span></a>
+</span><span id="Dialect-463"><a href="#Dialect-463"><span class="linenos">463</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Dialect-464"><a href="#Dialect-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Dialect-465"><a href="#Dialect-465"><span class="linenos">465</span></a>
+</span><span id="Dialect-466"><a href="#Dialect-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Dialect-467"><a href="#Dialect-467"><span class="linenos">467</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Dialect-468"><a href="#Dialect-468"><span class="linenos">468</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Dialect-469"><a href="#Dialect-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Dialect-470"><a href="#Dialect-470"><span class="linenos">470</span></a>
+</span><span id="Dialect-471"><a href="#Dialect-471"><span class="linenos">471</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Dialect-472"><a href="#Dialect-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
+</span><span id="Dialect-473"><a href="#Dialect-473"><span class="linenos">473</span></a>
+</span><span id="Dialect-474"><a href="#Dialect-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Dialect-475"><a href="#Dialect-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Dialect-476"><a href="#Dialect-476"><span class="linenos">476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Dialect-477"><a href="#Dialect-477"><span class="linenos">477</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+</span><span id="Dialect-478"><a href="#Dialect-478"><span class="linenos">478</span></a> <span class="p">]</span>
+</span><span id="Dialect-479"><a href="#Dialect-479"><span class="linenos">479</span></a>
+</span><span id="Dialect-480"><a href="#Dialect-480"><span class="linenos">480</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Dialect-481"><a href="#Dialect-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+</span><span id="Dialect-482"><a href="#Dialect-482"><span class="linenos">482</span></a>
+</span><span id="Dialect-483"><a href="#Dialect-483"><span class="linenos">483</span></a> <span class="nd">@property</span>
+</span><span id="Dialect-484"><a href="#Dialect-484"><span class="linenos">484</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
+</span><span id="Dialect-485"><a href="#Dialect-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
+</span><span id="Dialect-486"><a href="#Dialect-486"><span class="linenos">486</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Dialect-487"><a href="#Dialect-487"><span class="linenos">487</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span>
+</span><span id="Dialect-488"><a href="#Dialect-488"><span class="linenos">488</span></a>
+</span><span id="Dialect-489"><a href="#Dialect-489"><span class="linenos">489</span></a> <span class="k">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
+</span><span id="Dialect-490"><a href="#Dialect-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Dialect-491"><a href="#Dialect-491"><span class="linenos">491</span></a>
+</span><span id="Dialect-492"><a href="#Dialect-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
+</span><span id="Dialect-493"><a href="#Dialect-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -2497,13 +2515,13 @@
</div>
<a class="headerlink" href="#Dialect.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.__init__-344"><a href="#Dialect.__init__-344"><span class="linenos">344</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Dialect.__init__-345"><a href="#Dialect.__init__-345"><span class="linenos">345</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
-</span><span id="Dialect.__init__-346"><a href="#Dialect.__init__-346"><span class="linenos">346</span></a>
-</span><span id="Dialect.__init__-347"><a href="#Dialect.__init__-347"><span class="linenos">347</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Dialect.__init__-348"><a href="#Dialect.__init__-348"><span class="linenos">348</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
-</span><span id="Dialect.__init__-349"><a href="#Dialect.__init__-349"><span class="linenos">349</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Dialect.__init__-350"><a href="#Dialect.__init__-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.__init__-346"><a href="#Dialect.__init__-346"><span class="linenos">346</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Dialect.__init__-347"><a href="#Dialect.__init__-347"><span class="linenos">347</span></a> <span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;normalization_strategy&quot;</span><span class="p">)</span>
+</span><span id="Dialect.__init__-348"><a href="#Dialect.__init__-348"><span class="linenos">348</span></a>
+</span><span id="Dialect.__init__-349"><a href="#Dialect.__init__-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Dialect.__init__-350"><a href="#Dialect.__init__-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NORMALIZATION_STRATEGY</span>
+</span><span id="Dialect.__init__-351"><a href="#Dialect.__init__-351"><span class="linenos">351</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Dialect.__init__-352"><a href="#Dialect.__init__-352"><span class="linenos">352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="p">(</span><span class="n">normalization_strategy</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span></pre></div>
@@ -3125,53 +3143,53 @@ WITH y(c) AS (
</div>
<a class="headerlink" href="#Dialect.get_or_raise"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.get_or_raise-280"><a href="#Dialect.get_or_raise-280"><span class="linenos">280</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.get_or_raise-281"><a href="#Dialect.get_or_raise-281"><span class="linenos">281</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
-</span><span id="Dialect.get_or_raise-282"><a href="#Dialect.get_or_raise-282"><span class="linenos">282</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect.get_or_raise-283"><a href="#Dialect.get_or_raise-283"><span class="linenos">283</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
-</span><span id="Dialect.get_or_raise-284"><a href="#Dialect.get_or_raise-284"><span class="linenos">284</span></a>
-</span><span id="Dialect.get_or_raise-285"><a href="#Dialect.get_or_raise-285"><span class="linenos">285</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect.get_or_raise-286"><a href="#Dialect.get_or_raise-286"><span class="linenos">286</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
-</span><span id="Dialect.get_or_raise-287"><a href="#Dialect.get_or_raise-287"><span class="linenos">287</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
-</span><span id="Dialect.get_or_raise-288"><a href="#Dialect.get_or_raise-288"><span class="linenos">288</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
-</span><span id="Dialect.get_or_raise-289"><a href="#Dialect.get_or_raise-289"><span class="linenos">289</span></a>
-</span><span id="Dialect.get_or_raise-290"><a href="#Dialect.get_or_raise-290"><span class="linenos">290</span></a><span class="sd"> Example:</span>
-</span><span id="Dialect.get_or_raise-291"><a href="#Dialect.get_or_raise-291"><span class="linenos">291</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
-</span><span id="Dialect.get_or_raise-292"><a href="#Dialect.get_or_raise-292"><span class="linenos">292</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
-</span><span id="Dialect.get_or_raise-293"><a href="#Dialect.get_or_raise-293"><span class="linenos">293</span></a>
-</span><span id="Dialect.get_or_raise-294"><a href="#Dialect.get_or_raise-294"><span class="linenos">294</span></a><span class="sd"> Returns:</span>
-</span><span id="Dialect.get_or_raise-295"><a href="#Dialect.get_or_raise-295"><span class="linenos">295</span></a><span class="sd"> The corresponding Dialect instance.</span>
-</span><span id="Dialect.get_or_raise-296"><a href="#Dialect.get_or_raise-296"><span class="linenos">296</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect.get_or_raise-297"><a href="#Dialect.get_or_raise-297"><span class="linenos">297</span></a>
-</span><span id="Dialect.get_or_raise-298"><a href="#Dialect.get_or_raise-298"><span class="linenos">298</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
-</span><span id="Dialect.get_or_raise-299"><a href="#Dialect.get_or_raise-299"><span class="linenos">299</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
-</span><span id="Dialect.get_or_raise-300"><a href="#Dialect.get_or_raise-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
-</span><span id="Dialect.get_or_raise-301"><a href="#Dialect.get_or_raise-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
-</span><span id="Dialect.get_or_raise-302"><a href="#Dialect.get_or_raise-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
-</span><span id="Dialect.get_or_raise-303"><a href="#Dialect.get_or_raise-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="Dialect.get_or_raise-304"><a href="#Dialect.get_or_raise-304"><span class="linenos">304</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Dialect.get_or_raise-305"><a href="#Dialect.get_or_raise-305"><span class="linenos">305</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Dialect.get_or_raise-306"><a href="#Dialect.get_or_raise-306"><span class="linenos">306</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
-</span><span id="Dialect.get_or_raise-307"><a href="#Dialect.get_or_raise-307"><span class="linenos">307</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
-</span><span id="Dialect.get_or_raise-308"><a href="#Dialect.get_or_raise-308"><span class="linenos">308</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="Dialect.get_or_raise-309"><a href="#Dialect.get_or_raise-309"><span class="linenos">309</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="Dialect.get_or_raise-310"><a href="#Dialect.get_or_raise-310"><span class="linenos">310</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
-</span><span id="Dialect.get_or_raise-311"><a href="#Dialect.get_or_raise-311"><span class="linenos">311</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
-</span><span id="Dialect.get_or_raise-312"><a href="#Dialect.get_or_raise-312"><span class="linenos">312</span></a> <span class="p">)</span>
-</span><span id="Dialect.get_or_raise-313"><a href="#Dialect.get_or_raise-313"><span class="linenos">313</span></a>
-</span><span id="Dialect.get_or_raise-314"><a href="#Dialect.get_or_raise-314"><span class="linenos">314</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
-</span><span id="Dialect.get_or_raise-315"><a href="#Dialect.get_or_raise-315"><span class="linenos">315</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="Dialect.get_or_raise-316"><a href="#Dialect.get_or_raise-316"><span class="linenos">316</span></a> <span class="kn">from</span> <span class="nn">difflib</span> <span class="kn">import</span> <span class="n">get_close_matches</span>
-</span><span id="Dialect.get_or_raise-317"><a href="#Dialect.get_or_raise-317"><span class="linenos">317</span></a>
-</span><span id="Dialect.get_or_raise-318"><a href="#Dialect.get_or_raise-318"><span class="linenos">318</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">get_close_matches</span><span class="p">(</span><span class="n">dialect_name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Dialect.get_or_raise-319"><a href="#Dialect.get_or_raise-319"><span class="linenos">319</span></a> <span class="k">if</span> <span class="n">similar</span><span class="p">:</span>
-</span><span id="Dialect.get_or_raise-320"><a href="#Dialect.get_or_raise-320"><span class="linenos">320</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; Did you mean </span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">?&quot;</span>
-</span><span id="Dialect.get_or_raise-321"><a href="#Dialect.get_or_raise-321"><span class="linenos">321</span></a>
-</span><span id="Dialect.get_or_raise-322"><a href="#Dialect.get_or_raise-322"><span class="linenos">322</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.</span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.get_or_raise-282"><a href="#Dialect.get_or_raise-282"><span class="linenos">282</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.get_or_raise-283"><a href="#Dialect.get_or_raise-283"><span class="linenos">283</span></a> <span class="k">def</span> <span class="nf">get_or_raise</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dialect</span><span class="p">:</span>
+</span><span id="Dialect.get_or_raise-284"><a href="#Dialect.get_or_raise-284"><span class="linenos">284</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect.get_or_raise-285"><a href="#Dialect.get_or_raise-285"><span class="linenos">285</span></a><span class="sd"> Look up a dialect in the global dialect registry and return it if it exists.</span>
+</span><span id="Dialect.get_or_raise-286"><a href="#Dialect.get_or_raise-286"><span class="linenos">286</span></a>
+</span><span id="Dialect.get_or_raise-287"><a href="#Dialect.get_or_raise-287"><span class="linenos">287</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect.get_or_raise-288"><a href="#Dialect.get_or_raise-288"><span class="linenos">288</span></a><span class="sd"> dialect: The target dialect. If this is a string, it can be optionally followed by</span>
+</span><span id="Dialect.get_or_raise-289"><a href="#Dialect.get_or_raise-289"><span class="linenos">289</span></a><span class="sd"> additional key-value pairs that are separated by commas and are used to specify</span>
+</span><span id="Dialect.get_or_raise-290"><a href="#Dialect.get_or_raise-290"><span class="linenos">290</span></a><span class="sd"> dialect settings, such as whether the dialect&#39;s identifiers are case-sensitive.</span>
+</span><span id="Dialect.get_or_raise-291"><a href="#Dialect.get_or_raise-291"><span class="linenos">291</span></a>
+</span><span id="Dialect.get_or_raise-292"><a href="#Dialect.get_or_raise-292"><span class="linenos">292</span></a><span class="sd"> Example:</span>
+</span><span id="Dialect.get_or_raise-293"><a href="#Dialect.get_or_raise-293"><span class="linenos">293</span></a><span class="sd"> &gt;&gt;&gt; dialect = dialect_class = get_or_raise(&quot;duckdb&quot;)</span>
+</span><span id="Dialect.get_or_raise-294"><a href="#Dialect.get_or_raise-294"><span class="linenos">294</span></a><span class="sd"> &gt;&gt;&gt; dialect = get_or_raise(&quot;mysql, normalization_strategy = case_sensitive&quot;)</span>
+</span><span id="Dialect.get_or_raise-295"><a href="#Dialect.get_or_raise-295"><span class="linenos">295</span></a>
+</span><span id="Dialect.get_or_raise-296"><a href="#Dialect.get_or_raise-296"><span class="linenos">296</span></a><span class="sd"> Returns:</span>
+</span><span id="Dialect.get_or_raise-297"><a href="#Dialect.get_or_raise-297"><span class="linenos">297</span></a><span class="sd"> The corresponding Dialect instance.</span>
+</span><span id="Dialect.get_or_raise-298"><a href="#Dialect.get_or_raise-298"><span class="linenos">298</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect.get_or_raise-299"><a href="#Dialect.get_or_raise-299"><span class="linenos">299</span></a>
+</span><span id="Dialect.get_or_raise-300"><a href="#Dialect.get_or_raise-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="p">:</span>
+</span><span id="Dialect.get_or_raise-301"><a href="#Dialect.get_or_raise-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">()</span>
+</span><span id="Dialect.get_or_raise-302"><a href="#Dialect.get_or_raise-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">_Dialect</span><span class="p">):</span>
+</span><span id="Dialect.get_or_raise-303"><a href="#Dialect.get_or_raise-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="p">()</span>
+</span><span id="Dialect.get_or_raise-304"><a href="#Dialect.get_or_raise-304"><span class="linenos">304</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="n">Dialect</span><span class="p">):</span>
+</span><span id="Dialect.get_or_raise-305"><a href="#Dialect.get_or_raise-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="Dialect.get_or_raise-306"><a href="#Dialect.get_or_raise-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dialect</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Dialect.get_or_raise-307"><a href="#Dialect.get_or_raise-307"><span class="linenos">307</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Dialect.get_or_raise-308"><a href="#Dialect.get_or_raise-308"><span class="linenos">308</span></a> <span class="n">dialect_name</span><span class="p">,</span> <span class="o">*</span><span class="n">kv_pairs</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
+</span><span id="Dialect.get_or_raise-309"><a href="#Dialect.get_or_raise-309"><span class="linenos">309</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">v</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="p">(</span><span class="n">kv</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">kv</span> <span class="ow">in</span> <span class="n">kv_pairs</span><span class="p">)}</span>
+</span><span id="Dialect.get_or_raise-310"><a href="#Dialect.get_or_raise-310"><span class="linenos">310</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="Dialect.get_or_raise-311"><a href="#Dialect.get_or_raise-311"><span class="linenos">311</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="Dialect.get_or_raise-312"><a href="#Dialect.get_or_raise-312"><span class="linenos">312</span></a> <span class="sa">f</span><span class="s2">&quot;Invalid dialect format: &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
+</span><span id="Dialect.get_or_raise-313"><a href="#Dialect.get_or_raise-313"><span class="linenos">313</span></a> <span class="s2">&quot;Please use the correct format: &#39;dialect [, k1 = v2 [, ...]]&#39;.&quot;</span>
+</span><span id="Dialect.get_or_raise-314"><a href="#Dialect.get_or_raise-314"><span class="linenos">314</span></a> <span class="p">)</span>
+</span><span id="Dialect.get_or_raise-315"><a href="#Dialect.get_or_raise-315"><span class="linenos">315</span></a>
+</span><span id="Dialect.get_or_raise-316"><a href="#Dialect.get_or_raise-316"><span class="linenos">316</span></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dialect_name</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
+</span><span id="Dialect.get_or_raise-317"><a href="#Dialect.get_or_raise-317"><span class="linenos">317</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="Dialect.get_or_raise-318"><a href="#Dialect.get_or_raise-318"><span class="linenos">318</span></a> <span class="kn">from</span> <span class="nn">difflib</span> <span class="kn">import</span> <span class="n">get_close_matches</span>
+</span><span id="Dialect.get_or_raise-319"><a href="#Dialect.get_or_raise-319"><span class="linenos">319</span></a>
+</span><span id="Dialect.get_or_raise-320"><a href="#Dialect.get_or_raise-320"><span class="linenos">320</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">get_close_matches</span><span class="p">(</span><span class="n">dialect_name</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">classes</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Dialect.get_or_raise-321"><a href="#Dialect.get_or_raise-321"><span class="linenos">321</span></a> <span class="k">if</span> <span class="n">similar</span><span class="p">:</span>
+</span><span id="Dialect.get_or_raise-322"><a href="#Dialect.get_or_raise-322"><span class="linenos">322</span></a> <span class="n">similar</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; Did you mean </span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">?&quot;</span>
</span><span id="Dialect.get_or_raise-323"><a href="#Dialect.get_or_raise-323"><span class="linenos">323</span></a>
-</span><span id="Dialect.get_or_raise-324"><a href="#Dialect.get_or_raise-324"><span class="linenos">324</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Dialect.get_or_raise-324"><a href="#Dialect.get_or_raise-324"><span class="linenos">324</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown dialect &#39;</span><span class="si">{</span><span class="n">dialect_name</span><span class="si">}</span><span class="s2">&#39;.</span><span class="si">{</span><span class="n">similar</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Dialect.get_or_raise-325"><a href="#Dialect.get_or_raise-325"><span class="linenos">325</span></a>
-</span><span id="Dialect.get_or_raise-326"><a href="#Dialect.get_or_raise-326"><span class="linenos">326</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
+</span><span id="Dialect.get_or_raise-326"><a href="#Dialect.get_or_raise-326"><span class="linenos">326</span></a> <span class="k">return</span> <span class="n">result</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Dialect.get_or_raise-327"><a href="#Dialect.get_or_raise-327"><span class="linenos">327</span></a>
+</span><span id="Dialect.get_or_raise-328"><a href="#Dialect.get_or_raise-328"><span class="linenos">328</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid dialect type for &#39;</span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&#39;: &#39;</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -3216,21 +3234,21 @@ dialect settings, such as whether the dialect's identifiers are case-sensitive.<
</div>
<a class="headerlink" href="#Dialect.format_time"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.format_time-328"><a href="#Dialect.format_time-328"><span class="linenos">328</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.format_time-329"><a href="#Dialect.format_time-329"><span class="linenos">329</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="Dialect.format_time-330"><a href="#Dialect.format_time-330"><span class="linenos">330</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Dialect.format_time-331"><a href="#Dialect.format_time-331"><span class="linenos">331</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">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="Dialect.format_time-332"><a href="#Dialect.format_time-332"><span class="linenos">332</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts a time format in this dialect to its equivalent Python `strftime` format.&quot;&quot;&quot;</span>
-</span><span id="Dialect.format_time-333"><a href="#Dialect.format_time-333"><span class="linenos">333</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Dialect.format_time-334"><a href="#Dialect.format_time-334"><span class="linenos">334</span></a> <span class="k">return</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><span id="Dialect.format_time-335"><a href="#Dialect.format_time-335"><span class="linenos">335</span></a> <span class="c1"># the time formats are quoted</span>
-</span><span id="Dialect.format_time-336"><a href="#Dialect.format_time-336"><span class="linenos">336</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
-</span><span id="Dialect.format_time-337"><a href="#Dialect.format_time-337"><span class="linenos">337</span></a> <span class="p">)</span>
-</span><span id="Dialect.format_time-338"><a href="#Dialect.format_time-338"><span class="linenos">338</span></a>
-</span><span id="Dialect.format_time-339"><a href="#Dialect.format_time-339"><span class="linenos">339</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Dialect.format_time-340"><a href="#Dialect.format_time-340"><span class="linenos">340</span></a> <span class="k">return</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
-</span><span id="Dialect.format_time-341"><a href="#Dialect.format_time-341"><span class="linenos">341</span></a>
-</span><span id="Dialect.format_time-342"><a href="#Dialect.format_time-342"><span class="linenos">342</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.format_time-330"><a href="#Dialect.format_time-330"><span class="linenos">330</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.format_time-331"><a href="#Dialect.format_time-331"><span class="linenos">331</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="Dialect.format_time-332"><a href="#Dialect.format_time-332"><span class="linenos">332</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Dialect.format_time-333"><a href="#Dialect.format_time-333"><span class="linenos">333</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="Dialect.format_time-334"><a href="#Dialect.format_time-334"><span class="linenos">334</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts a time format in this dialect to its equivalent Python `strftime` format.&quot;&quot;&quot;</span>
+</span><span id="Dialect.format_time-335"><a href="#Dialect.format_time-335"><span class="linenos">335</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Dialect.format_time-336"><a href="#Dialect.format_time-336"><span class="linenos">336</span></a> <span class="k">return</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><span id="Dialect.format_time-337"><a href="#Dialect.format_time-337"><span class="linenos">337</span></a> <span class="c1"># the time formats are quoted</span>
+</span><span id="Dialect.format_time-338"><a href="#Dialect.format_time-338"><span class="linenos">338</span></a> <span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">)</span>
+</span><span id="Dialect.format_time-339"><a href="#Dialect.format_time-339"><span class="linenos">339</span></a> <span class="p">)</span>
+</span><span id="Dialect.format_time-340"><a href="#Dialect.format_time-340"><span class="linenos">340</span></a>
+</span><span id="Dialect.format_time-341"><a href="#Dialect.format_time-341"><span class="linenos">341</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Dialect.format_time-342"><a href="#Dialect.format_time-342"><span class="linenos">342</span></a> <span class="k">return</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">))</span>
+</span><span id="Dialect.format_time-343"><a href="#Dialect.format_time-343"><span class="linenos">343</span></a>
+</span><span id="Dialect.format_time-344"><a href="#Dialect.format_time-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -3250,43 +3268,43 @@ dialect settings, such as whether the dialect's identifiers are case-sensitive.<
</div>
<a class="headerlink" href="#Dialect.normalize_identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.normalize_identifier-360"><a href="#Dialect.normalize_identifier-360"><span class="linenos">360</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect.normalize_identifier-361"><a href="#Dialect.normalize_identifier-361"><span class="linenos">361</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect.normalize_identifier-362"><a href="#Dialect.normalize_identifier-362"><span class="linenos">362</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
-</span><span id="Dialect.normalize_identifier-363"><a href="#Dialect.normalize_identifier-363"><span class="linenos">363</span></a>
-</span><span id="Dialect.normalize_identifier-364"><a href="#Dialect.normalize_identifier-364"><span class="linenos">364</span></a><span class="sd"> For example, an identifier like `FoO` would be resolved as `foo` in Postgres, because it</span>
-</span><span id="Dialect.normalize_identifier-365"><a href="#Dialect.normalize_identifier-365"><span class="linenos">365</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
-</span><span id="Dialect.normalize_identifier-366"><a href="#Dialect.normalize_identifier-366"><span class="linenos">366</span></a><span class="sd"> it would resolve it as `FOO`. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
-</span><span id="Dialect.normalize_identifier-367"><a href="#Dialect.normalize_identifier-367"><span class="linenos">367</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
-</span><span id="Dialect.normalize_identifier-368"><a href="#Dialect.normalize_identifier-368"><span class="linenos">368</span></a>
-</span><span id="Dialect.normalize_identifier-369"><a href="#Dialect.normalize_identifier-369"><span class="linenos">369</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
-</span><span id="Dialect.normalize_identifier-370"><a href="#Dialect.normalize_identifier-370"><span class="linenos">370</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
-</span><span id="Dialect.normalize_identifier-371"><a href="#Dialect.normalize_identifier-371"><span class="linenos">371</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
-</span><span id="Dialect.normalize_identifier-372"><a href="#Dialect.normalize_identifier-372"><span class="linenos">372</span></a>
-</span><span id="Dialect.normalize_identifier-373"><a href="#Dialect.normalize_identifier-373"><span class="linenos">373</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
-</span><span id="Dialect.normalize_identifier-374"><a href="#Dialect.normalize_identifier-374"><span class="linenos">374</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
-</span><span id="Dialect.normalize_identifier-375"><a href="#Dialect.normalize_identifier-375"><span class="linenos">375</span></a>
-</span><span id="Dialect.normalize_identifier-376"><a href="#Dialect.normalize_identifier-376"><span class="linenos">376</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
-</span><span id="Dialect.normalize_identifier-377"><a href="#Dialect.normalize_identifier-377"><span class="linenos">377</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
-</span><span id="Dialect.normalize_identifier-378"><a href="#Dialect.normalize_identifier-378"><span class="linenos">378</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect.normalize_identifier-379"><a href="#Dialect.normalize_identifier-379"><span class="linenos">379</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Dialect.normalize_identifier-380"><a href="#Dialect.normalize_identifier-380"><span class="linenos">380</span></a> <span class="nb">isinstance</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">Identifier</span><span class="p">)</span>
-</span><span id="Dialect.normalize_identifier-381"><a href="#Dialect.normalize_identifier-381"><span class="linenos">381</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
-</span><span id="Dialect.normalize_identifier-382"><a href="#Dialect.normalize_identifier-382"><span class="linenos">382</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Dialect.normalize_identifier-383"><a href="#Dialect.normalize_identifier-383"><span class="linenos">383</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Dialect.normalize_identifier-384"><a href="#Dialect.normalize_identifier-384"><span class="linenos">384</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
-</span><span id="Dialect.normalize_identifier-385"><a href="#Dialect.normalize_identifier-385"><span class="linenos">385</span></a> <span class="p">)</span>
-</span><span id="Dialect.normalize_identifier-386"><a href="#Dialect.normalize_identifier-386"><span class="linenos">386</span></a> <span class="p">):</span>
-</span><span id="Dialect.normalize_identifier-387"><a href="#Dialect.normalize_identifier-387"><span class="linenos">387</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect.normalize_identifier-388"><a href="#Dialect.normalize_identifier-388"><span class="linenos">388</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="Dialect.normalize_identifier-389"><a href="#Dialect.normalize_identifier-389"><span class="linenos">389</span></a> <span class="p">(</span>
-</span><span id="Dialect.normalize_identifier-390"><a href="#Dialect.normalize_identifier-390"><span class="linenos">390</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Dialect.normalize_identifier-391"><a href="#Dialect.normalize_identifier-391"><span class="linenos">391</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
-</span><span id="Dialect.normalize_identifier-392"><a href="#Dialect.normalize_identifier-392"><span class="linenos">392</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Dialect.normalize_identifier-393"><a href="#Dialect.normalize_identifier-393"><span class="linenos">393</span></a> <span class="p">),</span>
-</span><span id="Dialect.normalize_identifier-394"><a href="#Dialect.normalize_identifier-394"><span class="linenos">394</span></a> <span class="p">)</span>
-</span><span id="Dialect.normalize_identifier-395"><a href="#Dialect.normalize_identifier-395"><span class="linenos">395</span></a>
-</span><span id="Dialect.normalize_identifier-396"><a href="#Dialect.normalize_identifier-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.normalize_identifier-362"><a href="#Dialect.normalize_identifier-362"><span class="linenos">362</span></a> <span class="k">def</span> <span class="nf">normalize_identifier</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect.normalize_identifier-363"><a href="#Dialect.normalize_identifier-363"><span class="linenos">363</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect.normalize_identifier-364"><a href="#Dialect.normalize_identifier-364"><span class="linenos">364</span></a><span class="sd"> Transforms an identifier in a way that resembles how it&#39;d be resolved by this dialect.</span>
+</span><span id="Dialect.normalize_identifier-365"><a href="#Dialect.normalize_identifier-365"><span class="linenos">365</span></a>
+</span><span id="Dialect.normalize_identifier-366"><a href="#Dialect.normalize_identifier-366"><span class="linenos">366</span></a><span class="sd"> For example, an identifier like `FoO` would be resolved as `foo` in Postgres, because it</span>
+</span><span id="Dialect.normalize_identifier-367"><a href="#Dialect.normalize_identifier-367"><span class="linenos">367</span></a><span class="sd"> lowercases all unquoted identifiers. On the other hand, Snowflake uppercases them, so</span>
+</span><span id="Dialect.normalize_identifier-368"><a href="#Dialect.normalize_identifier-368"><span class="linenos">368</span></a><span class="sd"> it would resolve it as `FOO`. If it was quoted, it&#39;d need to be treated as case-sensitive,</span>
+</span><span id="Dialect.normalize_identifier-369"><a href="#Dialect.normalize_identifier-369"><span class="linenos">369</span></a><span class="sd"> and so any normalization would be prohibited in order to avoid &quot;breaking&quot; the identifier.</span>
+</span><span id="Dialect.normalize_identifier-370"><a href="#Dialect.normalize_identifier-370"><span class="linenos">370</span></a>
+</span><span id="Dialect.normalize_identifier-371"><a href="#Dialect.normalize_identifier-371"><span class="linenos">371</span></a><span class="sd"> There are also dialects like Spark, which are case-insensitive even when quotes are</span>
+</span><span id="Dialect.normalize_identifier-372"><a href="#Dialect.normalize_identifier-372"><span class="linenos">372</span></a><span class="sd"> present, and dialects like MySQL, whose resolution rules match those employed by the</span>
+</span><span id="Dialect.normalize_identifier-373"><a href="#Dialect.normalize_identifier-373"><span class="linenos">373</span></a><span class="sd"> underlying operating system, for example they may always be case-sensitive in Linux.</span>
+</span><span id="Dialect.normalize_identifier-374"><a href="#Dialect.normalize_identifier-374"><span class="linenos">374</span></a>
+</span><span id="Dialect.normalize_identifier-375"><a href="#Dialect.normalize_identifier-375"><span class="linenos">375</span></a><span class="sd"> Finally, the normalization behavior of some engines can even be controlled through flags,</span>
+</span><span id="Dialect.normalize_identifier-376"><a href="#Dialect.normalize_identifier-376"><span class="linenos">376</span></a><span class="sd"> like in Redshift&#39;s case, where users can explicitly set enable_case_sensitive_identifier.</span>
+</span><span id="Dialect.normalize_identifier-377"><a href="#Dialect.normalize_identifier-377"><span class="linenos">377</span></a>
+</span><span id="Dialect.normalize_identifier-378"><a href="#Dialect.normalize_identifier-378"><span class="linenos">378</span></a><span class="sd"> SQLGlot aims to understand and handle all of these different behaviors gracefully, so</span>
+</span><span id="Dialect.normalize_identifier-379"><a href="#Dialect.normalize_identifier-379"><span class="linenos">379</span></a><span class="sd"> that it can analyze queries in the optimizer and successfully capture their semantics.</span>
+</span><span id="Dialect.normalize_identifier-380"><a href="#Dialect.normalize_identifier-380"><span class="linenos">380</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect.normalize_identifier-381"><a href="#Dialect.normalize_identifier-381"><span class="linenos">381</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Dialect.normalize_identifier-382"><a href="#Dialect.normalize_identifier-382"><span class="linenos">382</span></a> <span class="nb">isinstance</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">Identifier</span><span class="p">)</span>
+</span><span id="Dialect.normalize_identifier-383"><a href="#Dialect.normalize_identifier-383"><span class="linenos">383</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_SENSITIVE</span>
+</span><span id="Dialect.normalize_identifier-384"><a href="#Dialect.normalize_identifier-384"><span class="linenos">384</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Dialect.normalize_identifier-385"><a href="#Dialect.normalize_identifier-385"><span class="linenos">385</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Dialect.normalize_identifier-386"><a href="#Dialect.normalize_identifier-386"><span class="linenos">386</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
+</span><span id="Dialect.normalize_identifier-387"><a href="#Dialect.normalize_identifier-387"><span class="linenos">387</span></a> <span class="p">)</span>
+</span><span id="Dialect.normalize_identifier-388"><a href="#Dialect.normalize_identifier-388"><span class="linenos">388</span></a> <span class="p">):</span>
+</span><span id="Dialect.normalize_identifier-389"><a href="#Dialect.normalize_identifier-389"><span class="linenos">389</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect.normalize_identifier-390"><a href="#Dialect.normalize_identifier-390"><span class="linenos">390</span></a> <span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="Dialect.normalize_identifier-391"><a href="#Dialect.normalize_identifier-391"><span class="linenos">391</span></a> <span class="p">(</span>
+</span><span id="Dialect.normalize_identifier-392"><a href="#Dialect.normalize_identifier-392"><span class="linenos">392</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Dialect.normalize_identifier-393"><a href="#Dialect.normalize_identifier-393"><span class="linenos">393</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
+</span><span id="Dialect.normalize_identifier-394"><a href="#Dialect.normalize_identifier-394"><span class="linenos">394</span></a> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Dialect.normalize_identifier-395"><a href="#Dialect.normalize_identifier-395"><span class="linenos">395</span></a> <span class="p">),</span>
+</span><span id="Dialect.normalize_identifier-396"><a href="#Dialect.normalize_identifier-396"><span class="linenos">396</span></a> <span class="p">)</span>
+</span><span id="Dialect.normalize_identifier-397"><a href="#Dialect.normalize_identifier-397"><span class="linenos">397</span></a>
+</span><span id="Dialect.normalize_identifier-398"><a href="#Dialect.normalize_identifier-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -3321,17 +3339,17 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.case_sensitive"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.case_sensitive-398"><a href="#Dialect.case_sensitive-398"><span class="linenos">398</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect.case_sensitive-399"><a href="#Dialect.case_sensitive-399"><span class="linenos">399</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
-</span><span id="Dialect.case_sensitive-400"><a href="#Dialect.case_sensitive-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
-</span><span id="Dialect.case_sensitive-401"><a href="#Dialect.case_sensitive-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Dialect.case_sensitive-402"><a href="#Dialect.case_sensitive-402"><span class="linenos">402</span></a>
-</span><span id="Dialect.case_sensitive-403"><a href="#Dialect.case_sensitive-403"><span class="linenos">403</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Dialect.case_sensitive-404"><a href="#Dialect.case_sensitive-404"><span class="linenos">404</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
-</span><span id="Dialect.case_sensitive-405"><a href="#Dialect.case_sensitive-405"><span class="linenos">405</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
-</span><span id="Dialect.case_sensitive-406"><a href="#Dialect.case_sensitive-406"><span class="linenos">406</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
-</span><span id="Dialect.case_sensitive-407"><a href="#Dialect.case_sensitive-407"><span class="linenos">407</span></a> <span class="p">)</span>
-</span><span id="Dialect.case_sensitive-408"><a href="#Dialect.case_sensitive-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.case_sensitive-400"><a href="#Dialect.case_sensitive-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">case_sensitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect.case_sensitive-401"><a href="#Dialect.case_sensitive-401"><span class="linenos">401</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text contains any case sensitive characters, based on the dialect&#39;s rules.&quot;&quot;&quot;</span>
+</span><span id="Dialect.case_sensitive-402"><a href="#Dialect.case_sensitive-402"><span class="linenos">402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span><span class="p">:</span>
+</span><span id="Dialect.case_sensitive-403"><a href="#Dialect.case_sensitive-403"><span class="linenos">403</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Dialect.case_sensitive-404"><a href="#Dialect.case_sensitive-404"><span class="linenos">404</span></a>
+</span><span id="Dialect.case_sensitive-405"><a href="#Dialect.case_sensitive-405"><span class="linenos">405</span></a> <span class="n">unsafe</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Dialect.case_sensitive-406"><a href="#Dialect.case_sensitive-406"><span class="linenos">406</span></a> <span class="nb">str</span><span class="o">.</span><span class="n">islower</span>
+</span><span id="Dialect.case_sensitive-407"><a href="#Dialect.case_sensitive-407"><span class="linenos">407</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalization_strategy</span> <span class="ow">is</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">UPPERCASE</span>
+</span><span id="Dialect.case_sensitive-408"><a href="#Dialect.case_sensitive-408"><span class="linenos">408</span></a> <span class="k">else</span> <span class="nb">str</span><span class="o">.</span><span class="n">isupper</span>
+</span><span id="Dialect.case_sensitive-409"><a href="#Dialect.case_sensitive-409"><span class="linenos">409</span></a> <span class="p">)</span>
+</span><span id="Dialect.case_sensitive-410"><a href="#Dialect.case_sensitive-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">unsafe</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
</span></pre></div>
@@ -3351,25 +3369,25 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.can_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.can_identify-410"><a href="#Dialect.can_identify-410"><span class="linenos">410</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Dialect.can_identify-411"><a href="#Dialect.can_identify-411"><span class="linenos">411</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
-</span><span id="Dialect.can_identify-412"><a href="#Dialect.can_identify-412"><span class="linenos">412</span></a>
-</span><span id="Dialect.can_identify-413"><a href="#Dialect.can_identify-413"><span class="linenos">413</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect.can_identify-414"><a href="#Dialect.can_identify-414"><span class="linenos">414</span></a><span class="sd"> text: The text to check.</span>
-</span><span id="Dialect.can_identify-415"><a href="#Dialect.can_identify-415"><span class="linenos">415</span></a><span class="sd"> identify:</span>
-</span><span id="Dialect.can_identify-416"><a href="#Dialect.can_identify-416"><span class="linenos">416</span></a><span class="sd"> `&quot;always&quot;` or `True`: Always returns `True`.</span>
-</span><span id="Dialect.can_identify-417"><a href="#Dialect.can_identify-417"><span class="linenos">417</span></a><span class="sd"> `&quot;safe&quot;`: Only returns `True` if the identifier is case-insensitive.</span>
-</span><span id="Dialect.can_identify-418"><a href="#Dialect.can_identify-418"><span class="linenos">418</span></a>
-</span><span id="Dialect.can_identify-419"><a href="#Dialect.can_identify-419"><span class="linenos">419</span></a><span class="sd"> Returns:</span>
-</span><span id="Dialect.can_identify-420"><a href="#Dialect.can_identify-420"><span class="linenos">420</span></a><span class="sd"> Whether or not the given text can be identified.</span>
-</span><span id="Dialect.can_identify-421"><a href="#Dialect.can_identify-421"><span class="linenos">421</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect.can_identify-422"><a href="#Dialect.can_identify-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
-</span><span id="Dialect.can_identify-423"><a href="#Dialect.can_identify-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Dialect.can_identify-424"><a href="#Dialect.can_identify-424"><span class="linenos">424</span></a>
-</span><span id="Dialect.can_identify-425"><a href="#Dialect.can_identify-425"><span class="linenos">425</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
-</span><span id="Dialect.can_identify-426"><a href="#Dialect.can_identify-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Dialect.can_identify-427"><a href="#Dialect.can_identify-427"><span class="linenos">427</span></a>
-</span><span id="Dialect.can_identify-428"><a href="#Dialect.can_identify-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="kc">False</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.can_identify-412"><a href="#Dialect.can_identify-412"><span class="linenos">412</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">&quot;safe&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Dialect.can_identify-413"><a href="#Dialect.can_identify-413"><span class="linenos">413</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Checks if text can be identified given an identify option.</span>
+</span><span id="Dialect.can_identify-414"><a href="#Dialect.can_identify-414"><span class="linenos">414</span></a>
+</span><span id="Dialect.can_identify-415"><a href="#Dialect.can_identify-415"><span class="linenos">415</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect.can_identify-416"><a href="#Dialect.can_identify-416"><span class="linenos">416</span></a><span class="sd"> text: The text to check.</span>
+</span><span id="Dialect.can_identify-417"><a href="#Dialect.can_identify-417"><span class="linenos">417</span></a><span class="sd"> identify:</span>
+</span><span id="Dialect.can_identify-418"><a href="#Dialect.can_identify-418"><span class="linenos">418</span></a><span class="sd"> `&quot;always&quot;` or `True`: Always returns `True`.</span>
+</span><span id="Dialect.can_identify-419"><a href="#Dialect.can_identify-419"><span class="linenos">419</span></a><span class="sd"> `&quot;safe&quot;`: Only returns `True` if the identifier is case-insensitive.</span>
+</span><span id="Dialect.can_identify-420"><a href="#Dialect.can_identify-420"><span class="linenos">420</span></a>
+</span><span id="Dialect.can_identify-421"><a href="#Dialect.can_identify-421"><span class="linenos">421</span></a><span class="sd"> Returns:</span>
+</span><span id="Dialect.can_identify-422"><a href="#Dialect.can_identify-422"><span class="linenos">422</span></a><span class="sd"> Whether or not the given text can be identified.</span>
+</span><span id="Dialect.can_identify-423"><a href="#Dialect.can_identify-423"><span class="linenos">423</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect.can_identify-424"><a href="#Dialect.can_identify-424"><span class="linenos">424</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span>
+</span><span id="Dialect.can_identify-425"><a href="#Dialect.can_identify-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Dialect.can_identify-426"><a href="#Dialect.can_identify-426"><span class="linenos">426</span></a>
+</span><span id="Dialect.can_identify-427"><a href="#Dialect.can_identify-427"><span class="linenos">427</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">&quot;safe&quot;</span><span class="p">:</span>
+</span><span id="Dialect.can_identify-428"><a href="#Dialect.can_identify-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Dialect.can_identify-429"><a href="#Dialect.can_identify-429"><span class="linenos">429</span></a>
+</span><span id="Dialect.can_identify-430"><a href="#Dialect.can_identify-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="kc">False</span>
</span></pre></div>
@@ -3403,23 +3421,23 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.quote_identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.quote_identifier-430"><a href="#Dialect.quote_identifier-430"><span class="linenos">430</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Dialect.quote_identifier-431"><a href="#Dialect.quote_identifier-431"><span class="linenos">431</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Dialect.quote_identifier-432"><a href="#Dialect.quote_identifier-432"><span class="linenos">432</span></a><span class="sd"> Adds quotes to a given identifier.</span>
-</span><span id="Dialect.quote_identifier-433"><a href="#Dialect.quote_identifier-433"><span class="linenos">433</span></a>
-</span><span id="Dialect.quote_identifier-434"><a href="#Dialect.quote_identifier-434"><span class="linenos">434</span></a><span class="sd"> Args:</span>
-</span><span id="Dialect.quote_identifier-435"><a href="#Dialect.quote_identifier-435"><span class="linenos">435</span></a><span class="sd"> expression: The expression of interest. If it&#39;s not an `Identifier`, this method is a no-op.</span>
-</span><span id="Dialect.quote_identifier-436"><a href="#Dialect.quote_identifier-436"><span class="linenos">436</span></a><span class="sd"> identify: If set to `False`, the quotes will only be added if the identifier is deemed</span>
-</span><span id="Dialect.quote_identifier-437"><a href="#Dialect.quote_identifier-437"><span class="linenos">437</span></a><span class="sd"> &quot;unsafe&quot;, with respect to its characters and this dialect&#39;s normalization strategy.</span>
-</span><span id="Dialect.quote_identifier-438"><a href="#Dialect.quote_identifier-438"><span class="linenos">438</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Dialect.quote_identifier-439"><a href="#Dialect.quote_identifier-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Identifier</span><span class="p">):</span>
-</span><span id="Dialect.quote_identifier-440"><a href="#Dialect.quote_identifier-440"><span class="linenos">440</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Dialect.quote_identifier-441"><a href="#Dialect.quote_identifier-441"><span class="linenos">441</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Dialect.quote_identifier-442"><a href="#Dialect.quote_identifier-442"><span class="linenos">442</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
-</span><span id="Dialect.quote_identifier-443"><a href="#Dialect.quote_identifier-443"><span class="linenos">443</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Dialect.quote_identifier-444"><a href="#Dialect.quote_identifier-444"><span class="linenos">444</span></a> <span class="p">)</span>
-</span><span id="Dialect.quote_identifier-445"><a href="#Dialect.quote_identifier-445"><span class="linenos">445</span></a>
-</span><span id="Dialect.quote_identifier-446"><a href="#Dialect.quote_identifier-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.quote_identifier-432"><a href="#Dialect.quote_identifier-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">quote_identifier</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">E</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Dialect.quote_identifier-433"><a href="#Dialect.quote_identifier-433"><span class="linenos">433</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Dialect.quote_identifier-434"><a href="#Dialect.quote_identifier-434"><span class="linenos">434</span></a><span class="sd"> Adds quotes to a given identifier.</span>
+</span><span id="Dialect.quote_identifier-435"><a href="#Dialect.quote_identifier-435"><span class="linenos">435</span></a>
+</span><span id="Dialect.quote_identifier-436"><a href="#Dialect.quote_identifier-436"><span class="linenos">436</span></a><span class="sd"> Args:</span>
+</span><span id="Dialect.quote_identifier-437"><a href="#Dialect.quote_identifier-437"><span class="linenos">437</span></a><span class="sd"> expression: The expression of interest. If it&#39;s not an `Identifier`, this method is a no-op.</span>
+</span><span id="Dialect.quote_identifier-438"><a href="#Dialect.quote_identifier-438"><span class="linenos">438</span></a><span class="sd"> identify: If set to `False`, the quotes will only be added if the identifier is deemed</span>
+</span><span id="Dialect.quote_identifier-439"><a href="#Dialect.quote_identifier-439"><span class="linenos">439</span></a><span class="sd"> &quot;unsafe&quot;, with respect to its characters and this dialect&#39;s normalization strategy.</span>
+</span><span id="Dialect.quote_identifier-440"><a href="#Dialect.quote_identifier-440"><span class="linenos">440</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Dialect.quote_identifier-441"><a href="#Dialect.quote_identifier-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Dialect.quote_identifier-442"><a href="#Dialect.quote_identifier-442"><span class="linenos">442</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Dialect.quote_identifier-443"><a href="#Dialect.quote_identifier-443"><span class="linenos">443</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Dialect.quote_identifier-444"><a href="#Dialect.quote_identifier-444"><span class="linenos">444</span></a> <span class="s2">&quot;quoted&quot;</span><span class="p">,</span>
+</span><span id="Dialect.quote_identifier-445"><a href="#Dialect.quote_identifier-445"><span class="linenos">445</span></a> <span class="n">identify</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Dialect.quote_identifier-446"><a href="#Dialect.quote_identifier-446"><span class="linenos">446</span></a> <span class="p">)</span>
+</span><span id="Dialect.quote_identifier-447"><a href="#Dialect.quote_identifier-447"><span class="linenos">447</span></a>
+</span><span id="Dialect.quote_identifier-448"><a href="#Dialect.quote_identifier-448"><span class="linenos">448</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -3447,18 +3465,18 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.to_json_path"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.to_json_path-448"><a href="#Dialect.to_json_path-448"><span class="linenos">448</span></a> <span class="k">def</span> <span class="nf">to_json_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Dialect.to_json_path-449"><a href="#Dialect.to_json_path-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Dialect.to_json_path-450"><a href="#Dialect.to_json_path-450"><span class="linenos">450</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Dialect.to_json_path-451"><a href="#Dialect.to_json_path-451"><span class="linenos">451</span></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="Dialect.to_json_path-452"><a href="#Dialect.to_json_path-452"><span class="linenos">452</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">path_text</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="Dialect.to_json_path-453"><a href="#Dialect.to_json_path-453"><span class="linenos">453</span></a>
-</span><span id="Dialect.to_json_path-454"><a href="#Dialect.to_json_path-454"><span class="linenos">454</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Dialect.to_json_path-455"><a href="#Dialect.to_json_path-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="n">parse_json_path</span><span class="p">(</span><span class="n">path_text</span><span class="p">)</span>
-</span><span id="Dialect.to_json_path-456"><a href="#Dialect.to_json_path-456"><span class="linenos">456</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="Dialect.to_json_path-457"><a href="#Dialect.to_json_path-457"><span class="linenos">457</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid JSON path syntax. </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Dialect.to_json_path-458"><a href="#Dialect.to_json_path-458"><span class="linenos">458</span></a>
-</span><span id="Dialect.to_json_path-459"><a href="#Dialect.to_json_path-459"><span class="linenos">459</span></a> <span class="k">return</span> <span class="n">path</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.to_json_path-450"><a href="#Dialect.to_json_path-450"><span class="linenos">450</span></a> <span class="k">def</span> <span class="nf">to_json_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Dialect.to_json_path-451"><a href="#Dialect.to_json_path-451"><span class="linenos">451</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Dialect.to_json_path-452"><a href="#Dialect.to_json_path-452"><span class="linenos">452</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Dialect.to_json_path-453"><a href="#Dialect.to_json_path-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="Dialect.to_json_path-454"><a href="#Dialect.to_json_path-454"><span class="linenos">454</span></a> <span class="n">path_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">path_text</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="Dialect.to_json_path-455"><a href="#Dialect.to_json_path-455"><span class="linenos">455</span></a>
+</span><span id="Dialect.to_json_path-456"><a href="#Dialect.to_json_path-456"><span class="linenos">456</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Dialect.to_json_path-457"><a href="#Dialect.to_json_path-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="n">parse_json_path</span><span class="p">(</span><span class="n">path_text</span><span class="p">)</span>
+</span><span id="Dialect.to_json_path-458"><a href="#Dialect.to_json_path-458"><span class="linenos">458</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="Dialect.to_json_path-459"><a href="#Dialect.to_json_path-459"><span class="linenos">459</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid JSON path syntax. </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Dialect.to_json_path-460"><a href="#Dialect.to_json_path-460"><span class="linenos">460</span></a>
+</span><span id="Dialect.to_json_path-461"><a href="#Dialect.to_json_path-461"><span class="linenos">461</span></a> <span class="k">return</span> <span class="n">path</span>
</span></pre></div>
@@ -3476,8 +3494,8 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.parse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse-461"><a href="#Dialect.parse-461"><span class="linenos">461</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Dialect.parse-462"><a href="#Dialect.parse-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse-463"><a href="#Dialect.parse-463"><span class="linenos">463</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Dialect.parse-464"><a href="#Dialect.parse-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -3495,10 +3513,10 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.parse_into"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse_into-464"><a href="#Dialect.parse_into-464"><span class="linenos">464</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Dialect.parse_into-465"><a href="#Dialect.parse_into-465"><span class="linenos">465</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Dialect.parse_into-466"><a href="#Dialect.parse_into-466"><span class="linenos">466</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Dialect.parse_into-467"><a href="#Dialect.parse_into-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse_into-466"><a href="#Dialect.parse_into-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Dialect.parse_into-467"><a href="#Dialect.parse_into-467"><span class="linenos">467</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Dialect.parse_into-468"><a href="#Dialect.parse_into-468"><span class="linenos">468</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Dialect.parse_into-469"><a href="#Dialect.parse_into-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">expression_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">),</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -3516,8 +3534,8 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.generate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generate-469"><a href="#Dialect.generate-469"><span class="linenos">469</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Dialect.generate-470"><a href="#Dialect.generate-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generate-471"><a href="#Dialect.generate-471"><span class="linenos">471</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Dialect.generate-472"><a href="#Dialect.generate-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator</span><span class="p">(</span><span class="o">**</span><span class="n">opts</span><span class="p">)</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span>
</span></pre></div>
@@ -3535,11 +3553,11 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.transpile"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.transpile-472"><a href="#Dialect.transpile-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Dialect.transpile-473"><a href="#Dialect.transpile-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Dialect.transpile-474"><a href="#Dialect.transpile-474"><span class="linenos">474</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Dialect.transpile-475"><a href="#Dialect.transpile-475"><span class="linenos">475</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="Dialect.transpile-476"><a href="#Dialect.transpile-476"><span class="linenos">476</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.transpile-474"><a href="#Dialect.transpile-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Dialect.transpile-475"><a href="#Dialect.transpile-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Dialect.transpile-476"><a href="#Dialect.transpile-476"><span class="linenos">476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Dialect.transpile-477"><a href="#Dialect.transpile-477"><span class="linenos">477</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+</span><span id="Dialect.transpile-478"><a href="#Dialect.transpile-478"><span class="linenos">478</span></a> <span class="p">]</span>
</span></pre></div>
@@ -3557,8 +3575,8 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.tokenize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.tokenize-478"><a href="#Dialect.tokenize-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Dialect.tokenize-479"><a href="#Dialect.tokenize-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.tokenize-480"><a href="#Dialect.tokenize-480"><span class="linenos">480</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Dialect.tokenize-481"><a href="#Dialect.tokenize-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -3574,11 +3592,11 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.tokenizer-481"><a href="#Dialect.tokenizer-481"><span class="linenos">481</span></a> <span class="nd">@property</span>
-</span><span id="Dialect.tokenizer-482"><a href="#Dialect.tokenizer-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
-</span><span id="Dialect.tokenizer-483"><a href="#Dialect.tokenizer-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
-</span><span id="Dialect.tokenizer-484"><a href="#Dialect.tokenizer-484"><span class="linenos">484</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Dialect.tokenizer-485"><a href="#Dialect.tokenizer-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.tokenizer-483"><a href="#Dialect.tokenizer-483"><span class="linenos">483</span></a> <span class="nd">@property</span>
+</span><span id="Dialect.tokenizer-484"><a href="#Dialect.tokenizer-484"><span class="linenos">484</span></a> <span class="k">def</span> <span class="nf">tokenizer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tokenizer</span><span class="p">:</span>
+</span><span id="Dialect.tokenizer-485"><a href="#Dialect.tokenizer-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_tokenizer&quot;</span><span class="p">):</span>
+</span><span id="Dialect.tokenizer-486"><a href="#Dialect.tokenizer-486"><span class="linenos">486</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Dialect.tokenizer-487"><a href="#Dialect.tokenizer-487"><span class="linenos">487</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokenizer</span>
</span></pre></div>
@@ -3596,8 +3614,8 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parser-487"><a href="#Dialect.parser-487"><span class="linenos">487</span></a> <span class="k">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
-</span><span id="Dialect.parser-488"><a href="#Dialect.parser-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parser-489"><a href="#Dialect.parser-489"><span class="linenos">489</span></a> <span class="k">def</span> <span class="nf">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Parser</span><span class="p">:</span>
+</span><span id="Dialect.parser-490"><a href="#Dialect.parser-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -3615,8 +3633,8 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#Dialect.generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generator-490"><a href="#Dialect.generator-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
-</span><span id="Dialect.generator-491"><a href="#Dialect.generator-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generator-492"><a href="#Dialect.generator-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Generator</span><span class="p">:</span>
+</span><span id="Dialect.generator-493"><a href="#Dialect.generator-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">generator_class</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -3648,8 +3666,8 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#rename_func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="rename_func-497"><a href="#rename_func-497"><span class="linenos">497</span></a><span class="k">def</span> <span class="nf">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="rename_func-498"><a href="#rename_func-498"><span class="linenos">498</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</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="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">flatten</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="rename_func-499"><a href="#rename_func-499"><span class="linenos">499</span></a><span class="k">def</span> <span class="nf">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="rename_func-500"><a href="#rename_func-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</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="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">flatten</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
</span></pre></div>
@@ -3667,10 +3685,10 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#approx_count_distinct_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="approx_count_distinct_sql-501"><a href="#approx_count_distinct_sql-501"><span class="linenos">501</span></a><span class="k">def</span> <span class="nf">approx_count_distinct_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="approx_count_distinct_sql-502"><a href="#approx_count_distinct_sql-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;accuracy&quot;</span><span class="p">):</span>
-</span><span id="approx_count_distinct_sql-503"><a href="#approx_count_distinct_sql-503"><span class="linenos">503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT does not support accuracy&quot;</span><span class="p">)</span>
-</span><span id="approx_count_distinct_sql-504"><a href="#approx_count_distinct_sql-504"><span class="linenos">504</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="approx_count_distinct_sql-503"><a href="#approx_count_distinct_sql-503"><span class="linenos">503</span></a><span class="k">def</span> <span class="nf">approx_count_distinct_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="approx_count_distinct_sql-504"><a href="#approx_count_distinct_sql-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;accuracy&quot;</span><span class="p">):</span>
+</span><span id="approx_count_distinct_sql-505"><a href="#approx_count_distinct_sql-505"><span class="linenos">505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT does not support accuracy&quot;</span><span class="p">)</span>
+</span><span id="approx_count_distinct_sql-506"><a href="#approx_count_distinct_sql-506"><span class="linenos">506</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
@@ -3688,18 +3706,18 @@ that it can analyze queries in the optimizer and successfully capture their sema
</div>
<a class="headerlink" href="#if_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="if_sql-507"><a href="#if_sql-507"><span class="linenos">507</span></a><span class="k">def</span> <span class="nf">if_sql</span><span class="p">(</span>
-</span><span id="if_sql-508"><a href="#if_sql-508"><span class="linenos">508</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">false_value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="if_sql-509"><a href="#if_sql-509"><span class="linenos">509</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="if_sql-510"><a href="#if_sql-510"><span class="linenos">510</span></a> <span class="k">def</span> <span class="nf">_if_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="if_sql-511"><a href="#if_sql-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="if_sql-512"><a href="#if_sql-512"><span class="linenos">512</span></a> <span class="n">name</span><span class="p">,</span>
-</span><span id="if_sql-513"><a href="#if_sql-513"><span class="linenos">513</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="if_sql-514"><a href="#if_sql-514"><span class="linenos">514</span></a> <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;true&quot;</span><span class="p">),</span>
-</span><span id="if_sql-515"><a href="#if_sql-515"><span class="linenos">515</span></a> <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;false&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">false_value</span><span class="p">,</span>
-</span><span id="if_sql-516"><a href="#if_sql-516"><span class="linenos">516</span></a> <span class="p">)</span>
-</span><span id="if_sql-517"><a href="#if_sql-517"><span class="linenos">517</span></a>
-</span><span id="if_sql-518"><a href="#if_sql-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="n">_if_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="if_sql-509"><a href="#if_sql-509"><span class="linenos">509</span></a><span class="k">def</span> <span class="nf">if_sql</span><span class="p">(</span>
+</span><span id="if_sql-510"><a href="#if_sql-510"><span class="linenos">510</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">false_value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="if_sql-511"><a href="#if_sql-511"><span class="linenos">511</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="if_sql-512"><a href="#if_sql-512"><span class="linenos">512</span></a> <span class="k">def</span> <span class="nf">_if_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="if_sql-513"><a href="#if_sql-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="if_sql-514"><a href="#if_sql-514"><span class="linenos">514</span></a> <span class="n">name</span><span class="p">,</span>
+</span><span id="if_sql-515"><a href="#if_sql-515"><span class="linenos">515</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="if_sql-516"><a href="#if_sql-516"><span class="linenos">516</span></a> <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;true&quot;</span><span class="p">),</span>
+</span><span id="if_sql-517"><a href="#if_sql-517"><span class="linenos">517</span></a> <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;false&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">false_value</span><span class="p">,</span>
+</span><span id="if_sql-518"><a href="#if_sql-518"><span class="linenos">518</span></a> <span class="p">)</span>
+</span><span id="if_sql-519"><a href="#if_sql-519"><span class="linenos">519</span></a>
+</span><span id="if_sql-520"><a href="#if_sql-520"><span class="linenos">520</span></a> <span class="k">return</span> <span class="n">_if_sql</span>
</span></pre></div>
@@ -3711,15 +3729,13 @@ that it can analyze queries in the optimizer and successfully capture their sema
<div class="attr function">
<span class="def">def</span>
- <span class="name">arrow_json_extract_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a></span> <span class="o">|</span> <span class="n"><a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+ <span class="name">arrow_json_extract_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a></span><span class="p">,</span> <span class="n"><a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="arrow_json_extract_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#arrow_json_extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="arrow_json_extract_sql-521"><a href="#arrow_json_extract_sql-521"><span class="linenos">521</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_sql</span><span class="p">(</span>
-</span><span id="arrow_json_extract_sql-522"><a href="#arrow_json_extract_sql-522"><span class="linenos">522</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span>
-</span><span id="arrow_json_extract_sql-523"><a href="#arrow_json_extract_sql-523"><span class="linenos">523</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="arrow_json_extract_sql-523"><a href="#arrow_json_extract_sql-523"><span class="linenos">523</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">JSON_EXTRACT_TYPE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="arrow_json_extract_sql-524"><a href="#arrow_json_extract_sql-524"><span class="linenos">524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="arrow_json_extract_sql-525"><a href="#arrow_json_extract_sql-525"><span class="linenos">525</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="ow">and</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">Literal</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="arrow_json_extract_sql-526"><a href="#arrow_json_extract_sql-526"><span class="linenos">526</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;json&quot;</span><span class="p">))</span>
@@ -5004,67 +5020,97 @@ columns are removed from the create statement.</p>
<div class="attr function">
<span class="def">def</span>
- <span class="name">parse_json_extract_path</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expr_type</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]</span>,</span><span class="param"> <span class="n">supports_null_if_invalid</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n">List</span><span class="p">],</span> <span class="o">~</span><span class="n">E</span><span class="p">]</span>:</span></span>
+ <span class="name">parse_json_extract_path</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expr_type</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="o">~</span><span class="n">F</span><span class="p">]</span>,</span><span class="param"> <span class="n">zero_based_indexing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n">List</span><span class="p">],</span> <span class="o">~</span><span class="n">F</span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="parse_json_extract_path-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#parse_json_extract_path"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_json_extract_path-1014"><a href="#parse_json_extract_path-1014"><span class="linenos">1014</span></a><span class="k">def</span> <span class="nf">parse_json_extract_path</span><span class="p">(</span>
-</span><span id="parse_json_extract_path-1015"><a href="#parse_json_extract_path-1015"><span class="linenos">1015</span></a> <span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
-</span><span id="parse_json_extract_path-1016"><a href="#parse_json_extract_path-1016"><span class="linenos">1016</span></a> <span class="n">supports_null_if_invalid</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="parse_json_extract_path-1017"><a href="#parse_json_extract_path-1017"><span class="linenos">1017</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="parse_json_extract_path-1018"><a href="#parse_json_extract_path-1018"><span class="linenos">1018</span></a> <span class="k">def</span> <span class="nf">_parse_json_extract_path</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="parse_json_extract_path-1019"><a href="#parse_json_extract_path-1019"><span class="linenos">1019</span></a> <span class="n">null_if_invalid</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="parse_json_extract_path-1020"><a href="#parse_json_extract_path-1020"><span class="linenos">1020</span></a>
-</span><span id="parse_json_extract_path-1021"><a href="#parse_json_extract_path-1021"><span class="linenos">1021</span></a> <span class="n">segments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">()]</span>
-</span><span id="parse_json_extract_path-1022"><a href="#parse_json_extract_path-1022"><span class="linenos">1022</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="parse_json_extract_path-1023"><a href="#parse_json_extract_path-1023"><span class="linenos">1023</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="parse_json_extract_path-1024"><a href="#parse_json_extract_path-1024"><span class="linenos">1024</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">name</span>
-</span><span id="parse_json_extract_path-1025"><a href="#parse_json_extract_path-1025"><span class="linenos">1025</span></a> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
-</span><span id="parse_json_extract_path-1026"><a href="#parse_json_extract_path-1026"><span class="linenos">1026</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">)))</span>
-</span><span id="parse_json_extract_path-1027"><a href="#parse_json_extract_path-1027"><span class="linenos">1027</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="parse_json_extract_path-1028"><a href="#parse_json_extract_path-1028"><span class="linenos">1028</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">))</span>
-</span><span id="parse_json_extract_path-1029"><a href="#parse_json_extract_path-1029"><span class="linenos">1029</span></a> <span class="k">elif</span> <span class="n">supports_null_if_invalid</span><span class="p">:</span>
-</span><span id="parse_json_extract_path-1030"><a href="#parse_json_extract_path-1030"><span class="linenos">1030</span></a> <span class="n">null_if_invalid</span> <span class="o">=</span> <span class="n">arg</span>
-</span><span id="parse_json_extract_path-1031"><a href="#parse_json_extract_path-1031"><span class="linenos">1031</span></a>
-</span><span id="parse_json_extract_path-1032"><a href="#parse_json_extract_path-1032"><span class="linenos">1032</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="parse_json_extract_path-1033"><a href="#parse_json_extract_path-1033"><span class="linenos">1033</span></a> <span class="n">jsonpath</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPath</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">segments</span><span class="p">)</span>
-</span><span id="parse_json_extract_path-1034"><a href="#parse_json_extract_path-1034"><span class="linenos">1034</span></a>
-</span><span id="parse_json_extract_path-1035"><a href="#parse_json_extract_path-1035"><span class="linenos">1035</span></a> <span class="c1"># This is done to avoid failing in the expression validator due to the arg count</span>
-</span><span id="parse_json_extract_path-1036"><a href="#parse_json_extract_path-1036"><span class="linenos">1036</span></a> <span class="k">del</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
-</span><span id="parse_json_extract_path-1037"><a href="#parse_json_extract_path-1037"><span class="linenos">1037</span></a>
-</span><span id="parse_json_extract_path-1038"><a href="#parse_json_extract_path-1038"><span class="linenos">1038</span></a> <span class="k">if</span> <span class="n">expr_type</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span>
-</span><span id="parse_json_extract_path-1039"><a href="#parse_json_extract_path-1039"><span class="linenos">1039</span></a> <span class="k">return</span> <span class="n">expr_type</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">jsonpath</span><span class="p">,</span> <span class="n">null_if_invalid</span><span class="o">=</span><span class="n">null_if_invalid</span><span class="p">)</span>
-</span><span id="parse_json_extract_path-1040"><a href="#parse_json_extract_path-1040"><span class="linenos">1040</span></a>
-</span><span id="parse_json_extract_path-1041"><a href="#parse_json_extract_path-1041"><span class="linenos">1041</span></a> <span class="k">return</span> <span class="n">expr_type</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">jsonpath</span><span class="p">)</span>
-</span><span id="parse_json_extract_path-1042"><a href="#parse_json_extract_path-1042"><span class="linenos">1042</span></a>
-</span><span id="parse_json_extract_path-1043"><a href="#parse_json_extract_path-1043"><span class="linenos">1043</span></a> <span class="k">return</span> <span class="n">_parse_json_extract_path</span>
+</span><span id="parse_json_extract_path-1015"><a href="#parse_json_extract_path-1015"><span class="linenos">1015</span></a> <span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">F</span><span class="p">],</span> <span class="n">zero_based_indexing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="parse_json_extract_path-1016"><a href="#parse_json_extract_path-1016"><span class="linenos">1016</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">F</span><span class="p">]:</span>
+</span><span id="parse_json_extract_path-1017"><a href="#parse_json_extract_path-1017"><span class="linenos">1017</span></a> <span class="k">def</span> <span class="nf">_parse_json_extract_path</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">F</span><span class="p">:</span>
+</span><span id="parse_json_extract_path-1018"><a href="#parse_json_extract_path-1018"><span class="linenos">1018</span></a> <span class="n">segments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">()]</span>
+</span><span id="parse_json_extract_path-1019"><a href="#parse_json_extract_path-1019"><span class="linenos">1019</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="parse_json_extract_path-1020"><a href="#parse_json_extract_path-1020"><span class="linenos">1020</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="parse_json_extract_path-1021"><a href="#parse_json_extract_path-1021"><span class="linenos">1021</span></a> <span class="c1"># We use the fallback parser because we can&#39;t really transpile non-literals safely</span>
+</span><span id="parse_json_extract_path-1022"><a href="#parse_json_extract_path-1022"><span class="linenos">1022</span></a> <span class="k">return</span> <span class="n">expr_type</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="parse_json_extract_path-1023"><a href="#parse_json_extract_path-1023"><span class="linenos">1023</span></a>
+</span><span id="parse_json_extract_path-1024"><a href="#parse_json_extract_path-1024"><span class="linenos">1024</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">name</span>
+</span><span id="parse_json_extract_path-1025"><a href="#parse_json_extract_path-1025"><span class="linenos">1025</span></a> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
+</span><span id="parse_json_extract_path-1026"><a href="#parse_json_extract_path-1026"><span class="linenos">1026</span></a> <span class="n">index</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="parse_json_extract_path-1027"><a href="#parse_json_extract_path-1027"><span class="linenos">1027</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="parse_json_extract_path-1028"><a href="#parse_json_extract_path-1028"><span class="linenos">1028</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">index</span> <span class="k">if</span> <span class="n">zero_based_indexing</span> <span class="k">else</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="parse_json_extract_path-1029"><a href="#parse_json_extract_path-1029"><span class="linenos">1029</span></a> <span class="p">)</span>
+</span><span id="parse_json_extract_path-1030"><a href="#parse_json_extract_path-1030"><span class="linenos">1030</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="parse_json_extract_path-1031"><a href="#parse_json_extract_path-1031"><span class="linenos">1031</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">))</span>
+</span><span id="parse_json_extract_path-1032"><a href="#parse_json_extract_path-1032"><span class="linenos">1032</span></a>
+</span><span id="parse_json_extract_path-1033"><a href="#parse_json_extract_path-1033"><span class="linenos">1033</span></a> <span class="c1"># This is done to avoid failing in the expression validator due to the arg count</span>
+</span><span id="parse_json_extract_path-1034"><a href="#parse_json_extract_path-1034"><span class="linenos">1034</span></a> <span class="k">del</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
+</span><span id="parse_json_extract_path-1035"><a href="#parse_json_extract_path-1035"><span class="linenos">1035</span></a> <span class="k">return</span> <span class="n">expr_type</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">JSONPath</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">segments</span><span class="p">))</span>
+</span><span id="parse_json_extract_path-1036"><a href="#parse_json_extract_path-1036"><span class="linenos">1036</span></a>
+</span><span id="parse_json_extract_path-1037"><a href="#parse_json_extract_path-1037"><span class="linenos">1037</span></a> <span class="k">return</span> <span class="n">_parse_json_extract_path</span>
+</span></pre></div>
+
+
+
+
+ </section>
+ <section id="json_extract_segments">
+ <input id="json_extract_segments-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr function">
+
+ <span class="def">def</span>
+ <span class="name">json_extract_segments</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">quoted_index</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a></span><span class="p">,</span> <span class="n"><a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a></span><span class="p">]],</span> <span class="nb">str</span><span class="p">]</span>:</span></span>
+
+ <label class="view-source-button" for="json_extract_segments-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#json_extract_segments"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="json_extract_segments-1040"><a href="#json_extract_segments-1040"><span class="linenos">1040</span></a><span class="k">def</span> <span class="nf">json_extract_segments</span><span class="p">(</span>
+</span><span id="json_extract_segments-1041"><a href="#json_extract_segments-1041"><span class="linenos">1041</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">quoted_index</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="json_extract_segments-1042"><a href="#json_extract_segments-1042"><span class="linenos">1042</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">JSON_EXTRACT_TYPE</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="json_extract_segments-1043"><a href="#json_extract_segments-1043"><span class="linenos">1043</span></a> <span class="k">def</span> <span class="nf">_json_extract_segments</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">JSON_EXTRACT_TYPE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="json_extract_segments-1044"><a href="#json_extract_segments-1044"><span class="linenos">1044</span></a> <span class="n">path</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="json_extract_segments-1045"><a href="#json_extract_segments-1045"><span class="linenos">1045</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPath</span><span class="p">):</span>
+</span><span id="json_extract_segments-1046"><a href="#json_extract_segments-1046"><span class="linenos">1046</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="json_extract_segments-1047"><a href="#json_extract_segments-1047"><span class="linenos">1047</span></a>
+</span><span id="json_extract_segments-1048"><a href="#json_extract_segments-1048"><span class="linenos">1048</span></a> <span class="n">segments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="json_extract_segments-1049"><a href="#json_extract_segments-1049"><span class="linenos">1049</span></a> <span class="k">for</span> <span class="n">segment</span> <span class="ow">in</span> <span class="n">path</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="json_extract_segments-1050"><a href="#json_extract_segments-1050"><span class="linenos">1050</span></a> <span class="n">path</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">segment</span><span class="p">)</span>
+</span><span id="json_extract_segments-1051"><a href="#json_extract_segments-1051"><span class="linenos">1051</span></a> <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
+</span><span id="json_extract_segments-1052"><a href="#json_extract_segments-1052"><span class="linenos">1052</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">segment</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="json_extract_segments-1053"><a href="#json_extract_segments-1053"><span class="linenos">1053</span></a> <span class="n">quoted_index</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">segment</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">)</span>
+</span><span id="json_extract_segments-1054"><a href="#json_extract_segments-1054"><span class="linenos">1054</span></a> <span class="p">):</span>
+</span><span id="json_extract_segments-1055"><a href="#json_extract_segments-1055"><span class="linenos">1055</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="json_extract_segments-1056"><a href="#json_extract_segments-1056"><span class="linenos">1056</span></a>
+</span><span id="json_extract_segments-1057"><a href="#json_extract_segments-1057"><span class="linenos">1057</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+</span><span id="json_extract_segments-1058"><a href="#json_extract_segments-1058"><span class="linenos">1058</span></a>
+</span><span id="json_extract_segments-1059"><a href="#json_extract_segments-1059"><span class="linenos">1059</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">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">segments</span><span class="p">)</span>
+</span><span id="json_extract_segments-1060"><a href="#json_extract_segments-1060"><span class="linenos">1060</span></a>
+</span><span id="json_extract_segments-1061"><a href="#json_extract_segments-1061"><span class="linenos">1061</span></a> <span class="k">return</span> <span class="n">_json_extract_segments</span>
</span></pre></div>
</section>
- <section id="json_path_segments">
- <input id="json_path_segments-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <section id="json_path_key_only_name">
+ <input id="json_path_key_only_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
- <span class="name">json_path_segments</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#JSONPath">sqlglot.expressions.JSONPath</a></span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
+ <span class="name">json_path_key_only_name</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
- <label class="view-source-button" for="json_path_segments-view-source"><span>View Source</span></label>
+ <label class="view-source-button" for="json_path_key_only_name-view-source"><span>View Source</span></label>
</div>
- <a class="headerlink" href="#json_path_segments"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="json_path_segments-1046"><a href="#json_path_segments-1046"><span class="linenos">1046</span></a><span class="k">def</span> <span class="nf">json_path_segments</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="json_path_segments-1047"><a href="#json_path_segments-1047"><span class="linenos">1047</span></a> <span class="n">segments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="json_path_segments-1048"><a href="#json_path_segments-1048"><span class="linenos">1048</span></a> <span class="k">for</span> <span class="n">segment</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="json_path_segments-1049"><a href="#json_path_segments-1049"><span class="linenos">1049</span></a> <span class="n">path</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">segment</span><span class="p">)</span>
-</span><span id="json_path_segments-1050"><a href="#json_path_segments-1050"><span class="linenos">1050</span></a> <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
-</span><span id="json_path_segments-1051"><a href="#json_path_segments-1051"><span class="linenos">1051</span></a> <span class="n">segments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="json_path_segments-1052"><a href="#json_path_segments-1052"><span class="linenos">1052</span></a>
-</span><span id="json_path_segments-1053"><a href="#json_path_segments-1053"><span class="linenos">1053</span></a> <span class="k">return</span> <span class="n">segments</span>
+ <a class="headerlink" href="#json_path_key_only_name"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="json_path_key_only_name-1064"><a href="#json_path_key_only_name-1064"><span class="linenos">1064</span></a><span class="k">def</span> <span class="nf">json_path_key_only_name</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="json_path_key_only_name-1065"><a href="#json_path_key_only_name-1065"><span class="linenos">1065</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">):</span>
+</span><span id="json_path_key_only_name-1066"><a href="#json_path_key_only_name-1066"><span class="linenos">1066</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported wildcard in JSONPathKey expression&quot;</span><span class="p">)</span>
+</span><span id="json_path_key_only_name-1067"><a href="#json_path_key_only_name-1067"><span class="linenos">1067</span></a>
+</span><span id="json_path_key_only_name-1068"><a href="#json_path_key_only_name-1068"><span class="linenos">1068</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/doris.html b/docs/sqlglot/dialects/doris.html
index e71fd1c..b8dc31f 100644
--- a/docs/sqlglot/dialects/doris.html
+++ b/docs/sqlglot/dialects/doris.html
@@ -714,7 +714,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Doris.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Doris.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Doris.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -1079,6 +1079,7 @@ Default: True</li>
<dd id="Doris.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Doris.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Doris.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Doris.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Doris.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
<dd id="Doris.Generator.SUPPORTED_JSON_PATH_PARTS" class="variable"><a href="../generator.html#Generator.SUPPORTED_JSON_PATH_PARTS">SUPPORTED_JSON_PATH_PARTS</a></dd>
<dd id="Doris.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/drill.html b/docs/sqlglot/dialects/drill.html
index 483757e..e65e43c 100644
--- a/docs/sqlglot/dialects/drill.html
+++ b/docs/sqlglot/dialects/drill.html
@@ -1018,6 +1018,8 @@ True means <code>a / b</code> is integer division if both <code>a</code> and <co
<dd id="Drill.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Drill.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Drill.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Drill.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Drill.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Drill.Tokenizer.KEYWORDS" class="variable"><a href="../tokens.html#Tokenizer.KEYWORDS">KEYWORDS</a></dd>
<dd id="Drill.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Drill.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
@@ -1120,7 +1122,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Drill.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Drill.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Drill.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -1573,6 +1575,7 @@ Default: True</li>
<dd id="Drill.Generator.SUPPORTS_SELECT_INTO" class="variable"><a href="../generator.html#Generator.SUPPORTS_SELECT_INTO">SUPPORTS_SELECT_INTO</a></dd>
<dd id="Drill.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Drill.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Drill.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Drill.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Drill.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Drill.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
diff --git a/docs/sqlglot/dialects/duckdb.html b/docs/sqlglot/dialects/duckdb.html
index 2a9131e..3df9c71 100644
--- a/docs/sqlglot/dialects/duckdb.html
+++ b/docs/sqlglot/dialects/duckdb.html
@@ -142,6 +142,9 @@
<a class="variable" href="#DuckDB.Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a>
</li>
<li>
+ <a class="variable" href="#DuckDB.Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a>
+ </li>
+ <li>
<a class="variable" href="#DuckDB.Generator.TRANSFORMS">TRANSFORMS</a>
</li>
<li>
@@ -604,211 +607,212 @@
</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">IGNORE_NULLS_IN_FUNC</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">SUPPORTS_CREATE_TABLE_LIKE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</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><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="n">e</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-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</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="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">else</span> <span class="n">inline_array_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-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="p">),</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">),</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MAX&quot;</span><span class="p">),</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MIN&quot;</span><span class="p">),</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">:</span> <span class="n">_array_sort_sql</span><span class="p">,</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_SUM&quot;</span><span class="p">),</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">),</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</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">CurrentTimestamp</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="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</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">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&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><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="p">),</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRPTIME(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</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 class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsInf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISINF&quot;</span><span class="p">),</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</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-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="p">),</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON&quot;</span><span class="p">),</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_CONT&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_CONT&quot;</span><span class="p">),</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_DISC&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_DISC&quot;</span><span class="p">),</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="c1"># DuckDB doesn&#39;t allow qualified columns inside of PIVOT expressions.</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="c1"># See: https://github.com/duckdb/duckdb/blob/671faf92411182f81dce42ac43de8bfb05d9909e/src/planner/binder/tableref/bind_pivot.cpp#L61-L62</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unqualify_columns</span><span class="p">]),</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</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">RegexpReplace</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-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <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;replacement&quot;</span><span class="p">),</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <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;modifiers&quot;</span><span class="p">),</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="p">),</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">),</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">),</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_sort_array_sql</span><span class="p">,</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">str_to_time_sql</span><span class="p">,</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(STRPTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampDiff</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-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">unit</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><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="p">),</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP))&quot;</span><span class="p">,</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EPOCH&quot;</span><span class="p">),</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">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&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">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</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">TsOrDsDiff</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-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <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">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</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">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS TEXT)&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">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</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">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</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">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="p">}</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">,</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="p">}</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</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><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
-</span><span id="L-458"><a href="#L-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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_S&quot;</span><span class="p">,</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_MS&quot;</span><span class="p">,</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_NS&quot;</span><span class="p">,</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="p">}</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span><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">STAR_MAPPING</span><span class="p">,</span> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">}</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="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</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="c1"># DuckDB doesn&#39;t generally support CREATE TABLE .. properties</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/create_table.html</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">prop</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><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</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><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="p">}</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="c1"># There are a few exceptions (e.g. temporary tables) which are supported or</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="c1"># can be transpiled to DuckDB, so we explicitly override them accordingly</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</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="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="p">)</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">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">timestampfromparts_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">TimestampFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">sec</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;sec&quot;</span><span class="p">]</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-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">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="p">)</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a>
-</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</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><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="n">e</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-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</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="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="k">else</span> <span class="n">inline_array_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-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="p">),</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">),</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MAX&quot;</span><span class="p">),</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MIN&quot;</span><span class="p">),</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">:</span> <span class="n">_array_sort_sql</span><span class="p">,</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_SUM&quot;</span><span class="p">),</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">),</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</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">CurrentTime</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="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</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">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&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><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <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">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRPTIME(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsInf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISINF&quot;</span><span class="p">),</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</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-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="p">),</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON&quot;</span><span class="p">),</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_CONT&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_CONT&quot;</span><span class="p">),</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_DISC&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_DISC&quot;</span><span class="p">),</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="c1"># DuckDB doesn&#39;t allow qualified columns inside of PIVOT expressions.</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="c1"># See: https://github.com/duckdb/duckdb/blob/671faf92411182f81dce42ac43de8bfb05d9909e/src/planner/binder/tableref/bind_pivot.cpp#L61-L62</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unqualify_columns</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">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</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-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <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;replacement&quot;</span><span class="p">),</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <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;modifiers&quot;</span><span class="p">),</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="p">),</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">),</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">),</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_sort_array_sql</span><span class="p">,</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">str_to_time_sql</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(STRPTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampDiff</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-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">unit</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><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="p">),</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP))&quot;</span><span class="p">,</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EPOCH&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">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&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">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</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-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</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">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <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">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</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">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS TEXT)&quot;</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">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</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">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</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">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="p">}</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">,</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="p">}</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</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><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="L-458"><a href="#L-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">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_S&quot;</span><span class="p">,</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_MS&quot;</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_NS&quot;</span><span class="p">,</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="p">}</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span><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">STAR_MAPPING</span><span class="p">,</span> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">}</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="c1"># DuckDB doesn&#39;t generally support CREATE TABLE .. properties</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/create_table.html</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">prop</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><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</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><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="p">}</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="c1"># There are a few exceptions (e.g. temporary tables) which are supported or</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="c1"># can be transpiled to DuckDB, so we explicitly override them accordingly</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="p">)</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">timestampfromparts_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">TimestampFromParts</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">sec</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;sec&quot;</span><span class="p">]</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="p">)</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a>
+</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
</span></pre></div>
@@ -998,211 +1002,212 @@
</span><span id="DuckDB-334"><a href="#DuckDB-334"><span class="linenos">334</span></a> <span class="n">IGNORE_NULLS_IN_FUNC</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="DuckDB-335"><a href="#DuckDB-335"><span class="linenos">335</span></a> <span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="DuckDB-336"><a href="#DuckDB-336"><span class="linenos">336</span></a> <span class="n">SUPPORTS_CREATE_TABLE_LIKE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB-337"><a href="#DuckDB-337"><span class="linenos">337</span></a>
-</span><span id="DuckDB-338"><a href="#DuckDB-338"><span class="linenos">338</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-339"><a href="#DuckDB-339"><span class="linenos">339</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><span id="DuckDB-340"><a href="#DuckDB-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
-</span><span id="DuckDB-341"><a href="#DuckDB-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
-</span><span id="DuckDB-342"><a href="#DuckDB-342"><span class="linenos">342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="n">e</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="DuckDB-343"><a href="#DuckDB-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</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="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="DuckDB-344"><a href="#DuckDB-344"><span class="linenos">344</span></a> <span class="k">else</span> <span class="n">inline_array_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="DuckDB-345"><a href="#DuckDB-345"><span class="linenos">345</span></a> <span class="p">),</span>
-</span><span id="DuckDB-346"><a href="#DuckDB-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-347"><a href="#DuckDB-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MAX&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-348"><a href="#DuckDB-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MIN&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-349"><a href="#DuckDB-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">:</span> <span class="n">_array_sort_sql</span><span class="p">,</span>
-</span><span id="DuckDB-350"><a href="#DuckDB-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_SUM&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-351"><a href="#DuckDB-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-352"><a href="#DuckDB-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
-</span><span id="DuckDB-353"><a href="#DuckDB-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-354"><a href="#DuckDB-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-355"><a href="#DuckDB-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-356"><a href="#DuckDB-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-357"><a href="#DuckDB-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-358"><a href="#DuckDB-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-359"><a href="#DuckDB-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
-</span><span id="DuckDB-360"><a href="#DuckDB-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
-</span><span id="DuckDB-361"><a href="#DuckDB-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB-362"><a href="#DuckDB-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-363"><a href="#DuckDB-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB-364"><a href="#DuckDB-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="DuckDB-365"><a href="#DuckDB-365"><span class="linenos">365</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&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><span id="DuckDB-366"><a href="#DuckDB-366"><span class="linenos">366</span></a> <span class="p">),</span>
-</span><span id="DuckDB-367"><a href="#DuckDB-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="DuckDB-368"><a href="#DuckDB-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB-369"><a href="#DuckDB-369"><span class="linenos">369</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-370"><a href="#DuckDB-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB-371"><a href="#DuckDB-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB-372"><a href="#DuckDB-372"><span class="linenos">372</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRPTIME(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-373"><a href="#DuckDB-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB-374"><a href="#DuckDB-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-375"><a href="#DuckDB-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-376"><a href="#DuckDB-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsInf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISINF&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-377"><a href="#DuckDB-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-378"><a href="#DuckDB-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB-379"><a href="#DuckDB-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB-380"><a href="#DuckDB-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
-</span><span id="DuckDB-381"><a href="#DuckDB-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-382"><a href="#DuckDB-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-383"><a href="#DuckDB-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</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="DuckDB-384"><a href="#DuckDB-384"><span class="linenos">384</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-385"><a href="#DuckDB-385"><span class="linenos">385</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-386"><a href="#DuckDB-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB-387"><a href="#DuckDB-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB-388"><a href="#DuckDB-388"><span class="linenos">388</span></a> <span class="p">),</span>
-</span><span id="DuckDB-389"><a href="#DuckDB-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-390"><a href="#DuckDB-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_CONT&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_CONT&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-391"><a href="#DuckDB-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_DISC&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_DISC&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-392"><a href="#DuckDB-392"><span class="linenos">392</span></a> <span class="c1"># DuckDB doesn&#39;t allow qualified columns inside of PIVOT expressions.</span>
-</span><span id="DuckDB-393"><a href="#DuckDB-393"><span class="linenos">393</span></a> <span class="c1"># See: https://github.com/duckdb/duckdb/blob/671faf92411182f81dce42ac43de8bfb05d9909e/src/planner/binder/tableref/bind_pivot.cpp#L61-L62</span>
-</span><span id="DuckDB-394"><a href="#DuckDB-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unqualify_columns</span><span class="p">]),</span>
-</span><span id="DuckDB-395"><a href="#DuckDB-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB-396"><a href="#DuckDB-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</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="DuckDB-397"><a href="#DuckDB-397"><span class="linenos">397</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-398"><a href="#DuckDB-398"><span class="linenos">398</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="DuckDB-399"><a href="#DuckDB-399"><span class="linenos">399</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="DuckDB-400"><a href="#DuckDB-400"><span class="linenos">400</span></a> <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;replacement&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-401"><a href="#DuckDB-401"><span class="linenos">401</span></a> <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;modifiers&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-402"><a href="#DuckDB-402"><span class="linenos">402</span></a> <span class="p">),</span>
-</span><span id="DuckDB-403"><a href="#DuckDB-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-404"><a href="#DuckDB-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-405"><a href="#DuckDB-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-406"><a href="#DuckDB-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
-</span><span id="DuckDB-407"><a href="#DuckDB-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-408"><a href="#DuckDB-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_sort_array_sql</span><span class="p">,</span>
-</span><span id="DuckDB-409"><a href="#DuckDB-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="DuckDB-410"><a href="#DuckDB-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-411"><a href="#DuckDB-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">str_to_time_sql</span><span class="p">,</span>
-</span><span id="DuckDB-412"><a href="#DuckDB-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB-413"><a href="#DuckDB-413"><span class="linenos">413</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(STRPTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-414"><a href="#DuckDB-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
-</span><span id="DuckDB-415"><a href="#DuckDB-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
-</span><span id="DuckDB-416"><a href="#DuckDB-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampDiff</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="DuckDB-417"><a href="#DuckDB-417"><span class="linenos">417</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">unit</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><span id="DuckDB-418"><a href="#DuckDB-418"><span class="linenos">418</span></a> <span class="p">),</span>
-</span><span id="DuckDB-419"><a href="#DuckDB-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="DuckDB-420"><a href="#DuckDB-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-421"><a href="#DuckDB-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="DuckDB-422"><a href="#DuckDB-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP))&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-423"><a href="#DuckDB-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB-424"><a href="#DuckDB-424"><span class="linenos">424</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-425"><a href="#DuckDB-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EPOCH&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-426"><a href="#DuckDB-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB-427"><a href="#DuckDB-427"><span class="linenos">427</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-428"><a href="#DuckDB-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
-</span><span id="DuckDB-429"><a href="#DuckDB-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</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="DuckDB-430"><a href="#DuckDB-430"><span class="linenos">430</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-431"><a href="#DuckDB-431"><span class="linenos">431</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-432"><a href="#DuckDB-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-433"><a href="#DuckDB-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-434"><a href="#DuckDB-434"><span class="linenos">434</span></a> <span class="p">),</span>
-</span><span id="DuckDB-435"><a href="#DuckDB-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB-436"><a href="#DuckDB-436"><span class="linenos">436</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-437"><a href="#DuckDB-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
-</span><span id="DuckDB-438"><a href="#DuckDB-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS TEXT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-439"><a href="#DuckDB-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-440"><a href="#DuckDB-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-441"><a href="#DuckDB-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="DuckDB-442"><a href="#DuckDB-442"><span class="linenos">442</span></a> <span class="p">}</span>
-</span><span id="DuckDB-443"><a href="#DuckDB-443"><span class="linenos">443</span></a>
-</span><span id="DuckDB-444"><a href="#DuckDB-444"><span class="linenos">444</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-445"><a href="#DuckDB-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
-</span><span id="DuckDB-446"><a href="#DuckDB-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
-</span><span id="DuckDB-447"><a href="#DuckDB-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
-</span><span id="DuckDB-448"><a href="#DuckDB-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">,</span>
-</span><span id="DuckDB-449"><a href="#DuckDB-449"><span class="linenos">449</span></a> <span class="p">}</span>
-</span><span id="DuckDB-450"><a href="#DuckDB-450"><span class="linenos">450</span></a>
-</span><span id="DuckDB-451"><a href="#DuckDB-451"><span class="linenos">451</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-452"><a href="#DuckDB-452"><span class="linenos">452</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><span id="DuckDB-453"><a href="#DuckDB-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-454"><a href="#DuckDB-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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-455"><a href="#DuckDB-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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-456"><a href="#DuckDB-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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-457"><a href="#DuckDB-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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-458"><a href="#DuckDB-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">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-459"><a href="#DuckDB-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-460"><a href="#DuckDB-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-461"><a href="#DuckDB-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_S&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-462"><a href="#DuckDB-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_MS&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-463"><a href="#DuckDB-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_NS&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-464"><a href="#DuckDB-464"><span class="linenos">464</span></a> <span class="p">}</span>
-</span><span id="DuckDB-465"><a href="#DuckDB-465"><span class="linenos">465</span></a>
-</span><span id="DuckDB-466"><a href="#DuckDB-466"><span class="linenos">466</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span><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">STAR_MAPPING</span><span class="p">,</span> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">}</span>
-</span><span id="DuckDB-467"><a href="#DuckDB-467"><span class="linenos">467</span></a>
-</span><span id="DuckDB-468"><a href="#DuckDB-468"><span class="linenos">468</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
-</span><span id="DuckDB-469"><a href="#DuckDB-469"><span class="linenos">469</span></a>
-</span><span id="DuckDB-470"><a href="#DuckDB-470"><span class="linenos">470</span></a> <span class="c1"># DuckDB doesn&#39;t generally support CREATE TABLE .. properties</span>
-</span><span id="DuckDB-471"><a href="#DuckDB-471"><span class="linenos">471</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/create_table.html</span>
-</span><span id="DuckDB-472"><a href="#DuckDB-472"><span class="linenos">472</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-473"><a href="#DuckDB-473"><span class="linenos">473</span></a> <span class="n">prop</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><span id="DuckDB-474"><a href="#DuckDB-474"><span class="linenos">474</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</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><span id="DuckDB-475"><a href="#DuckDB-475"><span class="linenos">475</span></a> <span class="p">}</span>
-</span><span id="DuckDB-476"><a href="#DuckDB-476"><span class="linenos">476</span></a>
-</span><span id="DuckDB-477"><a href="#DuckDB-477"><span class="linenos">477</span></a> <span class="c1"># There are a few exceptions (e.g. temporary tables) which are supported or</span>
-</span><span id="DuckDB-478"><a href="#DuckDB-478"><span class="linenos">478</span></a> <span class="c1"># can be transpiled to DuckDB, so we explicitly override them accordingly</span>
-</span><span id="DuckDB-479"><a href="#DuckDB-479"><span class="linenos">479</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span>
-</span><span id="DuckDB-480"><a href="#DuckDB-480"><span class="linenos">480</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span>
-</span><span id="DuckDB-481"><a href="#DuckDB-481"><span class="linenos">481</span></a>
-</span><span id="DuckDB-482"><a href="#DuckDB-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-483"><a href="#DuckDB-483"><span class="linenos">483</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-484"><a href="#DuckDB-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB-485"><a href="#DuckDB-485"><span class="linenos">485</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="DuckDB-486"><a href="#DuckDB-486"><span class="linenos">486</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="DuckDB-487"><a href="#DuckDB-487"><span class="linenos">487</span></a> <span class="p">)</span>
-</span><span id="DuckDB-488"><a href="#DuckDB-488"><span class="linenos">488</span></a>
-</span><span id="DuckDB-489"><a href="#DuckDB-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB-490"><a href="#DuckDB-490"><span class="linenos">490</span></a>
-</span><span id="DuckDB-491"><a href="#DuckDB-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">timestampfromparts_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">TimestampFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-492"><a href="#DuckDB-492"><span class="linenos">492</span></a> <span class="n">sec</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;sec&quot;</span><span class="p">]</span>
-</span><span id="DuckDB-493"><a href="#DuckDB-493"><span class="linenos">493</span></a>
-</span><span id="DuckDB-494"><a href="#DuckDB-494"><span class="linenos">494</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-495"><a href="#DuckDB-495"><span class="linenos">495</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB-496"><a href="#DuckDB-496"><span class="linenos">496</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
-</span><span id="DuckDB-497"><a href="#DuckDB-497"><span class="linenos">497</span></a>
-</span><span id="DuckDB-498"><a href="#DuckDB-498"><span class="linenos">498</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-499"><a href="#DuckDB-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB-500"><a href="#DuckDB-500"><span class="linenos">500</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="DuckDB-501"><a href="#DuckDB-501"><span class="linenos">501</span></a>
-</span><span id="DuckDB-502"><a href="#DuckDB-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
-</span><span id="DuckDB-503"><a href="#DuckDB-503"><span class="linenos">503</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
-</span><span id="DuckDB-504"><a href="#DuckDB-504"><span class="linenos">504</span></a>
-</span><span id="DuckDB-505"><a href="#DuckDB-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB-506"><a href="#DuckDB-506"><span class="linenos">506</span></a>
-</span><span id="DuckDB-507"><a href="#DuckDB-507"><span class="linenos">507</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB-508"><a href="#DuckDB-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB-509"><a href="#DuckDB-509"><span class="linenos">509</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="DuckDB-510"><a href="#DuckDB-510"><span class="linenos">510</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="DuckDB-511"><a href="#DuckDB-511"><span class="linenos">511</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DuckDB-512"><a href="#DuckDB-512"><span class="linenos">512</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-513"><a href="#DuckDB-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="DuckDB-514"><a href="#DuckDB-514"><span class="linenos">514</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="DuckDB-515"><a href="#DuckDB-515"><span class="linenos">515</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="DuckDB-516"><a href="#DuckDB-516"><span class="linenos">516</span></a>
-</span><span id="DuckDB-517"><a href="#DuckDB-517"><span class="linenos">517</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB-518"><a href="#DuckDB-518"><span class="linenos">518</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="DuckDB-519"><a href="#DuckDB-519"><span class="linenos">519</span></a> <span class="p">)</span>
-</span><span id="DuckDB-520"><a href="#DuckDB-520"><span class="linenos">520</span></a>
-</span><span id="DuckDB-521"><a href="#DuckDB-521"><span class="linenos">521</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-522"><a href="#DuckDB-522"><span class="linenos">522</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DuckDB-523"><a href="#DuckDB-523"><span class="linenos">523</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="DuckDB-524"><a href="#DuckDB-524"><span class="linenos">524</span></a>
-</span><span id="DuckDB-525"><a href="#DuckDB-525"><span class="linenos">525</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="DuckDB-526"><a href="#DuckDB-526"><span class="linenos">526</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB-527"><a href="#DuckDB-527"><span class="linenos">527</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="DuckDB-528"><a href="#DuckDB-528"><span class="linenos">528</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
-</span><span id="DuckDB-529"><a href="#DuckDB-529"><span class="linenos">529</span></a>
-</span><span id="DuckDB-530"><a href="#DuckDB-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB-531"><a href="#DuckDB-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB-532"><a href="#DuckDB-532"><span class="linenos">532</span></a>
-</span><span id="DuckDB-533"><a href="#DuckDB-533"><span class="linenos">533</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB-534"><a href="#DuckDB-534"><span class="linenos">534</span></a>
-</span><span id="DuckDB-535"><a href="#DuckDB-535"><span class="linenos">535</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-536"><a href="#DuckDB-536"><span class="linenos">536</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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="DuckDB-537"><a href="#DuckDB-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-538"><a href="#DuckDB-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
-</span><span id="DuckDB-539"><a href="#DuckDB-539"><span class="linenos">539</span></a>
-</span><span id="DuckDB-540"><a href="#DuckDB-540"><span class="linenos">540</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-541"><a href="#DuckDB-541"><span class="linenos">541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
+</span><span id="DuckDB-337"><a href="#DuckDB-337"><span class="linenos">337</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-338"><a href="#DuckDB-338"><span class="linenos">338</span></a>
+</span><span id="DuckDB-339"><a href="#DuckDB-339"><span class="linenos">339</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-340"><a href="#DuckDB-340"><span class="linenos">340</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><span id="DuckDB-341"><a href="#DuckDB-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="DuckDB-342"><a href="#DuckDB-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
+</span><span id="DuckDB-343"><a href="#DuckDB-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="n">e</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="DuckDB-344"><a href="#DuckDB-344"><span class="linenos">344</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</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="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="DuckDB-345"><a href="#DuckDB-345"><span class="linenos">345</span></a> <span class="k">else</span> <span class="n">inline_array_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="DuckDB-346"><a href="#DuckDB-346"><span class="linenos">346</span></a> <span class="p">),</span>
+</span><span id="DuckDB-347"><a href="#DuckDB-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-348"><a href="#DuckDB-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MAX&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-349"><a href="#DuckDB-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MIN&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-350"><a href="#DuckDB-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">:</span> <span class="n">_array_sort_sql</span><span class="p">,</span>
+</span><span id="DuckDB-351"><a href="#DuckDB-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_SUM&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-352"><a href="#DuckDB-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-353"><a href="#DuckDB-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
+</span><span id="DuckDB-354"><a href="#DuckDB-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-355"><a href="#DuckDB-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-356"><a href="#DuckDB-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-357"><a href="#DuckDB-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-358"><a href="#DuckDB-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-359"><a href="#DuckDB-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-360"><a href="#DuckDB-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="DuckDB-361"><a href="#DuckDB-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
+</span><span id="DuckDB-362"><a href="#DuckDB-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB-363"><a href="#DuckDB-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-364"><a href="#DuckDB-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB-365"><a href="#DuckDB-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="DuckDB-366"><a href="#DuckDB-366"><span class="linenos">366</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&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><span id="DuckDB-367"><a href="#DuckDB-367"><span class="linenos">367</span></a> <span class="p">),</span>
+</span><span id="DuckDB-368"><a href="#DuckDB-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="DuckDB-369"><a href="#DuckDB-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB-370"><a href="#DuckDB-370"><span class="linenos">370</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-371"><a href="#DuckDB-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB-372"><a href="#DuckDB-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB-373"><a href="#DuckDB-373"><span class="linenos">373</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRPTIME(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-374"><a href="#DuckDB-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB-375"><a href="#DuckDB-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-376"><a href="#DuckDB-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-377"><a href="#DuckDB-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsInf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISINF&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-378"><a href="#DuckDB-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-379"><a href="#DuckDB-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB-380"><a href="#DuckDB-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB-381"><a href="#DuckDB-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
+</span><span id="DuckDB-382"><a href="#DuckDB-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-383"><a href="#DuckDB-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-384"><a href="#DuckDB-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</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="DuckDB-385"><a href="#DuckDB-385"><span class="linenos">385</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-386"><a href="#DuckDB-386"><span class="linenos">386</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-387"><a href="#DuckDB-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB-388"><a href="#DuckDB-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB-389"><a href="#DuckDB-389"><span class="linenos">389</span></a> <span class="p">),</span>
+</span><span id="DuckDB-390"><a href="#DuckDB-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-391"><a href="#DuckDB-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_CONT&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_CONT&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-392"><a href="#DuckDB-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_DISC&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_DISC&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-393"><a href="#DuckDB-393"><span class="linenos">393</span></a> <span class="c1"># DuckDB doesn&#39;t allow qualified columns inside of PIVOT expressions.</span>
+</span><span id="DuckDB-394"><a href="#DuckDB-394"><span class="linenos">394</span></a> <span class="c1"># See: https://github.com/duckdb/duckdb/blob/671faf92411182f81dce42ac43de8bfb05d9909e/src/planner/binder/tableref/bind_pivot.cpp#L61-L62</span>
+</span><span id="DuckDB-395"><a href="#DuckDB-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unqualify_columns</span><span class="p">]),</span>
+</span><span id="DuckDB-396"><a href="#DuckDB-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB-397"><a href="#DuckDB-397"><span class="linenos">397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</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="DuckDB-398"><a href="#DuckDB-398"><span class="linenos">398</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-399"><a href="#DuckDB-399"><span class="linenos">399</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="DuckDB-400"><a href="#DuckDB-400"><span class="linenos">400</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="DuckDB-401"><a href="#DuckDB-401"><span class="linenos">401</span></a> <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;replacement&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-402"><a href="#DuckDB-402"><span class="linenos">402</span></a> <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;modifiers&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-403"><a href="#DuckDB-403"><span class="linenos">403</span></a> <span class="p">),</span>
+</span><span id="DuckDB-404"><a href="#DuckDB-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-405"><a href="#DuckDB-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-406"><a href="#DuckDB-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-407"><a href="#DuckDB-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="DuckDB-408"><a href="#DuckDB-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-409"><a href="#DuckDB-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_sort_array_sql</span><span class="p">,</span>
+</span><span id="DuckDB-410"><a href="#DuckDB-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="DuckDB-411"><a href="#DuckDB-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-412"><a href="#DuckDB-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">str_to_time_sql</span><span class="p">,</span>
+</span><span id="DuckDB-413"><a href="#DuckDB-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB-414"><a href="#DuckDB-414"><span class="linenos">414</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(STRPTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-415"><a href="#DuckDB-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
+</span><span id="DuckDB-416"><a href="#DuckDB-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
+</span><span id="DuckDB-417"><a href="#DuckDB-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampDiff</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="DuckDB-418"><a href="#DuckDB-418"><span class="linenos">418</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">unit</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><span id="DuckDB-419"><a href="#DuckDB-419"><span class="linenos">419</span></a> <span class="p">),</span>
+</span><span id="DuckDB-420"><a href="#DuckDB-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="DuckDB-421"><a href="#DuckDB-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-422"><a href="#DuckDB-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="DuckDB-423"><a href="#DuckDB-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP))&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-424"><a href="#DuckDB-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB-425"><a href="#DuckDB-425"><span class="linenos">425</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-426"><a href="#DuckDB-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EPOCH&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-427"><a href="#DuckDB-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB-428"><a href="#DuckDB-428"><span class="linenos">428</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-429"><a href="#DuckDB-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
+</span><span id="DuckDB-430"><a href="#DuckDB-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</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="DuckDB-431"><a href="#DuckDB-431"><span class="linenos">431</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-432"><a href="#DuckDB-432"><span class="linenos">432</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-433"><a href="#DuckDB-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-434"><a href="#DuckDB-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-435"><a href="#DuckDB-435"><span class="linenos">435</span></a> <span class="p">),</span>
+</span><span id="DuckDB-436"><a href="#DuckDB-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB-437"><a href="#DuckDB-437"><span class="linenos">437</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-438"><a href="#DuckDB-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
+</span><span id="DuckDB-439"><a href="#DuckDB-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS TEXT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-440"><a href="#DuckDB-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-441"><a href="#DuckDB-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-442"><a href="#DuckDB-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="DuckDB-443"><a href="#DuckDB-443"><span class="linenos">443</span></a> <span class="p">}</span>
+</span><span id="DuckDB-444"><a href="#DuckDB-444"><span class="linenos">444</span></a>
+</span><span id="DuckDB-445"><a href="#DuckDB-445"><span class="linenos">445</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-446"><a href="#DuckDB-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="DuckDB-447"><a href="#DuckDB-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="DuckDB-448"><a href="#DuckDB-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="DuckDB-449"><a href="#DuckDB-449"><span class="linenos">449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">,</span>
+</span><span id="DuckDB-450"><a href="#DuckDB-450"><span class="linenos">450</span></a> <span class="p">}</span>
+</span><span id="DuckDB-451"><a href="#DuckDB-451"><span class="linenos">451</span></a>
+</span><span id="DuckDB-452"><a href="#DuckDB-452"><span class="linenos">452</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-453"><a href="#DuckDB-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><span id="DuckDB-454"><a href="#DuckDB-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-455"><a href="#DuckDB-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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-456"><a href="#DuckDB-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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-457"><a href="#DuckDB-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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-458"><a href="#DuckDB-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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-459"><a href="#DuckDB-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-460"><a href="#DuckDB-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-461"><a href="#DuckDB-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-462"><a href="#DuckDB-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_S&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-463"><a href="#DuckDB-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_MS&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-464"><a href="#DuckDB-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_NS&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-465"><a href="#DuckDB-465"><span class="linenos">465</span></a> <span class="p">}</span>
+</span><span id="DuckDB-466"><a href="#DuckDB-466"><span class="linenos">466</span></a>
+</span><span id="DuckDB-467"><a href="#DuckDB-467"><span class="linenos">467</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span><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">STAR_MAPPING</span><span class="p">,</span> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">}</span>
+</span><span id="DuckDB-468"><a href="#DuckDB-468"><span class="linenos">468</span></a>
+</span><span id="DuckDB-469"><a href="#DuckDB-469"><span class="linenos">469</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
+</span><span id="DuckDB-470"><a href="#DuckDB-470"><span class="linenos">470</span></a>
+</span><span id="DuckDB-471"><a href="#DuckDB-471"><span class="linenos">471</span></a> <span class="c1"># DuckDB doesn&#39;t generally support CREATE TABLE .. properties</span>
+</span><span id="DuckDB-472"><a href="#DuckDB-472"><span class="linenos">472</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/create_table.html</span>
+</span><span id="DuckDB-473"><a href="#DuckDB-473"><span class="linenos">473</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-474"><a href="#DuckDB-474"><span class="linenos">474</span></a> <span class="n">prop</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><span id="DuckDB-475"><a href="#DuckDB-475"><span class="linenos">475</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</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><span id="DuckDB-476"><a href="#DuckDB-476"><span class="linenos">476</span></a> <span class="p">}</span>
+</span><span id="DuckDB-477"><a href="#DuckDB-477"><span class="linenos">477</span></a>
+</span><span id="DuckDB-478"><a href="#DuckDB-478"><span class="linenos">478</span></a> <span class="c1"># There are a few exceptions (e.g. temporary tables) which are supported or</span>
+</span><span id="DuckDB-479"><a href="#DuckDB-479"><span class="linenos">479</span></a> <span class="c1"># can be transpiled to DuckDB, so we explicitly override them accordingly</span>
+</span><span id="DuckDB-480"><a href="#DuckDB-480"><span class="linenos">480</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span>
+</span><span id="DuckDB-481"><a href="#DuckDB-481"><span class="linenos">481</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span>
+</span><span id="DuckDB-482"><a href="#DuckDB-482"><span class="linenos">482</span></a>
+</span><span id="DuckDB-483"><a href="#DuckDB-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-484"><a href="#DuckDB-484"><span class="linenos">484</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-485"><a href="#DuckDB-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB-486"><a href="#DuckDB-486"><span class="linenos">486</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="DuckDB-487"><a href="#DuckDB-487"><span class="linenos">487</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="DuckDB-488"><a href="#DuckDB-488"><span class="linenos">488</span></a> <span class="p">)</span>
+</span><span id="DuckDB-489"><a href="#DuckDB-489"><span class="linenos">489</span></a>
+</span><span id="DuckDB-490"><a href="#DuckDB-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-491"><a href="#DuckDB-491"><span class="linenos">491</span></a>
+</span><span id="DuckDB-492"><a href="#DuckDB-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">timestampfromparts_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">TimestampFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-493"><a href="#DuckDB-493"><span class="linenos">493</span></a> <span class="n">sec</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;sec&quot;</span><span class="p">]</span>
+</span><span id="DuckDB-494"><a href="#DuckDB-494"><span class="linenos">494</span></a>
+</span><span id="DuckDB-495"><a href="#DuckDB-495"><span class="linenos">495</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-496"><a href="#DuckDB-496"><span class="linenos">496</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB-497"><a href="#DuckDB-497"><span class="linenos">497</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
+</span><span id="DuckDB-498"><a href="#DuckDB-498"><span class="linenos">498</span></a>
+</span><span id="DuckDB-499"><a href="#DuckDB-499"><span class="linenos">499</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-500"><a href="#DuckDB-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB-501"><a href="#DuckDB-501"><span class="linenos">501</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="DuckDB-502"><a href="#DuckDB-502"><span class="linenos">502</span></a>
+</span><span id="DuckDB-503"><a href="#DuckDB-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
+</span><span id="DuckDB-504"><a href="#DuckDB-504"><span class="linenos">504</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
+</span><span id="DuckDB-505"><a href="#DuckDB-505"><span class="linenos">505</span></a>
+</span><span id="DuckDB-506"><a href="#DuckDB-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-507"><a href="#DuckDB-507"><span class="linenos">507</span></a>
+</span><span id="DuckDB-508"><a href="#DuckDB-508"><span class="linenos">508</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB-509"><a href="#DuckDB-509"><span class="linenos">509</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB-510"><a href="#DuckDB-510"><span class="linenos">510</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="DuckDB-511"><a href="#DuckDB-511"><span class="linenos">511</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
+</span><span id="DuckDB-512"><a href="#DuckDB-512"><span class="linenos">512</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DuckDB-513"><a href="#DuckDB-513"><span class="linenos">513</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-514"><a href="#DuckDB-514"><span class="linenos">514</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="DuckDB-515"><a href="#DuckDB-515"><span class="linenos">515</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="DuckDB-516"><a href="#DuckDB-516"><span class="linenos">516</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="DuckDB-517"><a href="#DuckDB-517"><span class="linenos">517</span></a>
+</span><span id="DuckDB-518"><a href="#DuckDB-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB-519"><a href="#DuckDB-519"><span class="linenos">519</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
+</span><span id="DuckDB-520"><a href="#DuckDB-520"><span class="linenos">520</span></a> <span class="p">)</span>
+</span><span id="DuckDB-521"><a href="#DuckDB-521"><span class="linenos">521</span></a>
+</span><span id="DuckDB-522"><a href="#DuckDB-522"><span class="linenos">522</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-523"><a href="#DuckDB-523"><span class="linenos">523</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DuckDB-524"><a href="#DuckDB-524"><span class="linenos">524</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="DuckDB-525"><a href="#DuckDB-525"><span class="linenos">525</span></a>
+</span><span id="DuckDB-526"><a href="#DuckDB-526"><span class="linenos">526</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="DuckDB-527"><a href="#DuckDB-527"><span class="linenos">527</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB-528"><a href="#DuckDB-528"><span class="linenos">528</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="DuckDB-529"><a href="#DuckDB-529"><span class="linenos">529</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB-530"><a href="#DuckDB-530"><span class="linenos">530</span></a>
+</span><span id="DuckDB-531"><a href="#DuckDB-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB-532"><a href="#DuckDB-532"><span class="linenos">532</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB-533"><a href="#DuckDB-533"><span class="linenos">533</span></a>
+</span><span id="DuckDB-534"><a href="#DuckDB-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-535"><a href="#DuckDB-535"><span class="linenos">535</span></a>
+</span><span id="DuckDB-536"><a href="#DuckDB-536"><span class="linenos">536</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-537"><a href="#DuckDB-537"><span class="linenos">537</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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="DuckDB-538"><a href="#DuckDB-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-539"><a href="#DuckDB-539"><span class="linenos">539</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+</span><span id="DuckDB-540"><a href="#DuckDB-540"><span class="linenos">540</span></a>
+</span><span id="DuckDB-541"><a href="#DuckDB-541"><span class="linenos">541</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-542"><a href="#DuckDB-542"><span class="linenos">542</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
</span></pre></div>
@@ -1691,6 +1696,8 @@ Possible values: <code>"nulls_are_small"</code>, <code>"nulls_are_large"</code>,
<dd id="DuckDB.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="DuckDB.Tokenizer.STRING_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a></dd>
<dd id="DuckDB.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="DuckDB.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="DuckDB.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="DuckDB.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="DuckDB.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="DuckDB.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -1888,7 +1895,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="DuckDB.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -2064,211 +2071,212 @@ Default: 3</li>
</span><span id="DuckDB.Generator-334"><a href="#DuckDB.Generator-334"><span class="linenos">334</span></a> <span class="n">IGNORE_NULLS_IN_FUNC</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="DuckDB.Generator-335"><a href="#DuckDB.Generator-335"><span class="linenos">335</span></a> <span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="DuckDB.Generator-336"><a href="#DuckDB.Generator-336"><span class="linenos">336</span></a> <span class="n">SUPPORTS_CREATE_TABLE_LIKE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB.Generator-337"><a href="#DuckDB.Generator-337"><span class="linenos">337</span></a>
-</span><span id="DuckDB.Generator-338"><a href="#DuckDB.Generator-338"><span class="linenos">338</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-339"><a href="#DuckDB.Generator-339"><span class="linenos">339</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><span id="DuckDB.Generator-340"><a href="#DuckDB.Generator-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-341"><a href="#DuckDB.Generator-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
-</span><span id="DuckDB.Generator-342"><a href="#DuckDB.Generator-342"><span class="linenos">342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="n">e</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="DuckDB.Generator-343"><a href="#DuckDB.Generator-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</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="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-344"><a href="#DuckDB.Generator-344"><span class="linenos">344</span></a> <span class="k">else</span> <span class="n">inline_array_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="DuckDB.Generator-345"><a href="#DuckDB.Generator-345"><span class="linenos">345</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-346"><a href="#DuckDB.Generator-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-347"><a href="#DuckDB.Generator-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MAX&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-348"><a href="#DuckDB.Generator-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MIN&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-349"><a href="#DuckDB.Generator-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">:</span> <span class="n">_array_sort_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-350"><a href="#DuckDB.Generator-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_SUM&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-351"><a href="#DuckDB.Generator-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-352"><a href="#DuckDB.Generator-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-353"><a href="#DuckDB.Generator-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-354"><a href="#DuckDB.Generator-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-355"><a href="#DuckDB.Generator-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-356"><a href="#DuckDB.Generator-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-357"><a href="#DuckDB.Generator-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-358"><a href="#DuckDB.Generator-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-359"><a href="#DuckDB.Generator-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-360"><a href="#DuckDB.Generator-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-361"><a href="#DuckDB.Generator-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-362"><a href="#DuckDB.Generator-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-363"><a href="#DuckDB.Generator-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-364"><a href="#DuckDB.Generator-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="DuckDB.Generator-365"><a href="#DuckDB.Generator-365"><span class="linenos">365</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&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><span id="DuckDB.Generator-366"><a href="#DuckDB.Generator-366"><span class="linenos">366</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-367"><a href="#DuckDB.Generator-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-368"><a href="#DuckDB.Generator-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-369"><a href="#DuckDB.Generator-369"><span class="linenos">369</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-370"><a href="#DuckDB.Generator-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-371"><a href="#DuckDB.Generator-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-372"><a href="#DuckDB.Generator-372"><span class="linenos">372</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRPTIME(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-373"><a href="#DuckDB.Generator-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-374"><a href="#DuckDB.Generator-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-375"><a href="#DuckDB.Generator-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-376"><a href="#DuckDB.Generator-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsInf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISINF&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-377"><a href="#DuckDB.Generator-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-378"><a href="#DuckDB.Generator-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-379"><a href="#DuckDB.Generator-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-380"><a href="#DuckDB.Generator-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-381"><a href="#DuckDB.Generator-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-382"><a href="#DuckDB.Generator-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-383"><a href="#DuckDB.Generator-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</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="DuckDB.Generator-384"><a href="#DuckDB.Generator-384"><span class="linenos">384</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-385"><a href="#DuckDB.Generator-385"><span class="linenos">385</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-386"><a href="#DuckDB.Generator-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-387"><a href="#DuckDB.Generator-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-388"><a href="#DuckDB.Generator-388"><span class="linenos">388</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-389"><a href="#DuckDB.Generator-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-390"><a href="#DuckDB.Generator-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_CONT&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_CONT&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-391"><a href="#DuckDB.Generator-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_DISC&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_DISC&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-392"><a href="#DuckDB.Generator-392"><span class="linenos">392</span></a> <span class="c1"># DuckDB doesn&#39;t allow qualified columns inside of PIVOT expressions.</span>
-</span><span id="DuckDB.Generator-393"><a href="#DuckDB.Generator-393"><span class="linenos">393</span></a> <span class="c1"># See: https://github.com/duckdb/duckdb/blob/671faf92411182f81dce42ac43de8bfb05d9909e/src/planner/binder/tableref/bind_pivot.cpp#L61-L62</span>
-</span><span id="DuckDB.Generator-394"><a href="#DuckDB.Generator-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unqualify_columns</span><span class="p">]),</span>
-</span><span id="DuckDB.Generator-395"><a href="#DuckDB.Generator-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-396"><a href="#DuckDB.Generator-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</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="DuckDB.Generator-397"><a href="#DuckDB.Generator-397"><span class="linenos">397</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-398"><a href="#DuckDB.Generator-398"><span class="linenos">398</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-399"><a href="#DuckDB.Generator-399"><span class="linenos">399</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-400"><a href="#DuckDB.Generator-400"><span class="linenos">400</span></a> <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;replacement&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-401"><a href="#DuckDB.Generator-401"><span class="linenos">401</span></a> <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;modifiers&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-402"><a href="#DuckDB.Generator-402"><span class="linenos">402</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-403"><a href="#DuckDB.Generator-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-404"><a href="#DuckDB.Generator-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-405"><a href="#DuckDB.Generator-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-406"><a href="#DuckDB.Generator-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-407"><a href="#DuckDB.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-408"><a href="#DuckDB.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_sort_array_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-409"><a href="#DuckDB.Generator-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-410"><a href="#DuckDB.Generator-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-411"><a href="#DuckDB.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">str_to_time_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-412"><a href="#DuckDB.Generator-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-413"><a href="#DuckDB.Generator-413"><span class="linenos">413</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(STRPTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-414"><a href="#DuckDB.Generator-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-415"><a href="#DuckDB.Generator-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-416"><a href="#DuckDB.Generator-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampDiff</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="DuckDB.Generator-417"><a href="#DuckDB.Generator-417"><span class="linenos">417</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">unit</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><span id="DuckDB.Generator-418"><a href="#DuckDB.Generator-418"><span class="linenos">418</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-419"><a href="#DuckDB.Generator-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-420"><a href="#DuckDB.Generator-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-421"><a href="#DuckDB.Generator-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-422"><a href="#DuckDB.Generator-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP))&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-423"><a href="#DuckDB.Generator-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-424"><a href="#DuckDB.Generator-424"><span class="linenos">424</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-425"><a href="#DuckDB.Generator-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EPOCH&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-426"><a href="#DuckDB.Generator-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-427"><a href="#DuckDB.Generator-427"><span class="linenos">427</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-428"><a href="#DuckDB.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-429"><a href="#DuckDB.Generator-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</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="DuckDB.Generator-430"><a href="#DuckDB.Generator-430"><span class="linenos">430</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-431"><a href="#DuckDB.Generator-431"><span class="linenos">431</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-432"><a href="#DuckDB.Generator-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-433"><a href="#DuckDB.Generator-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-434"><a href="#DuckDB.Generator-434"><span class="linenos">434</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-435"><a href="#DuckDB.Generator-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-436"><a href="#DuckDB.Generator-436"><span class="linenos">436</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-437"><a href="#DuckDB.Generator-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-438"><a href="#DuckDB.Generator-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS TEXT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-439"><a href="#DuckDB.Generator-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-440"><a href="#DuckDB.Generator-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-441"><a href="#DuckDB.Generator-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-442"><a href="#DuckDB.Generator-442"><span class="linenos">442</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-443"><a href="#DuckDB.Generator-443"><span class="linenos">443</span></a>
-</span><span id="DuckDB.Generator-444"><a href="#DuckDB.Generator-444"><span class="linenos">444</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-445"><a href="#DuckDB.Generator-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-446"><a href="#DuckDB.Generator-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-447"><a href="#DuckDB.Generator-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-448"><a href="#DuckDB.Generator-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-449"><a href="#DuckDB.Generator-449"><span class="linenos">449</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-450"><a href="#DuckDB.Generator-450"><span class="linenos">450</span></a>
-</span><span id="DuckDB.Generator-451"><a href="#DuckDB.Generator-451"><span class="linenos">451</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-452"><a href="#DuckDB.Generator-452"><span class="linenos">452</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><span id="DuckDB.Generator-453"><a href="#DuckDB.Generator-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-454"><a href="#DuckDB.Generator-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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-455"><a href="#DuckDB.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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-456"><a href="#DuckDB.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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-457"><a href="#DuckDB.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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-458"><a href="#DuckDB.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">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-459"><a href="#DuckDB.Generator-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-460"><a href="#DuckDB.Generator-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-461"><a href="#DuckDB.Generator-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_S&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-462"><a href="#DuckDB.Generator-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_MS&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-463"><a href="#DuckDB.Generator-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_NS&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-464"><a href="#DuckDB.Generator-464"><span class="linenos">464</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-465"><a href="#DuckDB.Generator-465"><span class="linenos">465</span></a>
-</span><span id="DuckDB.Generator-466"><a href="#DuckDB.Generator-466"><span class="linenos">466</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span><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">STAR_MAPPING</span><span class="p">,</span> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">}</span>
-</span><span id="DuckDB.Generator-467"><a href="#DuckDB.Generator-467"><span class="linenos">467</span></a>
-</span><span id="DuckDB.Generator-468"><a href="#DuckDB.Generator-468"><span class="linenos">468</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-469"><a href="#DuckDB.Generator-469"><span class="linenos">469</span></a>
-</span><span id="DuckDB.Generator-470"><a href="#DuckDB.Generator-470"><span class="linenos">470</span></a> <span class="c1"># DuckDB doesn&#39;t generally support CREATE TABLE .. properties</span>
-</span><span id="DuckDB.Generator-471"><a href="#DuckDB.Generator-471"><span class="linenos">471</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/create_table.html</span>
-</span><span id="DuckDB.Generator-472"><a href="#DuckDB.Generator-472"><span class="linenos">472</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-473"><a href="#DuckDB.Generator-473"><span class="linenos">473</span></a> <span class="n">prop</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><span id="DuckDB.Generator-474"><a href="#DuckDB.Generator-474"><span class="linenos">474</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</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><span id="DuckDB.Generator-475"><a href="#DuckDB.Generator-475"><span class="linenos">475</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-476"><a href="#DuckDB.Generator-476"><span class="linenos">476</span></a>
-</span><span id="DuckDB.Generator-477"><a href="#DuckDB.Generator-477"><span class="linenos">477</span></a> <span class="c1"># There are a few exceptions (e.g. temporary tables) which are supported or</span>
-</span><span id="DuckDB.Generator-478"><a href="#DuckDB.Generator-478"><span class="linenos">478</span></a> <span class="c1"># can be transpiled to DuckDB, so we explicitly override them accordingly</span>
-</span><span id="DuckDB.Generator-479"><a href="#DuckDB.Generator-479"><span class="linenos">479</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span>
-</span><span id="DuckDB.Generator-480"><a href="#DuckDB.Generator-480"><span class="linenos">480</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span>
-</span><span id="DuckDB.Generator-481"><a href="#DuckDB.Generator-481"><span class="linenos">481</span></a>
-</span><span id="DuckDB.Generator-482"><a href="#DuckDB.Generator-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-483"><a href="#DuckDB.Generator-483"><span class="linenos">483</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-484"><a href="#DuckDB.Generator-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-485"><a href="#DuckDB.Generator-485"><span class="linenos">485</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-486"><a href="#DuckDB.Generator-486"><span class="linenos">486</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-487"><a href="#DuckDB.Generator-487"><span class="linenos">487</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator-488"><a href="#DuckDB.Generator-488"><span class="linenos">488</span></a>
-</span><span id="DuckDB.Generator-489"><a href="#DuckDB.Generator-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-490"><a href="#DuckDB.Generator-490"><span class="linenos">490</span></a>
-</span><span id="DuckDB.Generator-491"><a href="#DuckDB.Generator-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">timestampfromparts_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">TimestampFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-492"><a href="#DuckDB.Generator-492"><span class="linenos">492</span></a> <span class="n">sec</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;sec&quot;</span><span class="p">]</span>
-</span><span id="DuckDB.Generator-493"><a href="#DuckDB.Generator-493"><span class="linenos">493</span></a>
-</span><span id="DuckDB.Generator-494"><a href="#DuckDB.Generator-494"><span class="linenos">494</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-495"><a href="#DuckDB.Generator-495"><span class="linenos">495</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-496"><a href="#DuckDB.Generator-496"><span class="linenos">496</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-497"><a href="#DuckDB.Generator-497"><span class="linenos">497</span></a>
-</span><span id="DuckDB.Generator-498"><a href="#DuckDB.Generator-498"><span class="linenos">498</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-499"><a href="#DuckDB.Generator-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-500"><a href="#DuckDB.Generator-500"><span class="linenos">500</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-501"><a href="#DuckDB.Generator-501"><span class="linenos">501</span></a>
-</span><span id="DuckDB.Generator-502"><a href="#DuckDB.Generator-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-503"><a href="#DuckDB.Generator-503"><span class="linenos">503</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-504"><a href="#DuckDB.Generator-504"><span class="linenos">504</span></a>
-</span><span id="DuckDB.Generator-505"><a href="#DuckDB.Generator-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-506"><a href="#DuckDB.Generator-506"><span class="linenos">506</span></a>
-</span><span id="DuckDB.Generator-507"><a href="#DuckDB.Generator-507"><span class="linenos">507</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-508"><a href="#DuckDB.Generator-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-509"><a href="#DuckDB.Generator-509"><span class="linenos">509</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-510"><a href="#DuckDB.Generator-510"><span class="linenos">510</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-511"><a href="#DuckDB.Generator-511"><span class="linenos">511</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-512"><a href="#DuckDB.Generator-512"><span class="linenos">512</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-513"><a href="#DuckDB.Generator-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-514"><a href="#DuckDB.Generator-514"><span class="linenos">514</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="DuckDB.Generator-515"><a href="#DuckDB.Generator-515"><span class="linenos">515</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="DuckDB.Generator-516"><a href="#DuckDB.Generator-516"><span class="linenos">516</span></a>
-</span><span id="DuckDB.Generator-517"><a href="#DuckDB.Generator-517"><span class="linenos">517</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-518"><a href="#DuckDB.Generator-518"><span class="linenos">518</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="DuckDB.Generator-519"><a href="#DuckDB.Generator-519"><span class="linenos">519</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator-520"><a href="#DuckDB.Generator-520"><span class="linenos">520</span></a>
-</span><span id="DuckDB.Generator-521"><a href="#DuckDB.Generator-521"><span class="linenos">521</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-522"><a href="#DuckDB.Generator-522"><span class="linenos">522</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DuckDB.Generator-523"><a href="#DuckDB.Generator-523"><span class="linenos">523</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="DuckDB.Generator-524"><a href="#DuckDB.Generator-524"><span class="linenos">524</span></a>
-</span><span id="DuckDB.Generator-525"><a href="#DuckDB.Generator-525"><span class="linenos">525</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-526"><a href="#DuckDB.Generator-526"><span class="linenos">526</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB.Generator-527"><a href="#DuckDB.Generator-527"><span class="linenos">527</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-528"><a href="#DuckDB.Generator-528"><span class="linenos">528</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
-</span><span id="DuckDB.Generator-529"><a href="#DuckDB.Generator-529"><span class="linenos">529</span></a>
-</span><span id="DuckDB.Generator-530"><a href="#DuckDB.Generator-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-531"><a href="#DuckDB.Generator-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB.Generator-532"><a href="#DuckDB.Generator-532"><span class="linenos">532</span></a>
-</span><span id="DuckDB.Generator-533"><a href="#DuckDB.Generator-533"><span class="linenos">533</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-534"><a href="#DuckDB.Generator-534"><span class="linenos">534</span></a>
-</span><span id="DuckDB.Generator-535"><a href="#DuckDB.Generator-535"><span class="linenos">535</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-536"><a href="#DuckDB.Generator-536"><span class="linenos">536</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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="DuckDB.Generator-537"><a href="#DuckDB.Generator-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-538"><a href="#DuckDB.Generator-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-539"><a href="#DuckDB.Generator-539"><span class="linenos">539</span></a>
-</span><span id="DuckDB.Generator-540"><a href="#DuckDB.Generator-540"><span class="linenos">540</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-541"><a href="#DuckDB.Generator-541"><span class="linenos">541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
+</span><span id="DuckDB.Generator-337"><a href="#DuckDB.Generator-337"><span class="linenos">337</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-338"><a href="#DuckDB.Generator-338"><span class="linenos">338</span></a>
+</span><span id="DuckDB.Generator-339"><a href="#DuckDB.Generator-339"><span class="linenos">339</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-340"><a href="#DuckDB.Generator-340"><span class="linenos">340</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><span id="DuckDB.Generator-341"><a href="#DuckDB.Generator-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-342"><a href="#DuckDB.Generator-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
+</span><span id="DuckDB.Generator-343"><a href="#DuckDB.Generator-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="n">e</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="DuckDB.Generator-344"><a href="#DuckDB.Generator-344"><span class="linenos">344</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">e</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="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-345"><a href="#DuckDB.Generator-345"><span class="linenos">345</span></a> <span class="k">else</span> <span class="n">inline_array_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="DuckDB.Generator-346"><a href="#DuckDB.Generator-346"><span class="linenos">346</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-347"><a href="#DuckDB.Generator-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-348"><a href="#DuckDB.Generator-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MAX&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-349"><a href="#DuckDB.Generator-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">arg_max_or_min_no_count</span><span class="p">(</span><span class="s2">&quot;ARG_MIN&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-350"><a href="#DuckDB.Generator-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">:</span> <span class="n">_array_sort_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-351"><a href="#DuckDB.Generator-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_SUM&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-352"><a href="#DuckDB.Generator-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;XOR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-353"><a href="#DuckDB.Generator-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">:</span> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-354"><a href="#DuckDB.Generator-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-355"><a href="#DuckDB.Generator-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-356"><a href="#DuckDB.Generator-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-357"><a href="#DuckDB.Generator-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-358"><a href="#DuckDB.Generator-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-359"><a href="#DuckDB.Generator-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-360"><a href="#DuckDB.Generator-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-361"><a href="#DuckDB.Generator-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">:</span> <span class="n">_date_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-362"><a href="#DuckDB.Generator-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-363"><a href="#DuckDB.Generator-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-364"><a href="#DuckDB.Generator-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_delta_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-365"><a href="#DuckDB.Generator-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="DuckDB.Generator-366"><a href="#DuckDB.Generator-366"><span class="linenos">366</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&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><span id="DuckDB.Generator-367"><a href="#DuckDB.Generator-367"><span class="linenos">367</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-368"><a href="#DuckDB.Generator-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-369"><a href="#DuckDB.Generator-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-370"><a href="#DuckDB.Generator-370"><span class="linenos">370</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-371"><a href="#DuckDB.Generator-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;DECODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-372"><a href="#DuckDB.Generator-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-373"><a href="#DuckDB.Generator-373"><span class="linenos">373</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(STRPTIME(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), </span><span class="si">{</span><span class="n">DuckDB</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-374"><a href="#DuckDB.Generator-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;ENCODE&quot;</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-375"><a href="#DuckDB.Generator-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-376"><a href="#DuckDB.Generator-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;//&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-377"><a href="#DuckDB.Generator-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsInf</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISINF&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-378"><a href="#DuckDB.Generator-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsNan</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ISNAN&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-379"><a href="#DuckDB.Generator-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-380"><a href="#DuckDB.Generator-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-381"><a href="#DuckDB.Generator-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-382"><a href="#DuckDB.Generator-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-383"><a href="#DuckDB.Generator-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-384"><a href="#DuckDB.Generator-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MonthsBetween</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="DuckDB.Generator-385"><a href="#DuckDB.Generator-385"><span class="linenos">385</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-386"><a href="#DuckDB.Generator-386"><span class="linenos">386</span></a> <span class="s2">&quot;&#39;month&#39;&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-387"><a href="#DuckDB.Generator-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-388"><a href="#DuckDB.Generator-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;timestamp&quot;</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-389"><a href="#DuckDB.Generator-389"><span class="linenos">389</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-390"><a href="#DuckDB.Generator-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-391"><a href="#DuckDB.Generator-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_CONT&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_CONT&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-392"><a href="#DuckDB.Generator-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">_rename_unless_within_group</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_DISC&quot;</span><span class="p">,</span> <span class="s2">&quot;QUANTILE_DISC&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-393"><a href="#DuckDB.Generator-393"><span class="linenos">393</span></a> <span class="c1"># DuckDB doesn&#39;t allow qualified columns inside of PIVOT expressions.</span>
+</span><span id="DuckDB.Generator-394"><a href="#DuckDB.Generator-394"><span class="linenos">394</span></a> <span class="c1"># See: https://github.com/duckdb/duckdb/blob/671faf92411182f81dce42ac43de8bfb05d9909e/src/planner/binder/tableref/bind_pivot.cpp#L61-L62</span>
+</span><span id="DuckDB.Generator-395"><a href="#DuckDB.Generator-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unqualify_columns</span><span class="p">]),</span>
+</span><span id="DuckDB.Generator-396"><a href="#DuckDB.Generator-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-397"><a href="#DuckDB.Generator-397"><span class="linenos">397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</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="DuckDB.Generator-398"><a href="#DuckDB.Generator-398"><span class="linenos">398</span></a> <span class="s2">&quot;REGEXP_REPLACE&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-399"><a href="#DuckDB.Generator-399"><span class="linenos">399</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-400"><a href="#DuckDB.Generator-400"><span class="linenos">400</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-401"><a href="#DuckDB.Generator-401"><span class="linenos">401</span></a> <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;replacement&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-402"><a href="#DuckDB.Generator-402"><span class="linenos">402</span></a> <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;modifiers&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-403"><a href="#DuckDB.Generator-403"><span class="linenos">403</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-404"><a href="#DuckDB.Generator-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-405"><a href="#DuckDB.Generator-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-406"><a href="#DuckDB.Generator-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-407"><a href="#DuckDB.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-408"><a href="#DuckDB.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-409"><a href="#DuckDB.Generator-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_sort_array_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-410"><a href="#DuckDB.Generator-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-411"><a href="#DuckDB.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-412"><a href="#DuckDB.Generator-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">str_to_time_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-413"><a href="#DuckDB.Generator-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-414"><a href="#DuckDB.Generator-414"><span class="linenos">414</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(STRPTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-415"><a href="#DuckDB.Generator-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">:</span> <span class="n">_struct_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-416"><a href="#DuckDB.Generator-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-417"><a href="#DuckDB.Generator-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampDiff</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="DuckDB.Generator-418"><a href="#DuckDB.Generator-418"><span class="linenos">418</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">unit</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><span id="DuckDB.Generator-419"><a href="#DuckDB.Generator-419"><span class="linenos">419</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-420"><a href="#DuckDB.Generator-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-421"><a href="#DuckDB.Generator-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-422"><a href="#DuckDB.Generator-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-423"><a href="#DuckDB.Generator-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;EPOCH(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP))&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-424"><a href="#DuckDB.Generator-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-425"><a href="#DuckDB.Generator-425"><span class="linenos">425</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-426"><a href="#DuckDB.Generator-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EPOCH&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-427"><a href="#DuckDB.Generator-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-428"><a href="#DuckDB.Generator-428"><span class="linenos">428</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-429"><a href="#DuckDB.Generator-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-430"><a href="#DuckDB.Generator-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</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="DuckDB.Generator-431"><a href="#DuckDB.Generator-431"><span class="linenos">431</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-432"><a href="#DuckDB.Generator-432"><span class="linenos">432</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</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;unit&#39;</span><span class="p">)</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;DAY&#39;</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-433"><a href="#DuckDB.Generator-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-434"><a href="#DuckDB.Generator-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-435"><a href="#DuckDB.Generator-435"><span class="linenos">435</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-436"><a href="#DuckDB.Generator-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-437"><a href="#DuckDB.Generator-437"><span class="linenos">437</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;STRFTIME(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-438"><a href="#DuckDB.Generator-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-439"><a href="#DuckDB.Generator-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS TEXT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-440"><a href="#DuckDB.Generator-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-441"><a href="#DuckDB.Generator-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-442"><a href="#DuckDB.Generator-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-443"><a href="#DuckDB.Generator-443"><span class="linenos">443</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-444"><a href="#DuckDB.Generator-444"><span class="linenos">444</span></a>
+</span><span id="DuckDB.Generator-445"><a href="#DuckDB.Generator-445"><span class="linenos">445</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-446"><a href="#DuckDB.Generator-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-447"><a href="#DuckDB.Generator-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-448"><a href="#DuckDB.Generator-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-449"><a href="#DuckDB.Generator-449"><span class="linenos">449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-450"><a href="#DuckDB.Generator-450"><span class="linenos">450</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-451"><a href="#DuckDB.Generator-451"><span class="linenos">451</span></a>
+</span><span id="DuckDB.Generator-452"><a href="#DuckDB.Generator-452"><span class="linenos">452</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-453"><a href="#DuckDB.Generator-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><span id="DuckDB.Generator-454"><a href="#DuckDB.Generator-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-455"><a href="#DuckDB.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">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-456"><a href="#DuckDB.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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-457"><a href="#DuckDB.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">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-458"><a href="#DuckDB.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">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-459"><a href="#DuckDB.Generator-459"><span class="linenos">459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UINT</span><span class="p">:</span> <span class="s2">&quot;UINTEGER&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-460"><a href="#DuckDB.Generator-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-461"><a href="#DuckDB.Generator-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-462"><a href="#DuckDB.Generator-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_S&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-463"><a href="#DuckDB.Generator-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_MS&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-464"><a href="#DuckDB.Generator-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP_NS&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-465"><a href="#DuckDB.Generator-465"><span class="linenos">465</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-466"><a href="#DuckDB.Generator-466"><span class="linenos">466</span></a>
+</span><span id="DuckDB.Generator-467"><a href="#DuckDB.Generator-467"><span class="linenos">467</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span><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">STAR_MAPPING</span><span class="p">,</span> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">}</span>
+</span><span id="DuckDB.Generator-468"><a href="#DuckDB.Generator-468"><span class="linenos">468</span></a>
+</span><span id="DuckDB.Generator-469"><a href="#DuckDB.Generator-469"><span class="linenos">469</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-470"><a href="#DuckDB.Generator-470"><span class="linenos">470</span></a>
+</span><span id="DuckDB.Generator-471"><a href="#DuckDB.Generator-471"><span class="linenos">471</span></a> <span class="c1"># DuckDB doesn&#39;t generally support CREATE TABLE .. properties</span>
+</span><span id="DuckDB.Generator-472"><a href="#DuckDB.Generator-472"><span class="linenos">472</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/create_table.html</span>
+</span><span id="DuckDB.Generator-473"><a href="#DuckDB.Generator-473"><span class="linenos">473</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-474"><a href="#DuckDB.Generator-474"><span class="linenos">474</span></a> <span class="n">prop</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><span id="DuckDB.Generator-475"><a href="#DuckDB.Generator-475"><span class="linenos">475</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</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><span id="DuckDB.Generator-476"><a href="#DuckDB.Generator-476"><span class="linenos">476</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-477"><a href="#DuckDB.Generator-477"><span class="linenos">477</span></a>
+</span><span id="DuckDB.Generator-478"><a href="#DuckDB.Generator-478"><span class="linenos">478</span></a> <span class="c1"># There are a few exceptions (e.g. temporary tables) which are supported or</span>
+</span><span id="DuckDB.Generator-479"><a href="#DuckDB.Generator-479"><span class="linenos">479</span></a> <span class="c1"># can be transpiled to DuckDB, so we explicitly override them accordingly</span>
+</span><span id="DuckDB.Generator-480"><a href="#DuckDB.Generator-480"><span class="linenos">480</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span>
+</span><span id="DuckDB.Generator-481"><a href="#DuckDB.Generator-481"><span class="linenos">481</span></a> <span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span>
+</span><span id="DuckDB.Generator-482"><a href="#DuckDB.Generator-482"><span class="linenos">482</span></a>
+</span><span id="DuckDB.Generator-483"><a href="#DuckDB.Generator-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-484"><a href="#DuckDB.Generator-484"><span class="linenos">484</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-485"><a href="#DuckDB.Generator-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-486"><a href="#DuckDB.Generator-486"><span class="linenos">486</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-487"><a href="#DuckDB.Generator-487"><span class="linenos">487</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-488"><a href="#DuckDB.Generator-488"><span class="linenos">488</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator-489"><a href="#DuckDB.Generator-489"><span class="linenos">489</span></a>
+</span><span id="DuckDB.Generator-490"><a href="#DuckDB.Generator-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-491"><a href="#DuckDB.Generator-491"><span class="linenos">491</span></a>
+</span><span id="DuckDB.Generator-492"><a href="#DuckDB.Generator-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">timestampfromparts_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">TimestampFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-493"><a href="#DuckDB.Generator-493"><span class="linenos">493</span></a> <span class="n">sec</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;sec&quot;</span><span class="p">]</span>
+</span><span id="DuckDB.Generator-494"><a href="#DuckDB.Generator-494"><span class="linenos">494</span></a>
+</span><span id="DuckDB.Generator-495"><a href="#DuckDB.Generator-495"><span class="linenos">495</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-496"><a href="#DuckDB.Generator-496"><span class="linenos">496</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-497"><a href="#DuckDB.Generator-497"><span class="linenos">497</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-498"><a href="#DuckDB.Generator-498"><span class="linenos">498</span></a>
+</span><span id="DuckDB.Generator-499"><a href="#DuckDB.Generator-499"><span class="linenos">499</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-500"><a href="#DuckDB.Generator-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-501"><a href="#DuckDB.Generator-501"><span class="linenos">501</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-502"><a href="#DuckDB.Generator-502"><span class="linenos">502</span></a>
+</span><span id="DuckDB.Generator-503"><a href="#DuckDB.Generator-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-504"><a href="#DuckDB.Generator-504"><span class="linenos">504</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-505"><a href="#DuckDB.Generator-505"><span class="linenos">505</span></a>
+</span><span id="DuckDB.Generator-506"><a href="#DuckDB.Generator-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-507"><a href="#DuckDB.Generator-507"><span class="linenos">507</span></a>
+</span><span id="DuckDB.Generator-508"><a href="#DuckDB.Generator-508"><span class="linenos">508</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-509"><a href="#DuckDB.Generator-509"><span class="linenos">509</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-510"><a href="#DuckDB.Generator-510"><span class="linenos">510</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-511"><a href="#DuckDB.Generator-511"><span class="linenos">511</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-512"><a href="#DuckDB.Generator-512"><span class="linenos">512</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-513"><a href="#DuckDB.Generator-513"><span class="linenos">513</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-514"><a href="#DuckDB.Generator-514"><span class="linenos">514</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-515"><a href="#DuckDB.Generator-515"><span class="linenos">515</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="DuckDB.Generator-516"><a href="#DuckDB.Generator-516"><span class="linenos">516</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="DuckDB.Generator-517"><a href="#DuckDB.Generator-517"><span class="linenos">517</span></a>
+</span><span id="DuckDB.Generator-518"><a href="#DuckDB.Generator-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-519"><a href="#DuckDB.Generator-519"><span class="linenos">519</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
+</span><span id="DuckDB.Generator-520"><a href="#DuckDB.Generator-520"><span class="linenos">520</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator-521"><a href="#DuckDB.Generator-521"><span class="linenos">521</span></a>
+</span><span id="DuckDB.Generator-522"><a href="#DuckDB.Generator-522"><span class="linenos">522</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-523"><a href="#DuckDB.Generator-523"><span class="linenos">523</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DuckDB.Generator-524"><a href="#DuckDB.Generator-524"><span class="linenos">524</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="DuckDB.Generator-525"><a href="#DuckDB.Generator-525"><span class="linenos">525</span></a>
+</span><span id="DuckDB.Generator-526"><a href="#DuckDB.Generator-526"><span class="linenos">526</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-527"><a href="#DuckDB.Generator-527"><span class="linenos">527</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB.Generator-528"><a href="#DuckDB.Generator-528"><span class="linenos">528</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-529"><a href="#DuckDB.Generator-529"><span class="linenos">529</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB.Generator-530"><a href="#DuckDB.Generator-530"><span class="linenos">530</span></a>
+</span><span id="DuckDB.Generator-531"><a href="#DuckDB.Generator-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-532"><a href="#DuckDB.Generator-532"><span class="linenos">532</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB.Generator-533"><a href="#DuckDB.Generator-533"><span class="linenos">533</span></a>
+</span><span id="DuckDB.Generator-534"><a href="#DuckDB.Generator-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-535"><a href="#DuckDB.Generator-535"><span class="linenos">535</span></a>
+</span><span id="DuckDB.Generator-536"><a href="#DuckDB.Generator-536"><span class="linenos">536</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-537"><a href="#DuckDB.Generator-537"><span class="linenos">537</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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="DuckDB.Generator-538"><a href="#DuckDB.Generator-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-539"><a href="#DuckDB.Generator-539"><span class="linenos">539</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-540"><a href="#DuckDB.Generator-540"><span class="linenos">540</span></a>
+</span><span id="DuckDB.Generator-541"><a href="#DuckDB.Generator-541"><span class="linenos">541</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-542"><a href="#DuckDB.Generator-542"><span class="linenos">542</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
</span></pre></div>
@@ -2491,6 +2499,18 @@ Default: True</li>
</div>
+ <div id="DuckDB.Generator.MULTI_ARG_DISTINCT" class="classattr">
+ <div class="attr variable">
+ <span class="name">MULTI_ARG_DISTINCT</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#DuckDB.Generator.MULTI_ARG_DISTINCT"></a>
+
+
+
+ </div>
<div id="DuckDB.Generator.TRANSFORMS" class="classattr">
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
@@ -2508,7 +2528,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
<input id="DuckDB.Generator.SUPPORTED_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;}</span>
</div>
@@ -2579,14 +2599,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.timefromparts_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.timefromparts_sql-482"><a href="#DuckDB.Generator.timefromparts_sql-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.timefromparts_sql-483"><a href="#DuckDB.Generator.timefromparts_sql-483"><span class="linenos">483</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.timefromparts_sql-484"><a href="#DuckDB.Generator.timefromparts_sql-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.timefromparts_sql-485"><a href="#DuckDB.Generator.timefromparts_sql-485"><span class="linenos">485</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.timefromparts_sql-486"><a href="#DuckDB.Generator.timefromparts_sql-486"><span class="linenos">486</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.timefromparts_sql-487"><a href="#DuckDB.Generator.timefromparts_sql-487"><span class="linenos">487</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator.timefromparts_sql-488"><a href="#DuckDB.Generator.timefromparts_sql-488"><span class="linenos">488</span></a>
-</span><span id="DuckDB.Generator.timefromparts_sql-489"><a href="#DuckDB.Generator.timefromparts_sql-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.timefromparts_sql-483"><a href="#DuckDB.Generator.timefromparts_sql-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">timefromparts_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">TimeFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.timefromparts_sql-484"><a href="#DuckDB.Generator.timefromparts_sql-484"><span class="linenos">484</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.timefromparts_sql-485"><a href="#DuckDB.Generator.timefromparts_sql-485"><span class="linenos">485</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.timefromparts_sql-486"><a href="#DuckDB.Generator.timefromparts_sql-486"><span class="linenos">486</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.timefromparts_sql-487"><a href="#DuckDB.Generator.timefromparts_sql-487"><span class="linenos">487</span></a> <span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;sec&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.timefromparts_sql-488"><a href="#DuckDB.Generator.timefromparts_sql-488"><span class="linenos">488</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator.timefromparts_sql-489"><a href="#DuckDB.Generator.timefromparts_sql-489"><span class="linenos">489</span></a>
+</span><span id="DuckDB.Generator.timefromparts_sql-490"><a href="#DuckDB.Generator.timefromparts_sql-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2604,21 +2624,21 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.timestampfromparts_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.timestampfromparts_sql-491"><a href="#DuckDB.Generator.timestampfromparts_sql-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">timestampfromparts_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">TimestampFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-492"><a href="#DuckDB.Generator.timestampfromparts_sql-492"><span class="linenos">492</span></a> <span class="n">sec</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;sec&quot;</span><span class="p">]</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-493"><a href="#DuckDB.Generator.timestampfromparts_sql-493"><span class="linenos">493</span></a>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-494"><a href="#DuckDB.Generator.timestampfromparts_sql-494"><span class="linenos">494</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-495"><a href="#DuckDB.Generator.timestampfromparts_sql-495"><span class="linenos">495</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-496"><a href="#DuckDB.Generator.timestampfromparts_sql-496"><span class="linenos">496</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-497"><a href="#DuckDB.Generator.timestampfromparts_sql-497"><span class="linenos">497</span></a>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-498"><a href="#DuckDB.Generator.timestampfromparts_sql-498"><span class="linenos">498</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-499"><a href="#DuckDB.Generator.timestampfromparts_sql-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-500"><a href="#DuckDB.Generator.timestampfromparts_sql-500"><span class="linenos">500</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-501"><a href="#DuckDB.Generator.timestampfromparts_sql-501"><span class="linenos">501</span></a>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-502"><a href="#DuckDB.Generator.timestampfromparts_sql-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-503"><a href="#DuckDB.Generator.timestampfromparts_sql-503"><span class="linenos">503</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-504"><a href="#DuckDB.Generator.timestampfromparts_sql-504"><span class="linenos">504</span></a>
-</span><span id="DuckDB.Generator.timestampfromparts_sql-505"><a href="#DuckDB.Generator.timestampfromparts_sql-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.timestampfromparts_sql-492"><a href="#DuckDB.Generator.timestampfromparts_sql-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">timestampfromparts_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">TimestampFromParts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-493"><a href="#DuckDB.Generator.timestampfromparts_sql-493"><span class="linenos">493</span></a> <span class="n">sec</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;sec&quot;</span><span class="p">]</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-494"><a href="#DuckDB.Generator.timestampfromparts_sql-494"><span class="linenos">494</span></a>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-495"><a href="#DuckDB.Generator.timestampfromparts_sql-495"><span class="linenos">495</span></a> <span class="n">milli</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;milli&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-496"><a href="#DuckDB.Generator.timestampfromparts_sql-496"><span class="linenos">496</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-497"><a href="#DuckDB.Generator.timestampfromparts_sql-497"><span class="linenos">497</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">milli</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000.0</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-498"><a href="#DuckDB.Generator.timestampfromparts_sql-498"><span class="linenos">498</span></a>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-499"><a href="#DuckDB.Generator.timestampfromparts_sql-499"><span class="linenos">499</span></a> <span class="n">nano</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;nano&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-500"><a href="#DuckDB.Generator.timestampfromparts_sql-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="n">nano</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-501"><a href="#DuckDB.Generator.timestampfromparts_sql-501"><span class="linenos">501</span></a> <span class="n">sec</span> <span class="o">+=</span> <span class="n">nano</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="mf">1000000000.0</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-502"><a href="#DuckDB.Generator.timestampfromparts_sql-502"><span class="linenos">502</span></a>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-503"><a href="#DuckDB.Generator.timestampfromparts_sql-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">milli</span> <span class="ow">or</span> <span class="n">nano</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-504"><a href="#DuckDB.Generator.timestampfromparts_sql-504"><span class="linenos">504</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sec&quot;</span><span class="p">,</span> <span class="n">sec</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-505"><a href="#DuckDB.Generator.timestampfromparts_sql-505"><span class="linenos">505</span></a>
+</span><span id="DuckDB.Generator.timestampfromparts_sql-506"><a href="#DuckDB.Generator.timestampfromparts_sql-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2636,19 +2656,19 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.tablesample_sql-507"><a href="#DuckDB.Generator.tablesample_sql-507"><span class="linenos">507</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.tablesample_sql-508"><a href="#DuckDB.Generator.tablesample_sql-508"><span class="linenos">508</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="DuckDB.Generator.tablesample_sql-509"><a href="#DuckDB.Generator.tablesample_sql-509"><span class="linenos">509</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="DuckDB.Generator.tablesample_sql-510"><a href="#DuckDB.Generator.tablesample_sql-510"><span class="linenos">510</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator.tablesample_sql-511"><a href="#DuckDB.Generator.tablesample_sql-511"><span class="linenos">511</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DuckDB.Generator.tablesample_sql-512"><a href="#DuckDB.Generator.tablesample_sql-512"><span class="linenos">512</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.tablesample_sql-513"><a href="#DuckDB.Generator.tablesample_sql-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.tablesample_sql-514"><a href="#DuckDB.Generator.tablesample_sql-514"><span class="linenos">514</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="DuckDB.Generator.tablesample_sql-515"><a href="#DuckDB.Generator.tablesample_sql-515"><span class="linenos">515</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="DuckDB.Generator.tablesample_sql-516"><a href="#DuckDB.Generator.tablesample_sql-516"><span class="linenos">516</span></a>
-</span><span id="DuckDB.Generator.tablesample_sql-517"><a href="#DuckDB.Generator.tablesample_sql-517"><span class="linenos">517</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.tablesample_sql-518"><a href="#DuckDB.Generator.tablesample_sql-518"><span class="linenos">518</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="DuckDB.Generator.tablesample_sql-519"><a href="#DuckDB.Generator.tablesample_sql-519"><span class="linenos">519</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.tablesample_sql-508"><a href="#DuckDB.Generator.tablesample_sql-508"><span class="linenos">508</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.tablesample_sql-509"><a href="#DuckDB.Generator.tablesample_sql-509"><span class="linenos">509</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="DuckDB.Generator.tablesample_sql-510"><a href="#DuckDB.Generator.tablesample_sql-510"><span class="linenos">510</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="DuckDB.Generator.tablesample_sql-511"><a href="#DuckDB.Generator.tablesample_sql-511"><span class="linenos">511</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator.tablesample_sql-512"><a href="#DuckDB.Generator.tablesample_sql-512"><span class="linenos">512</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DuckDB.Generator.tablesample_sql-513"><a href="#DuckDB.Generator.tablesample_sql-513"><span class="linenos">513</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.tablesample_sql-514"><a href="#DuckDB.Generator.tablesample_sql-514"><span class="linenos">514</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.tablesample_sql-515"><a href="#DuckDB.Generator.tablesample_sql-515"><span class="linenos">515</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="DuckDB.Generator.tablesample_sql-516"><a href="#DuckDB.Generator.tablesample_sql-516"><span class="linenos">516</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="DuckDB.Generator.tablesample_sql-517"><a href="#DuckDB.Generator.tablesample_sql-517"><span class="linenos">517</span></a>
+</span><span id="DuckDB.Generator.tablesample_sql-518"><a href="#DuckDB.Generator.tablesample_sql-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.tablesample_sql-519"><a href="#DuckDB.Generator.tablesample_sql-519"><span class="linenos">519</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
+</span><span id="DuckDB.Generator.tablesample_sql-520"><a href="#DuckDB.Generator.tablesample_sql-520"><span class="linenos">520</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2666,19 +2686,19 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.interval_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.interval_sql-521"><a href="#DuckDB.Generator.interval_sql-521"><span class="linenos">521</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.interval_sql-522"><a href="#DuckDB.Generator.interval_sql-522"><span class="linenos">522</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="DuckDB.Generator.interval_sql-523"><a href="#DuckDB.Generator.interval_sql-523"><span class="linenos">523</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="DuckDB.Generator.interval_sql-524"><a href="#DuckDB.Generator.interval_sql-524"><span class="linenos">524</span></a>
-</span><span id="DuckDB.Generator.interval_sql-525"><a href="#DuckDB.Generator.interval_sql-525"><span class="linenos">525</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.interval_sql-526"><a href="#DuckDB.Generator.interval_sql-526"><span class="linenos">526</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB.Generator.interval_sql-527"><a href="#DuckDB.Generator.interval_sql-527"><span class="linenos">527</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.interval_sql-528"><a href="#DuckDB.Generator.interval_sql-528"><span class="linenos">528</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
-</span><span id="DuckDB.Generator.interval_sql-529"><a href="#DuckDB.Generator.interval_sql-529"><span class="linenos">529</span></a>
-</span><span id="DuckDB.Generator.interval_sql-530"><a href="#DuckDB.Generator.interval_sql-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.interval_sql-531"><a href="#DuckDB.Generator.interval_sql-531"><span class="linenos">531</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB.Generator.interval_sql-532"><a href="#DuckDB.Generator.interval_sql-532"><span class="linenos">532</span></a>
-</span><span id="DuckDB.Generator.interval_sql-533"><a href="#DuckDB.Generator.interval_sql-533"><span class="linenos">533</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.interval_sql-522"><a href="#DuckDB.Generator.interval_sql-522"><span class="linenos">522</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.interval_sql-523"><a href="#DuckDB.Generator.interval_sql-523"><span class="linenos">523</span></a> <span class="n">multiplier</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="DuckDB.Generator.interval_sql-524"><a href="#DuckDB.Generator.interval_sql-524"><span class="linenos">524</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="DuckDB.Generator.interval_sql-525"><a href="#DuckDB.Generator.interval_sql-525"><span class="linenos">525</span></a>
+</span><span id="DuckDB.Generator.interval_sql-526"><a href="#DuckDB.Generator.interval_sql-526"><span class="linenos">526</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;week&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.interval_sql-527"><a href="#DuckDB.Generator.interval_sql-527"><span class="linenos">527</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB.Generator.interval_sql-528"><a href="#DuckDB.Generator.interval_sql-528"><span class="linenos">528</span></a> <span class="k">if</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;quarter&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.interval_sql-529"><a href="#DuckDB.Generator.interval_sql-529"><span class="linenos">529</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB.Generator.interval_sql-530"><a href="#DuckDB.Generator.interval_sql-530"><span class="linenos">530</span></a>
+</span><span id="DuckDB.Generator.interval_sql-531"><a href="#DuckDB.Generator.interval_sql-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.interval_sql-532"><a href="#DuckDB.Generator.interval_sql-532"><span class="linenos">532</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB.Generator.interval_sql-533"><a href="#DuckDB.Generator.interval_sql-533"><span class="linenos">533</span></a>
+</span><span id="DuckDB.Generator.interval_sql-534"><a href="#DuckDB.Generator.interval_sql-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2696,10 +2716,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.columndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.columndef_sql-535"><a href="#DuckDB.Generator.columndef_sql-535"><span class="linenos">535</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.columndef_sql-536"><a href="#DuckDB.Generator.columndef_sql-536"><span class="linenos">536</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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="DuckDB.Generator.columndef_sql-537"><a href="#DuckDB.Generator.columndef_sql-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.columndef_sql-538"><a href="#DuckDB.Generator.columndef_sql-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.columndef_sql-536"><a href="#DuckDB.Generator.columndef_sql-536"><span class="linenos">536</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.columndef_sql-537"><a href="#DuckDB.Generator.columndef_sql-537"><span class="linenos">537</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</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="DuckDB.Generator.columndef_sql-538"><a href="#DuckDB.Generator.columndef_sql-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.columndef_sql-539"><a href="#DuckDB.Generator.columndef_sql-539"><span class="linenos">539</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
</span></pre></div>
@@ -2717,8 +2737,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.placeholder_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.placeholder_sql-540"><a href="#DuckDB.Generator.placeholder_sql-540"><span class="linenos">540</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.placeholder_sql-541"><a href="#DuckDB.Generator.placeholder_sql-541"><span class="linenos">541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.placeholder_sql-541"><a href="#DuckDB.Generator.placeholder_sql-541"><span class="linenos">541</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.placeholder_sql-542"><a href="#DuckDB.Generator.placeholder_sql-542"><span class="linenos">542</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/hive.html b/docs/sqlglot/dialects/hive.html
index 0c2075b..268d4a2 100644
--- a/docs/sqlglot/dialects/hive.html
+++ b/docs/sqlglot/dialects/hive.html
@@ -1984,6 +1984,8 @@
<dd id="Hive.Tokenizer.UNICODE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.UNICODE_STRINGS">UNICODE_STRINGS</a></dd>
<dd id="Hive.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Hive.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Hive.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Hive.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Hive.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Hive.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Hive.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -2766,7 +2768,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">EXPRESSIONS_WITHOUT_NESTED_CTES</span> =
<input id="Hive.Generator.EXPRESSIONS_WITHOUT_NESTED_CTES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Hive.Generator.EXPRESSIONS_WITHOUT_NESTED_CTES-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Union">sqlglot.expressions.Union</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Subquery">sqlglot.expressions.Subquery</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Hive.Generator.EXPRESSIONS_WITHOUT_NESTED_CTES-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Union">sqlglot.expressions.Union</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Subquery">sqlglot.expressions.Subquery</a>&#39;&gt;}</span>
</div>
@@ -2779,7 +2781,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
<input id="Hive.Generator.SUPPORTED_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Hive.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Hive.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;}</span>
</div>
@@ -3101,6 +3103,7 @@ Default: True</li>
<dd id="Hive.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Hive.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Hive.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Hive.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Hive.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Hive.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Hive.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/mysql.html b/docs/sqlglot/dialects/mysql.html
index 319bd7c..230d850 100644
--- a/docs/sqlglot/dialects/mysql.html
+++ b/docs/sqlglot/dialects/mysql.html
@@ -1177,7 +1177,7 @@
<section id="TIME_SPECIFIERS">
<div class="attr variable">
<span class="name">TIME_SPECIFIERS</span> =
-<span class="default_value">{&#39;S&#39;, &#39;p&#39;, &#39;r&#39;, &#39;s&#39;, &#39;h&#39;, &#39;f&#39;, &#39;k&#39;, &#39;i&#39;, &#39;T&#39;, &#39;l&#39;, &#39;I&#39;, &#39;H&#39;}</span>
+<span class="default_value">{&#39;k&#39;, &#39;h&#39;, &#39;S&#39;, &#39;r&#39;, &#39;p&#39;, &#39;s&#39;, &#39;H&#39;, &#39;T&#39;, &#39;f&#39;, &#39;I&#39;, &#39;i&#39;, &#39;l&#39;}</span>
</div>
@@ -2473,7 +2473,7 @@
<div id="MySQL.Tokenizer.COMMANDS" class="classattr">
<div class="attr variable">
<span class="name">COMMANDS</span> =
-<span class="default_value">{&lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;}</span>
</div>
@@ -2494,6 +2494,8 @@
<dd id="MySQL.Tokenizer.UNICODE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.UNICODE_STRINGS">UNICODE_STRINGS</a></dd>
<dd id="MySQL.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="MySQL.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="MySQL.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="MySQL.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="MySQL.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="MySQL.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
<dd id="MySQL.Tokenizer.NUMERIC_LITERALS" class="variable"><a href="../tokens.html#Tokenizer.NUMERIC_LITERALS">NUMERIC_LITERALS</a></dd>
@@ -2908,7 +2910,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="MySQL.Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.VALUES: &#39;VALUES&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -2934,7 +2936,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="MySQL.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -3038,7 +3040,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">SCHEMA_UNNAMED_CONSTRAINTS</span> =
<input id="MySQL.Parser.SCHEMA_UNNAMED_CONSTRAINTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.SCHEMA_UNNAMED_CONSTRAINTS-view-value"></label><span class="default_value">{&#39;FULLTEXT&#39;, &#39;PRIMARY KEY&#39;, &#39;UNIQUE&#39;, &#39;SPATIAL&#39;, &#39;FOREIGN KEY&#39;, &#39;PERIOD&#39;, &#39;INDEX&#39;, &#39;KEY&#39;, &#39;LIKE&#39;, &#39;CHECK&#39;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.SCHEMA_UNNAMED_CONSTRAINTS-view-value"></label><span class="default_value">{&#39;INDEX&#39;, &#39;CHECK&#39;, &#39;FULLTEXT&#39;, &#39;PERIOD&#39;, &#39;FOREIGN KEY&#39;, &#39;UNIQUE&#39;, &#39;LIKE&#39;, &#39;PRIMARY KEY&#39;, &#39;KEY&#39;, &#39;SPATIAL&#39;}</span>
</div>
@@ -3050,7 +3052,7 @@ Default: 3</li>
<div id="MySQL.Parser.PROFILE_TYPES" class="classattr">
<div class="attr variable">
<span class="name">PROFILE_TYPES</span> =
-<span class="default_value">{&#39;BLOCK IO&#39;, &#39;SWAPS&#39;, &#39;PAGE FAULTS&#39;, &#39;SOURCE&#39;, &#39;IPC&#39;, &#39;ALL&#39;, &#39;CONTEXT SWITCHES&#39;, &#39;MEMORY&#39;, &#39;CPU&#39;}</span>
+<span class="default_value">{&#39;SWAPS&#39;, &#39;BLOCK IO&#39;, &#39;IPC&#39;, &#39;ALL&#39;, &#39;PAGE FAULTS&#39;, &#39;MEMORY&#39;, &#39;CONTEXT SWITCHES&#39;, &#39;CPU&#39;, &#39;SOURCE&#39;}</span>
</div>
@@ -3063,7 +3065,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TYPE_TOKENS</span> =
<input id="MySQL.Parser.TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;}</span>
</div>
@@ -3076,7 +3078,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ENUM_TYPE_TOKENS</span> =
<input id="MySQL.Parser.ENUM_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="MySQL.Parser.ENUM_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="MySQL.Parser.ENUM_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;}</span>
</div>
@@ -4004,6 +4006,7 @@ Default: True</li>
<dd id="MySQL.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="MySQL.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="MySQL.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="MySQL.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="MySQL.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
<dd id="MySQL.Generator.SUPPORTED_JSON_PATH_PARTS" class="variable"><a href="../generator.html#Generator.SUPPORTED_JSON_PATH_PARTS">SUPPORTED_JSON_PATH_PARTS</a></dd>
<dd id="MySQL.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/oracle.html b/docs/sqlglot/dialects/oracle.html
index 2221570..34cd939 100644
--- a/docs/sqlglot/dialects/oracle.html
+++ b/docs/sqlglot/dialects/oracle.html
@@ -1304,7 +1304,7 @@ Default: 3</li>
<div id="Oracle.Parser.DISTINCT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">DISTINCT_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;}</span>
</div>
@@ -1894,6 +1894,7 @@ Default: True</li>
<dd id="Oracle.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Oracle.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Oracle.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Oracle.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Oracle.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Oracle.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Oracle.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
@@ -2259,7 +2260,7 @@ Default: True</li>
<div id="Oracle.Tokenizer.VAR_SINGLE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">VAR_SINGLE_TOKENS</span> =
-<span class="default_value">{&#39;@&#39;, &#39;#&#39;, &#39;$&#39;}</span>
+<span class="default_value">{&#39;#&#39;, &#39;@&#39;, &#39;$&#39;}</span>
</div>
@@ -2297,6 +2298,8 @@ Default: True</li>
<dd id="Oracle.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Oracle.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Oracle.Tokenizer.STRING_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a></dd>
+ <dd id="Oracle.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Oracle.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Oracle.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Oracle.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Oracle.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
diff --git a/docs/sqlglot/dialects/postgres.html b/docs/sqlglot/dialects/postgres.html
index 7945408..5e05b42 100644
--- a/docs/sqlglot/dialects/postgres.html
+++ b/docs/sqlglot/dialects/postgres.html
@@ -70,6 +70,12 @@
<a class="variable" href="#Postgres.Tokenizer.HEREDOC_STRINGS">HEREDOC_STRINGS</a>
</li>
<li>
+ <a class="variable" href="#Postgres.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a>
+ </li>
+ <li>
+ <a class="variable" href="#Postgres.Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a>
+ </li>
+ <li>
<a class="variable" href="#Postgres.Tokenizer.KEYWORDS">KEYWORDS</a>
</li>
<li>
@@ -160,6 +166,9 @@
<a class="variable" href="#Postgres.Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a>
</li>
<li>
+ <a class="variable" href="#Postgres.Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a>
+ </li>
+ <li>
<a class="variable" href="#Postgres.Generator.SUPPORTED_JSON_PATH_PARTS">SUPPORTED_JSON_PATH_PARTS</a>
</li>
<li>
@@ -281,509 +290,495 @@
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">bool_xor_sql</span><span class="p">,</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">format_time_lambda</span><span class="p">,</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">json_path_segments</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">merge_without_target_sql</span><span class="p">,</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">no_last_day_sql</span><span class="p">,</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">parse_json_extract_path</span><span class="p">,</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">struct_extract_sql</span><span class="p">,</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">ts_or_ds_add_cast</span><span class="p">,</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="p">)</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">binary_range_parser</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="n">DATE_DIFF_FACTOR</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000000&quot;</span><span class="p">,</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000&quot;</span><span class="p">,</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span> <span class="s2">&quot; / 60&quot;</span><span class="p">,</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span> <span class="s2">&quot; / 3600&quot;</span><span class="p">,</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot; / 86400&quot;</span><span class="p">,</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="p">}</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">json_extract_segments</span><span class="p">,</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">json_path_key_only_name</span><span class="p">,</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">merge_without_target_sql</span><span class="p">,</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">no_last_day_sql</span><span class="p">,</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="n">parse_json_extract_path</span><span class="p">,</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">trim_sql</span><span class="p">,</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">ts_or_ds_add_cast</span><span class="p">,</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="p">)</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">binary_range_parser</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="n">DATE_DIFF_FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000000&quot;</span><span class="p">,</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000&quot;</span><span class="p">,</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span> <span class="s2">&quot; / 60&quot;</span><span class="p">,</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span> <span class="s2">&quot; / 3600&quot;</span><span class="p">,</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot; / 86400&quot;</span><span class="p">,</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="p">}</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="k">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">DATE_ADD_OR_SUB</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">DATE_ADD_OR_SUB</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="nb">isinstance</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">TsOrDsAdd</span><span class="p">):</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ts_or_ds_add_cast</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">this</span> <span class="o">=</span> <span class="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-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Literal</span><span class="p">):</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot add non literal&quot;</span><span class="p">)</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;is_string&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="k">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="n">kind</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">DATE_ADD_OR_SUB</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">DATE_ADD_OR_SUB</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">if</span> <span class="nb">isinstance</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">TsOrDsAdd</span><span class="p">):</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ts_or_ds_add_cast</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Literal</span><span class="p">):</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot add non literal&quot;</span><span class="p">)</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;is_string&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="k">def</span> <span class="nf">_date_diff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">factor</span> <span class="o">=</span> <span class="n">DATE_DIFF_FACTOR</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">if</span> <span class="n">factor</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(EXTRACT(epoch FROM </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2"> - </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">factor</span><span class="si">}</span><span class="s2"> AS BIGINT)&quot;</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">age</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AGE(</span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;WEEK&quot;</span><span class="p">:</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(days FROM (</span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">)) / 7&quot;</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(year FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) * 12 + EXTRACT(month FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">:</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(year FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) * 4 + EXTRACT(month FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) / 3&quot;</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(year FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">age</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2"> AS BIGINT)&quot;</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="k">def</span> <span class="nf">_date_diff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">factor</span> <span class="o">=</span> <span class="n">DATE_DIFF_FACTOR</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">if</span> <span class="n">factor</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(EXTRACT(epoch FROM </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2"> - </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">factor</span><span class="si">}</span><span class="s2"> AS BIGINT)&quot;</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">age</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AGE(</span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;WEEK&quot;</span><span class="p">:</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(days FROM (</span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">)) / 7&quot;</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(year FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) * 12 + EXTRACT(month FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">:</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(year FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) * 4 + EXTRACT(month FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) / 3&quot;</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(year FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">age</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2"> AS BIGINT)&quot;</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="k">def</span> <span class="nf">_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-92"><a href="#L-92"><span class="linenos"> 92</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;start&quot;</span><span class="p">)</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">length</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;length&quot;</span><span class="p">)</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">for_part</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">length</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">length</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SUBSTRING(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">for_part</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="k">def</span> <span class="nf">_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</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;start&quot;</span><span class="p">)</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">length</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;length&quot;</span><span class="p">)</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">for_part</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">length</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">length</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SUBSTRING(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">for_part</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="k">def</span> <span class="nf">_string_agg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span> <span 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-103"><a href="#L-103"><span class="linenos">103</span></a>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</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="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">this</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-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">order</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="o">.</span><span class="n">this</span><span class="p">)</span> <span class="c1"># Order has a leading space</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="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="n">order</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</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">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span> <span 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-104"><a href="#L-104"><span class="linenos">104</span></a>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-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">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-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">this</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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">order</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="o">.</span><span class="n">this</span><span class="p">)</span> <span class="c1"># Order has a leading space</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="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="n">order</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="k">def</span> <span class="nf">_datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">):</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">[]&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;ARRAY&quot;</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
+</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 class="k">def</span> <span class="nf">_datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">):</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">[]&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;ARRAY&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">datatype_sql</span><span class="p">(</span><span class="n">expression</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 class="k">def</span> <span class="nf">_auto_increment_to_serial</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">auto</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</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="k">if</span> <span class="n">auto</span><span class="p">:</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;constraints&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">auto</span><span class="o">.</span><span class="n">parent</span><span class="p">)</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</span></a>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">))</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">))</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">))</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</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">_auto_increment_to_serial</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">auto</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">)</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="n">auto</span><span class="p">:</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;constraints&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">auto</span><span class="o">.</span><span class="n">parent</span><span class="p">)</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</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-127"><a href="#L-127"><span class="linenos">127</span></a>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">))</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">))</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">kind</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">))</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">expression</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="k">def</span> <span class="nf">_serial_to_generated</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">:</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">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><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">:</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">)</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">:</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <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 class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">constraints</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;constraints&quot;</span><span class="p">]</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">generated</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">notnull</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">())</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">if</span> <span class="n">notnull</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">constraints</span><span class="p">:</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">notnull</span><span class="p">)</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="n">generated</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">constraints</span><span class="p">:</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">generated</span><span class="p">)</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a><span class="k">def</span> <span class="nf">_serial_to_generated</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">:</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">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><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">:</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">)</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">:</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <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 class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">constraints</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;constraints&quot;</span><span class="p">]</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">generated</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">notnull</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">())</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">notnull</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">constraints</span><span class="p">:</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">notnull</span><span class="p">)</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">generated</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">constraints</span><span class="p">:</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">generated</span><span class="p">)</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="k">def</span> <span class="nf">_generate_series</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="c1"># The goal is to convert step values like &#39;1 day&#39; or INTERVAL &#39;1 day&#39; into INTERVAL &#39;1&#39; day</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">step</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-168"><a href="#L-168"><span class="linenos">168</span></a>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="n">step</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="c1"># Postgres allows calls with just two arguments -- the &quot;step&quot; argument defaults to 1</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="n">step</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_interval</span><span class="p">(</span><span class="n">step</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">step</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">step</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">):</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_interval</span><span class="p">(</span><span class="n">step</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-177"><a href="#L-177"><span class="linenos">177</span></a>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a><span class="k">def</span> <span class="nf">_generate_series</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="c1"># The goal is to convert step values like &#39;1 day&#39; or INTERVAL &#39;1 day&#39; into INTERVAL &#39;1&#39; day</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">step</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-169"><a href="#L-169"><span class="linenos">169</span></a>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="n">step</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="c1"># Postgres allows calls with just two arguments -- the &quot;step&quot; argument defaults to 1</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="n">step</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_interval</span><span class="p">(</span><span class="n">step</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">step</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">step</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">):</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_interval</span><span class="p">(</span><span class="n">step</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-178"><a href="#L-178"><span class="linenos">178</span></a>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><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="k">def</span> <span class="nf">_to_timestamp</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="c1"># TO_TIMESTAMP accepts either a single double argument or (text, text)</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TABLE</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-formatting.html</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="n">format_time_lambda</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="s2">&quot;postgres&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a><span class="k">def</span> <span class="nf">_to_timestamp</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="c1"># TO_TIMESTAMP accepts either a single double argument or (text, text)</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TABLE</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-formatting.html</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="n">format_time_lambda</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="s2">&quot;postgres&quot;</span><span class="p">)(</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a><span class="k">def</span> <span class="nf">_json_extract_sql</span><span class="p">(</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="p">(</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">if</span> <span class="nb">isinstance</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">JSONExtract</span><span class="p">)</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="k">else</span> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="p">),</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="o">*</span><span class="n">json_path_segments</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="p">)</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a><span class="k">class</span> <span class="nc">Postgres</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH24:MI:SS&#39;&quot;</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># 1-based day of week</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># zero padded day of year</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;FMDD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># - is no leading zero for Python; same for FM in postgres</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;FMDDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span> <span class="c1"># day of year</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="s2">&quot;FMHH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="s2">&quot;FMHH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;FMMI&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span> <span class="c1"># Minute</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;FMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span> <span class="c1"># 1</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;FMSS&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span> <span class="c1"># Second</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># zero padded minute</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># 01</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;OF&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&quot;</span><span class="p">,</span> <span class="c1"># utc offset</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># zero padded second</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="s2">&quot;TMDay&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># TM is locale dependent</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;TMDy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;TMMon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Sep</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;TMMonth&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># September</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;TZ&quot;</span><span class="p">:</span> <span class="s2">&quot;%Z&quot;</span><span class="p">,</span> <span class="c1"># uppercase timezone name</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;US&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 class="c1"># zero padded microsecond</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%U&quot;</span><span class="p">,</span> <span class="c1"># 1-based week of year</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="p">}</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</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-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;b&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;B&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;x&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;e&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;E&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</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;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;@&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">,</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;&lt;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">,</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;BEGIN&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;BEGIN TRANSACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;BIGSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;CHARACTER VARYING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;CONSTRAINT TRIGGER&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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;DO&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-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;EXEC&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-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;HSTORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</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-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;REFRESH&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-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;REINDEX&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;RESET&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-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;REVOKE&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-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;OID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="s2">&quot;OPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;REGCLASS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="s2">&quot;REGCOLLATION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="s2">&quot;REGCONFIG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="s2">&quot;REGDICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="s2">&quot;REGNAMESPACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;REGOPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="s2">&quot;REGOPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;REGPROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;REGPROCEDURE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="s2">&quot;REGROLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="s2">&quot;REGTYPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="p">}</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
-</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="p">{</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</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">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="p">}</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;$&quot;</span><span class="p">}</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">PROPERTY_PARSERS</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="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;SET&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</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_set</span><span class="p">()),</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="p">}</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">PROPERTY_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;INPUT&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</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><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="s2">&quot;GENERATE_SERIES&quot;</span><span class="p">:</span> <span class="n">_generate_series</span><span class="p">,</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</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;MAKE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</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;NOW&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-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="s2">&quot;TO_CHAR&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="s2">&quot;postgres&quot;</span><span class="p">),</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_to_timestamp</span><span class="p">,</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a><span class="k">class</span> <span class="nc">Postgres</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH24:MI:SS&#39;&quot;</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># 1-based day of week</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># zero padded day of year</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;FMDD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># - is no leading zero for Python; same for FM in postgres</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;FMDDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span> <span class="c1"># day of year</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;FMHH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;FMHH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;FMMI&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span> <span class="c1"># Minute</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;FMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span> <span class="c1"># 1</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;FMSS&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span> <span class="c1"># Second</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># zero padded minute</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># 01</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="s2">&quot;OF&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&quot;</span><span class="p">,</span> <span class="c1"># utc offset</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># zero padded second</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;TMDay&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># TM is locale dependent</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;TMDy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="s2">&quot;TMMon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Sep</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="s2">&quot;TMMonth&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># September</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;TZ&quot;</span><span class="p">:</span> <span class="s2">&quot;%Z&quot;</span><span class="p">,</span> <span class="c1"># uppercase timezone name</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;US&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 class="c1"># zero padded microsecond</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%U&quot;</span><span class="p">,</span> <span class="c1"># 1-based week of year</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="p">}</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</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-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;b&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;B&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;x&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;e&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;E&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="n">HEREDOC_TAG_IS_IDENTIFIER</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">HEREDOC_STRING_ALTERNATIVE</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="s2">&quot;@&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">,</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;&lt;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">,</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;BEGIN&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-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="s2">&quot;BIGSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="s2">&quot;CHARACTER VARYING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;CONSTRAINT TRIGGER&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-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;DO&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-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;EXEC&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-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;HSTORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;REFRESH&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-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;REINDEX&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-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;RESET&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-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;REVOKE&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-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;OID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;OPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;REGCLASS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;REGCOLLATION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="s2">&quot;REGCONFIG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;REGDICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;REGNAMESPACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;REGOPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="s2">&quot;REGOPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;REGPROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;REGPROCEDURE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="s2">&quot;REGROLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;REGTYPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="p">}</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</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">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="p">}</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;$&quot;</span><span class="p">}</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</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">PROPERTY_PARSERS</span><span class="p">,</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="s2">&quot;SET&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</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_set</span><span class="p">()),</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="p">}</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">PROPERTY_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;INPUT&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-296"><a href="#L-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><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="s2">&quot;GENERATE_SERIES&quot;</span><span class="p">:</span> <span class="n">_generate_series</span><span class="p">,</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="s2">&quot;NOW&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-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="s2">&quot;TO_CHAR&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="s2">&quot;postgres&quot;</span><span class="p">),</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_to_timestamp</span><span class="p">,</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="p">}</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="s2">&quot;DATE_PART&quot;</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_date_part</span><span class="p">(),</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="p">}</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</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">BITWISE</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="p">}</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="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="s2">&quot;DATE_PART&quot;</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_date_part</span><span class="p">(),</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="p">}</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</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">BITWISE</span><span class="p">,</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="p">}</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">,</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="p">}</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">),</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">DAMP</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">),</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">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">MatchAgainst</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="p">),</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">),</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_operator</span><span class="p">(</span><span class="n">this</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-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">,</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="p">}</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="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">),</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">),</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="p">),</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">),</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_operator</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="p">}</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</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><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">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_commit_or_rollback</span><span class="p">(),</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="p">}</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="k">def</span> <span class="nf">_parse_operator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">break</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</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><span id="L-346"><a href="#L-346"><span class="linenos">346</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_commit_or_rollback</span><span class="p">(),</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="p">}</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">op</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</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">_advance</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">def</span> <span class="nf">_parse_operator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="k">break</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">op</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>
-</span><span id="L-359"><a href="#L-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">expression</span><span class="p">(</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Operator</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">operator</span><span class="o">=</span><span class="n">op</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="p">)</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</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><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Operator</span><span class="p">,</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">operator</span><span class="o">=</span><span class="n">op</span><span class="p">,</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</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-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><span id="L-357"><a href="#L-357"><span class="linenos">357</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">):</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="k">break</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">return</span> <span class="n">this</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_date_part</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-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</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">value</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-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="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">OPERATOR</span><span class="p">):</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">break</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="n">part</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</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">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">part</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">_parse_date_part</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-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">value</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-376"><a href="#L-376"><span class="linenos">376</span></a>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="n">part</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</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">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">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">part</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</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-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">TABLESAMPLE_SEED_KEYWORD</span> <span class="o">=</span> <span class="s2">&quot;REPEATABLE&quot;</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">SUPPORTS_SELECT_INTO</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="p">}</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</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><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="p">}</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</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><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</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="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</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="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="p">),</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&lt;@&quot;</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">ArrayContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;@&gt;&quot;</span><span class="p">),</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">ArrayOverlaps</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&amp;&amp;&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">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">),</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</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">CurrentDate</span><span class="p">:</span> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_USER&quot;</span><span class="p">,</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</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">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_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">DataType</span><span class="p">:</span> <span class="n">_datatype_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">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;-&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">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&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">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</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">JSONExtract</span><span class="p">:</span> <span class="n">_json_extract_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">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_extract_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">JSONBExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&quot;</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">JSONBExtractScalar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&gt;&quot;</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">JSONBContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">),</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</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">json_path_part</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-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</span><span class="p">:</span> <span class="n">no_last_day_sql</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</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-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</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-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">merge_without_target_sql</span><span class="p">,</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <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">PercentileDisc</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</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 class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">),</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</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">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~&quot;</span><span class="p">),</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~*&quot;</span><span class="p">),</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="p">[</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="p">]</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <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">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</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">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</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">Substring</span><span class="p">:</span> <span class="n">_substring_sql</span><span class="p">,</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">),</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Variance</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">),</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</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><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</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-495"><a href="#L-495"><span class="linenos">495</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-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="p">}</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">_jsonpathkey_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">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported wildcard in JSONPathKey expression&quot;</span><span class="p">)</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</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-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">TABLESAMPLE_SEED_KEYWORD</span> <span class="o">=</span> <span class="s2">&quot;REPEATABLE&quot;</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">SUPPORTS_SELECT_INTO</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="p">}</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</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><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="p">}</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</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><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</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="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</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="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="p">),</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&lt;@&quot;</span><span class="p">),</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;@&gt;&quot;</span><span class="p">),</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">),</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">),</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_USER&quot;</span><span class="p">,</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</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">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</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="p">:</span> <span class="n">_datatype_sql</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">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;-&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">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&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">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">),</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">),</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&quot;</span><span class="p">),</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">),</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">JSONBContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">),</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">:</span> <span class="n">json_path_key_only_name</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">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&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">JSONPathSubscript</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">json_path_part</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-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</span><span class="p">:</span> <span class="n">no_last_day_sql</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">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</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">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</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">Max</span><span class="p">:</span> <span class="n">max_or_greatest</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">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</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="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">merge_without_target_sql</span><span class="p">,</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="p">),</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="p">),</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">),</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</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">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~&quot;</span><span class="p">),</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~*&quot;</span><span class="p">),</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="p">[</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="p">]</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="p">),</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">StrPosition</span><span class="p">:</span> <span class="n">str_position_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">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</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">Substring</span><span class="p">:</span> <span class="n">_substring_sql</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">TimeFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</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">TimestampFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</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">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_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">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</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">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Variance</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">),</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="p">}</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</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><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</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-487"><a href="#L-487"><span class="linenos">487</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-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="p">}</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
@@ -812,317 +807,316 @@
</div>
<a class="headerlink" href="#Postgres"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres-206"><a href="#Postgres-206"><span class="linenos">206</span></a><span class="k">class</span> <span class="nc">Postgres</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="Postgres-207"><a href="#Postgres-207"><span class="linenos">207</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Postgres-208"><a href="#Postgres-208"><span class="linenos">208</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-209"><a href="#Postgres-209"><span class="linenos">209</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-210"><a href="#Postgres-210"><span class="linenos">210</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="Postgres-211"><a href="#Postgres-211"><span class="linenos">211</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH24:MI:SS&#39;&quot;</span>
-</span><span id="Postgres-212"><a href="#Postgres-212"><span class="linenos">212</span></a>
-</span><span id="Postgres-213"><a href="#Postgres-213"><span class="linenos">213</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-214"><a href="#Postgres-214"><span class="linenos">214</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
-</span><span id="Postgres-215"><a href="#Postgres-215"><span class="linenos">215</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
-</span><span id="Postgres-216"><a href="#Postgres-216"><span class="linenos">216</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># 1-based day of week</span>
-</span><span id="Postgres-217"><a href="#Postgres-217"><span class="linenos">217</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month</span>
-</span><span id="Postgres-218"><a href="#Postgres-218"><span class="linenos">218</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># zero padded day of year</span>
-</span><span id="Postgres-219"><a href="#Postgres-219"><span class="linenos">219</span></a> <span class="s2">&quot;FMDD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># - is no leading zero for Python; same for FM in postgres</span>
-</span><span id="Postgres-220"><a href="#Postgres-220"><span class="linenos">220</span></a> <span class="s2">&quot;FMDDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span> <span class="c1"># day of year</span>
-</span><span id="Postgres-221"><a href="#Postgres-221"><span class="linenos">221</span></a> <span class="s2">&quot;FMHH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
-</span><span id="Postgres-222"><a href="#Postgres-222"><span class="linenos">222</span></a> <span class="s2">&quot;FMHH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
-</span><span id="Postgres-223"><a href="#Postgres-223"><span class="linenos">223</span></a> <span class="s2">&quot;FMMI&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span> <span class="c1"># Minute</span>
-</span><span id="Postgres-224"><a href="#Postgres-224"><span class="linenos">224</span></a> <span class="s2">&quot;FMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span> <span class="c1"># 1</span>
-</span><span id="Postgres-225"><a href="#Postgres-225"><span class="linenos">225</span></a> <span class="s2">&quot;FMSS&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span> <span class="c1"># Second</span>
-</span><span id="Postgres-226"><a href="#Postgres-226"><span class="linenos">226</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
-</span><span id="Postgres-227"><a href="#Postgres-227"><span class="linenos">227</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
-</span><span id="Postgres-228"><a href="#Postgres-228"><span class="linenos">228</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># zero padded minute</span>
-</span><span id="Postgres-229"><a href="#Postgres-229"><span class="linenos">229</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># 01</span>
-</span><span id="Postgres-230"><a href="#Postgres-230"><span class="linenos">230</span></a> <span class="s2">&quot;OF&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&quot;</span><span class="p">,</span> <span class="c1"># utc offset</span>
-</span><span id="Postgres-231"><a href="#Postgres-231"><span class="linenos">231</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># zero padded second</span>
-</span><span id="Postgres-232"><a href="#Postgres-232"><span class="linenos">232</span></a> <span class="s2">&quot;TMDay&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># TM is locale dependent</span>
-</span><span id="Postgres-233"><a href="#Postgres-233"><span class="linenos">233</span></a> <span class="s2">&quot;TMDy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Postgres-234"><a href="#Postgres-234"><span class="linenos">234</span></a> <span class="s2">&quot;TMMon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Sep</span>
-</span><span id="Postgres-235"><a href="#Postgres-235"><span class="linenos">235</span></a> <span class="s2">&quot;TMMonth&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># September</span>
-</span><span id="Postgres-236"><a href="#Postgres-236"><span class="linenos">236</span></a> <span class="s2">&quot;TZ&quot;</span><span class="p">:</span> <span class="s2">&quot;%Z&quot;</span><span class="p">,</span> <span class="c1"># uppercase timezone name</span>
-</span><span id="Postgres-237"><a href="#Postgres-237"><span class="linenos">237</span></a> <span class="s2">&quot;US&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 class="c1"># zero padded microsecond</span>
-</span><span id="Postgres-238"><a href="#Postgres-238"><span class="linenos">238</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%U&quot;</span><span class="p">,</span> <span class="c1"># 1-based week of year</span>
-</span><span id="Postgres-239"><a href="#Postgres-239"><span class="linenos">239</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
-</span><span id="Postgres-240"><a href="#Postgres-240"><span class="linenos">240</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
-</span><span id="Postgres-241"><a href="#Postgres-241"><span class="linenos">241</span></a> <span class="p">}</span>
-</span><span id="Postgres-242"><a href="#Postgres-242"><span class="linenos">242</span></a>
-</span><span id="Postgres-243"><a href="#Postgres-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="Postgres-244"><a href="#Postgres-244"><span class="linenos">244</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;b&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;B&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="Postgres-245"><a href="#Postgres-245"><span class="linenos">245</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;x&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="Postgres-246"><a href="#Postgres-246"><span class="linenos">246</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;e&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;E&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="Postgres-247"><a href="#Postgres-247"><span class="linenos">247</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="Postgres-248"><a href="#Postgres-248"><span class="linenos">248</span></a>
-</span><span id="Postgres-249"><a href="#Postgres-249"><span class="linenos">249</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-250"><a href="#Postgres-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="Postgres-251"><a href="#Postgres-251"><span class="linenos">251</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="Postgres-252"><a href="#Postgres-252"><span class="linenos">252</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="Postgres-253"><a href="#Postgres-253"><span class="linenos">253</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
-</span><span id="Postgres-254"><a href="#Postgres-254"><span class="linenos">254</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="Postgres-255"><a href="#Postgres-255"><span class="linenos">255</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
-</span><span id="Postgres-256"><a href="#Postgres-256"><span class="linenos">256</span></a> <span class="s2">&quot;@&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">,</span>
-</span><span id="Postgres-257"><a href="#Postgres-257"><span class="linenos">257</span></a> <span class="s2">&quot;&lt;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">,</span>
-</span><span id="Postgres-258"><a href="#Postgres-258"><span class="linenos">258</span></a> <span class="s2">&quot;BEGIN&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="Postgres-259"><a href="#Postgres-259"><span class="linenos">259</span></a> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Postgres-260"><a href="#Postgres-260"><span class="linenos">260</span></a> <span class="s2">&quot;BIGSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
-</span><span id="Postgres-261"><a href="#Postgres-261"><span class="linenos">261</span></a> <span class="s2">&quot;CHARACTER VARYING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="Postgres-262"><a href="#Postgres-262"><span class="linenos">262</span></a> <span class="s2">&quot;CONSTRAINT TRIGGER&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="Postgres-263"><a href="#Postgres-263"><span class="linenos">263</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="Postgres-264"><a href="#Postgres-264"><span class="linenos">264</span></a> <span class="s2">&quot;DO&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="Postgres-265"><a href="#Postgres-265"><span class="linenos">265</span></a> <span class="s2">&quot;EXEC&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="Postgres-266"><a href="#Postgres-266"><span class="linenos">266</span></a> <span class="s2">&quot;HSTORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
-</span><span id="Postgres-267"><a href="#Postgres-267"><span class="linenos">267</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
-</span><span id="Postgres-268"><a href="#Postgres-268"><span class="linenos">268</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="Postgres-269"><a href="#Postgres-269"><span class="linenos">269</span></a> <span class="s2">&quot;REFRESH&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="Postgres-270"><a href="#Postgres-270"><span class="linenos">270</span></a> <span class="s2">&quot;REINDEX&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="Postgres-271"><a href="#Postgres-271"><span class="linenos">271</span></a> <span class="s2">&quot;RESET&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="Postgres-272"><a href="#Postgres-272"><span class="linenos">272</span></a> <span class="s2">&quot;REVOKE&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="Postgres-273"><a href="#Postgres-273"><span class="linenos">273</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
-</span><span id="Postgres-274"><a href="#Postgres-274"><span class="linenos">274</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
-</span><span id="Postgres-275"><a href="#Postgres-275"><span class="linenos">275</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Postgres-276"><a href="#Postgres-276"><span class="linenos">276</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
-</span><span id="Postgres-277"><a href="#Postgres-277"><span class="linenos">277</span></a> <span class="s2">&quot;OID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-278"><a href="#Postgres-278"><span class="linenos">278</span></a> <span class="s2">&quot;OPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
-</span><span id="Postgres-279"><a href="#Postgres-279"><span class="linenos">279</span></a> <span class="s2">&quot;REGCLASS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-280"><a href="#Postgres-280"><span class="linenos">280</span></a> <span class="s2">&quot;REGCOLLATION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-281"><a href="#Postgres-281"><span class="linenos">281</span></a> <span class="s2">&quot;REGCONFIG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-282"><a href="#Postgres-282"><span class="linenos">282</span></a> <span class="s2">&quot;REGDICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-283"><a href="#Postgres-283"><span class="linenos">283</span></a> <span class="s2">&quot;REGNAMESPACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-284"><a href="#Postgres-284"><span class="linenos">284</span></a> <span class="s2">&quot;REGOPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-285"><a href="#Postgres-285"><span class="linenos">285</span></a> <span class="s2">&quot;REGOPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-286"><a href="#Postgres-286"><span class="linenos">286</span></a> <span class="s2">&quot;REGPROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-287"><a href="#Postgres-287"><span class="linenos">287</span></a> <span class="s2">&quot;REGPROCEDURE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-288"><a href="#Postgres-288"><span class="linenos">288</span></a> <span class="s2">&quot;REGROLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-289"><a href="#Postgres-289"><span class="linenos">289</span></a> <span class="s2">&quot;REGTYPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres-290"><a href="#Postgres-290"><span class="linenos">290</span></a> <span class="p">}</span>
-</span><span id="Postgres-291"><a href="#Postgres-291"><span class="linenos">291</span></a>
-</span><span id="Postgres-292"><a href="#Postgres-292"><span class="linenos">292</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-293"><a href="#Postgres-293"><span class="linenos">293</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">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="Postgres-294"><a href="#Postgres-294"><span class="linenos">294</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
-</span><span id="Postgres-295"><a href="#Postgres-295"><span class="linenos">295</span></a> <span class="p">}</span>
-</span><span id="Postgres-296"><a href="#Postgres-296"><span class="linenos">296</span></a>
-</span><span id="Postgres-297"><a href="#Postgres-297"><span class="linenos">297</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;$&quot;</span><span class="p">}</span>
-</span><span id="Postgres-298"><a href="#Postgres-298"><span class="linenos">298</span></a>
-</span><span id="Postgres-299"><a href="#Postgres-299"><span class="linenos">299</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="Postgres-300"><a href="#Postgres-300"><span class="linenos">300</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-301"><a href="#Postgres-301"><span class="linenos">301</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">PROPERTY_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres-302"><a href="#Postgres-302"><span class="linenos">302</span></a> <span class="s2">&quot;SET&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</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_set</span><span class="p">()),</span>
-</span><span id="Postgres-303"><a href="#Postgres-303"><span class="linenos">303</span></a> <span class="p">}</span>
-</span><span id="Postgres-304"><a href="#Postgres-304"><span class="linenos">304</span></a> <span class="n">PROPERTY_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;INPUT&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Postgres-305"><a href="#Postgres-305"><span class="linenos">305</span></a>
-</span><span id="Postgres-306"><a href="#Postgres-306"><span class="linenos">306</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-307"><a href="#Postgres-307"><span class="linenos">307</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><span id="Postgres-308"><a href="#Postgres-308"><span class="linenos">308</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
-</span><span id="Postgres-309"><a href="#Postgres-309"><span class="linenos">309</span></a> <span class="s2">&quot;GENERATE_SERIES&quot;</span><span class="p">:</span> <span class="n">_generate_series</span><span class="p">,</span>
-</span><span id="Postgres-310"><a href="#Postgres-310"><span class="linenos">310</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
-</span><span id="Postgres-311"><a href="#Postgres-311"><span class="linenos">311</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
-</span><span id="Postgres-312"><a href="#Postgres-312"><span class="linenos">312</span></a> <span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Postgres-313"><a href="#Postgres-313"><span class="linenos">313</span></a> <span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Postgres-314"><a href="#Postgres-314"><span class="linenos">314</span></a> <span class="s2">&quot;NOW&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="Postgres-315"><a href="#Postgres-315"><span class="linenos">315</span></a> <span class="s2">&quot;TO_CHAR&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="s2">&quot;postgres&quot;</span><span class="p">),</span>
-</span><span id="Postgres-316"><a href="#Postgres-316"><span class="linenos">316</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_to_timestamp</span><span class="p">,</span>
-</span><span id="Postgres-317"><a href="#Postgres-317"><span class="linenos">317</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres-193"><a href="#Postgres-193"><span class="linenos">193</span></a><span class="k">class</span> <span class="nc">Postgres</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="Postgres-194"><a href="#Postgres-194"><span class="linenos">194</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Postgres-195"><a href="#Postgres-195"><span class="linenos">195</span></a> <span class="n">TYPED_DIVISION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-196"><a href="#Postgres-196"><span class="linenos">196</span></a> <span class="n">CONCAT_COALESCE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-197"><a href="#Postgres-197"><span class="linenos">197</span></a> <span class="n">NULL_ORDERING</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="Postgres-198"><a href="#Postgres-198"><span class="linenos">198</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH24:MI:SS&#39;&quot;</span>
+</span><span id="Postgres-199"><a href="#Postgres-199"><span class="linenos">199</span></a>
+</span><span id="Postgres-200"><a href="#Postgres-200"><span class="linenos">200</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-201"><a href="#Postgres-201"><span class="linenos">201</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="Postgres-202"><a href="#Postgres-202"><span class="linenos">202</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="Postgres-203"><a href="#Postgres-203"><span class="linenos">203</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># 1-based day of week</span>
+</span><span id="Postgres-204"><a href="#Postgres-204"><span class="linenos">204</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month</span>
+</span><span id="Postgres-205"><a href="#Postgres-205"><span class="linenos">205</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># zero padded day of year</span>
+</span><span id="Postgres-206"><a href="#Postgres-206"><span class="linenos">206</span></a> <span class="s2">&quot;FMDD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># - is no leading zero for Python; same for FM in postgres</span>
+</span><span id="Postgres-207"><a href="#Postgres-207"><span class="linenos">207</span></a> <span class="s2">&quot;FMDDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span> <span class="c1"># day of year</span>
+</span><span id="Postgres-208"><a href="#Postgres-208"><span class="linenos">208</span></a> <span class="s2">&quot;FMHH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
+</span><span id="Postgres-209"><a href="#Postgres-209"><span class="linenos">209</span></a> <span class="s2">&quot;FMHH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span> <span class="c1"># 9</span>
+</span><span id="Postgres-210"><a href="#Postgres-210"><span class="linenos">210</span></a> <span class="s2">&quot;FMMI&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span> <span class="c1"># Minute</span>
+</span><span id="Postgres-211"><a href="#Postgres-211"><span class="linenos">211</span></a> <span class="s2">&quot;FMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span> <span class="c1"># 1</span>
+</span><span id="Postgres-212"><a href="#Postgres-212"><span class="linenos">212</span></a> <span class="s2">&quot;FMSS&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span> <span class="c1"># Second</span>
+</span><span id="Postgres-213"><a href="#Postgres-213"><span class="linenos">213</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
+</span><span id="Postgres-214"><a href="#Postgres-214"><span class="linenos">214</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># 09</span>
+</span><span id="Postgres-215"><a href="#Postgres-215"><span class="linenos">215</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># zero padded minute</span>
+</span><span id="Postgres-216"><a href="#Postgres-216"><span class="linenos">216</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># 01</span>
+</span><span id="Postgres-217"><a href="#Postgres-217"><span class="linenos">217</span></a> <span class="s2">&quot;OF&quot;</span><span class="p">:</span> <span class="s2">&quot;%z&quot;</span><span class="p">,</span> <span class="c1"># utc offset</span>
+</span><span id="Postgres-218"><a href="#Postgres-218"><span class="linenos">218</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># zero padded second</span>
+</span><span id="Postgres-219"><a href="#Postgres-219"><span class="linenos">219</span></a> <span class="s2">&quot;TMDay&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># TM is locale dependent</span>
+</span><span id="Postgres-220"><a href="#Postgres-220"><span class="linenos">220</span></a> <span class="s2">&quot;TMDy&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Postgres-221"><a href="#Postgres-221"><span class="linenos">221</span></a> <span class="s2">&quot;TMMon&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Sep</span>
+</span><span id="Postgres-222"><a href="#Postgres-222"><span class="linenos">222</span></a> <span class="s2">&quot;TMMonth&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># September</span>
+</span><span id="Postgres-223"><a href="#Postgres-223"><span class="linenos">223</span></a> <span class="s2">&quot;TZ&quot;</span><span class="p">:</span> <span class="s2">&quot;%Z&quot;</span><span class="p">,</span> <span class="c1"># uppercase timezone name</span>
+</span><span id="Postgres-224"><a href="#Postgres-224"><span class="linenos">224</span></a> <span class="s2">&quot;US&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 class="c1"># zero padded microsecond</span>
+</span><span id="Postgres-225"><a href="#Postgres-225"><span class="linenos">225</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%U&quot;</span><span class="p">,</span> <span class="c1"># 1-based week of year</span>
+</span><span id="Postgres-226"><a href="#Postgres-226"><span class="linenos">226</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
+</span><span id="Postgres-227"><a href="#Postgres-227"><span class="linenos">227</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
+</span><span id="Postgres-228"><a href="#Postgres-228"><span class="linenos">228</span></a> <span class="p">}</span>
+</span><span id="Postgres-229"><a href="#Postgres-229"><span class="linenos">229</span></a>
+</span><span id="Postgres-230"><a href="#Postgres-230"><span class="linenos">230</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="Postgres-231"><a href="#Postgres-231"><span class="linenos">231</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;b&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;B&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="Postgres-232"><a href="#Postgres-232"><span class="linenos">232</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;x&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="Postgres-233"><a href="#Postgres-233"><span class="linenos">233</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;e&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;E&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="Postgres-234"><a href="#Postgres-234"><span class="linenos">234</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="Postgres-235"><a href="#Postgres-235"><span class="linenos">235</span></a>
+</span><span id="Postgres-236"><a href="#Postgres-236"><span class="linenos">236</span></a> <span class="n">HEREDOC_TAG_IS_IDENTIFIER</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-237"><a href="#Postgres-237"><span class="linenos">237</span></a> <span class="n">HEREDOC_STRING_ALTERNATIVE</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
+</span><span id="Postgres-238"><a href="#Postgres-238"><span class="linenos">238</span></a>
+</span><span id="Postgres-239"><a href="#Postgres-239"><span class="linenos">239</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-240"><a href="#Postgres-240"><span class="linenos">240</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="Postgres-241"><a href="#Postgres-241"><span class="linenos">241</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="Postgres-242"><a href="#Postgres-242"><span class="linenos">242</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="Postgres-243"><a href="#Postgres-243"><span class="linenos">243</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
+</span><span id="Postgres-244"><a href="#Postgres-244"><span class="linenos">244</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
+</span><span id="Postgres-245"><a href="#Postgres-245"><span class="linenos">245</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
+</span><span id="Postgres-246"><a href="#Postgres-246"><span class="linenos">246</span></a> <span class="s2">&quot;@&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">,</span>
+</span><span id="Postgres-247"><a href="#Postgres-247"><span class="linenos">247</span></a> <span class="s2">&quot;&lt;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">,</span>
+</span><span id="Postgres-248"><a href="#Postgres-248"><span class="linenos">248</span></a> <span class="s2">&quot;BEGIN&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="Postgres-249"><a href="#Postgres-249"><span class="linenos">249</span></a> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="Postgres-250"><a href="#Postgres-250"><span class="linenos">250</span></a> <span class="s2">&quot;BIGSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
+</span><span id="Postgres-251"><a href="#Postgres-251"><span class="linenos">251</span></a> <span class="s2">&quot;CHARACTER VARYING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="Postgres-252"><a href="#Postgres-252"><span class="linenos">252</span></a> <span class="s2">&quot;CONSTRAINT TRIGGER&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="Postgres-253"><a href="#Postgres-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="Postgres-254"><a href="#Postgres-254"><span class="linenos">254</span></a> <span class="s2">&quot;DO&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="Postgres-255"><a href="#Postgres-255"><span class="linenos">255</span></a> <span class="s2">&quot;EXEC&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="Postgres-256"><a href="#Postgres-256"><span class="linenos">256</span></a> <span class="s2">&quot;HSTORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
+</span><span id="Postgres-257"><a href="#Postgres-257"><span class="linenos">257</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
+</span><span id="Postgres-258"><a href="#Postgres-258"><span class="linenos">258</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="Postgres-259"><a href="#Postgres-259"><span class="linenos">259</span></a> <span class="s2">&quot;REFRESH&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="Postgres-260"><a href="#Postgres-260"><span class="linenos">260</span></a> <span class="s2">&quot;REINDEX&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="Postgres-261"><a href="#Postgres-261"><span class="linenos">261</span></a> <span class="s2">&quot;RESET&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="Postgres-262"><a href="#Postgres-262"><span class="linenos">262</span></a> <span class="s2">&quot;REVOKE&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="Postgres-263"><a href="#Postgres-263"><span class="linenos">263</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
+</span><span id="Postgres-264"><a href="#Postgres-264"><span class="linenos">264</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
+</span><span id="Postgres-265"><a href="#Postgres-265"><span class="linenos">265</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="Postgres-266"><a href="#Postgres-266"><span class="linenos">266</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
+</span><span id="Postgres-267"><a href="#Postgres-267"><span class="linenos">267</span></a> <span class="s2">&quot;OID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-268"><a href="#Postgres-268"><span class="linenos">268</span></a> <span class="s2">&quot;OPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
+</span><span id="Postgres-269"><a href="#Postgres-269"><span class="linenos">269</span></a> <span class="s2">&quot;REGCLASS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-270"><a href="#Postgres-270"><span class="linenos">270</span></a> <span class="s2">&quot;REGCOLLATION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-271"><a href="#Postgres-271"><span class="linenos">271</span></a> <span class="s2">&quot;REGCONFIG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-272"><a href="#Postgres-272"><span class="linenos">272</span></a> <span class="s2">&quot;REGDICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-273"><a href="#Postgres-273"><span class="linenos">273</span></a> <span class="s2">&quot;REGNAMESPACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-274"><a href="#Postgres-274"><span class="linenos">274</span></a> <span class="s2">&quot;REGOPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-275"><a href="#Postgres-275"><span class="linenos">275</span></a> <span class="s2">&quot;REGOPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-276"><a href="#Postgres-276"><span class="linenos">276</span></a> <span class="s2">&quot;REGPROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-277"><a href="#Postgres-277"><span class="linenos">277</span></a> <span class="s2">&quot;REGPROCEDURE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-278"><a href="#Postgres-278"><span class="linenos">278</span></a> <span class="s2">&quot;REGROLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-279"><a href="#Postgres-279"><span class="linenos">279</span></a> <span class="s2">&quot;REGTYPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres-280"><a href="#Postgres-280"><span class="linenos">280</span></a> <span class="p">}</span>
+</span><span id="Postgres-281"><a href="#Postgres-281"><span class="linenos">281</span></a>
+</span><span id="Postgres-282"><a href="#Postgres-282"><span class="linenos">282</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-283"><a href="#Postgres-283"><span class="linenos">283</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">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="Postgres-284"><a href="#Postgres-284"><span class="linenos">284</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
+</span><span id="Postgres-285"><a href="#Postgres-285"><span class="linenos">285</span></a> <span class="p">}</span>
+</span><span id="Postgres-286"><a href="#Postgres-286"><span class="linenos">286</span></a>
+</span><span id="Postgres-287"><a href="#Postgres-287"><span class="linenos">287</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;$&quot;</span><span class="p">}</span>
+</span><span id="Postgres-288"><a href="#Postgres-288"><span class="linenos">288</span></a>
+</span><span id="Postgres-289"><a href="#Postgres-289"><span class="linenos">289</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="Postgres-290"><a href="#Postgres-290"><span class="linenos">290</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-291"><a href="#Postgres-291"><span class="linenos">291</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">PROPERTY_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres-292"><a href="#Postgres-292"><span class="linenos">292</span></a> <span class="s2">&quot;SET&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</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_set</span><span class="p">()),</span>
+</span><span id="Postgres-293"><a href="#Postgres-293"><span class="linenos">293</span></a> <span class="p">}</span>
+</span><span id="Postgres-294"><a href="#Postgres-294"><span class="linenos">294</span></a> <span class="n">PROPERTY_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;INPUT&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Postgres-295"><a href="#Postgres-295"><span class="linenos">295</span></a>
+</span><span id="Postgres-296"><a href="#Postgres-296"><span class="linenos">296</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-297"><a href="#Postgres-297"><span class="linenos">297</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><span id="Postgres-298"><a href="#Postgres-298"><span class="linenos">298</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="Postgres-299"><a href="#Postgres-299"><span class="linenos">299</span></a> <span class="s2">&quot;GENERATE_SERIES&quot;</span><span class="p">:</span> <span class="n">_generate_series</span><span class="p">,</span>
+</span><span id="Postgres-300"><a href="#Postgres-300"><span class="linenos">300</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
+</span><span id="Postgres-301"><a href="#Postgres-301"><span class="linenos">301</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
+</span><span id="Postgres-302"><a href="#Postgres-302"><span class="linenos">302</span></a> <span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres-303"><a href="#Postgres-303"><span class="linenos">303</span></a> <span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres-304"><a href="#Postgres-304"><span class="linenos">304</span></a> <span class="s2">&quot;NOW&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="Postgres-305"><a href="#Postgres-305"><span class="linenos">305</span></a> <span class="s2">&quot;TO_CHAR&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="s2">&quot;postgres&quot;</span><span class="p">),</span>
+</span><span id="Postgres-306"><a href="#Postgres-306"><span class="linenos">306</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_to_timestamp</span><span class="p">,</span>
+</span><span id="Postgres-307"><a href="#Postgres-307"><span class="linenos">307</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres-308"><a href="#Postgres-308"><span class="linenos">308</span></a> <span class="p">}</span>
+</span><span id="Postgres-309"><a href="#Postgres-309"><span class="linenos">309</span></a>
+</span><span id="Postgres-310"><a href="#Postgres-310"><span class="linenos">310</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-311"><a href="#Postgres-311"><span class="linenos">311</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres-312"><a href="#Postgres-312"><span class="linenos">312</span></a> <span class="s2">&quot;DATE_PART&quot;</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_date_part</span><span class="p">(),</span>
+</span><span id="Postgres-313"><a href="#Postgres-313"><span class="linenos">313</span></a> <span class="p">}</span>
+</span><span id="Postgres-314"><a href="#Postgres-314"><span class="linenos">314</span></a>
+</span><span id="Postgres-315"><a href="#Postgres-315"><span class="linenos">315</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-316"><a href="#Postgres-316"><span class="linenos">316</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">BITWISE</span><span class="p">,</span>
+</span><span id="Postgres-317"><a href="#Postgres-317"><span class="linenos">317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
</span><span id="Postgres-318"><a href="#Postgres-318"><span class="linenos">318</span></a> <span class="p">}</span>
</span><span id="Postgres-319"><a href="#Postgres-319"><span class="linenos">319</span></a>
-</span><span id="Postgres-320"><a href="#Postgres-320"><span class="linenos">320</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-321"><a href="#Postgres-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres-322"><a href="#Postgres-322"><span class="linenos">322</span></a> <span class="s2">&quot;DATE_PART&quot;</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_date_part</span><span class="p">(),</span>
-</span><span id="Postgres-323"><a href="#Postgres-323"><span class="linenos">323</span></a> <span class="p">}</span>
-</span><span id="Postgres-324"><a href="#Postgres-324"><span class="linenos">324</span></a>
-</span><span id="Postgres-325"><a href="#Postgres-325"><span class="linenos">325</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-326"><a href="#Postgres-326"><span class="linenos">326</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">BITWISE</span><span class="p">,</span>
-</span><span id="Postgres-327"><a href="#Postgres-327"><span class="linenos">327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
-</span><span id="Postgres-328"><a href="#Postgres-328"><span class="linenos">328</span></a> <span class="p">}</span>
-</span><span id="Postgres-329"><a href="#Postgres-329"><span class="linenos">329</span></a>
-</span><span id="Postgres-330"><a href="#Postgres-330"><span class="linenos">330</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-331"><a href="#Postgres-331"><span class="linenos">331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">,</span>
-</span><span id="Postgres-332"><a href="#Postgres-332"><span class="linenos">332</span></a> <span class="p">}</span>
-</span><span id="Postgres-333"><a href="#Postgres-333"><span class="linenos">333</span></a>
-</span><span id="Postgres-334"><a href="#Postgres-334"><span class="linenos">334</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-335"><a href="#Postgres-335"><span class="linenos">335</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres-336"><a href="#Postgres-336"><span class="linenos">336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">),</span>
-</span><span id="Postgres-337"><a href="#Postgres-337"><span class="linenos">337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">),</span>
-</span><span id="Postgres-338"><a href="#Postgres-338"><span class="linenos">338</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Postgres-339"><a href="#Postgres-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
-</span><span id="Postgres-340"><a href="#Postgres-340"><span class="linenos">340</span></a> <span class="p">),</span>
-</span><span id="Postgres-341"><a href="#Postgres-341"><span class="linenos">341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">),</span>
-</span><span id="Postgres-342"><a href="#Postgres-342"><span class="linenos">342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_operator</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Postgres-343"><a href="#Postgres-343"><span class="linenos">343</span></a> <span class="p">}</span>
+</span><span id="Postgres-320"><a href="#Postgres-320"><span class="linenos">320</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-321"><a href="#Postgres-321"><span class="linenos">321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">,</span>
+</span><span id="Postgres-322"><a href="#Postgres-322"><span class="linenos">322</span></a> <span class="p">}</span>
+</span><span id="Postgres-323"><a href="#Postgres-323"><span class="linenos">323</span></a>
+</span><span id="Postgres-324"><a href="#Postgres-324"><span class="linenos">324</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-325"><a href="#Postgres-325"><span class="linenos">325</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres-326"><a href="#Postgres-326"><span class="linenos">326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">),</span>
+</span><span id="Postgres-327"><a href="#Postgres-327"><span class="linenos">327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">),</span>
+</span><span id="Postgres-328"><a href="#Postgres-328"><span class="linenos">328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Postgres-329"><a href="#Postgres-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
+</span><span id="Postgres-330"><a href="#Postgres-330"><span class="linenos">330</span></a> <span class="p">),</span>
+</span><span id="Postgres-331"><a href="#Postgres-331"><span class="linenos">331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">),</span>
+</span><span id="Postgres-332"><a href="#Postgres-332"><span class="linenos">332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_operator</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Postgres-333"><a href="#Postgres-333"><span class="linenos">333</span></a> <span class="p">}</span>
+</span><span id="Postgres-334"><a href="#Postgres-334"><span class="linenos">334</span></a>
+</span><span id="Postgres-335"><a href="#Postgres-335"><span class="linenos">335</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-336"><a href="#Postgres-336"><span class="linenos">336</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><span id="Postgres-337"><a href="#Postgres-337"><span class="linenos">337</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_commit_or_rollback</span><span class="p">(),</span>
+</span><span id="Postgres-338"><a href="#Postgres-338"><span class="linenos">338</span></a> <span class="p">}</span>
+</span><span id="Postgres-339"><a href="#Postgres-339"><span class="linenos">339</span></a>
+</span><span id="Postgres-340"><a href="#Postgres-340"><span class="linenos">340</span></a> <span class="k">def</span> <span class="nf">_parse_operator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Postgres-341"><a href="#Postgres-341"><span class="linenos">341</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Postgres-342"><a href="#Postgres-342"><span class="linenos">342</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Postgres-343"><a href="#Postgres-343"><span class="linenos">343</span></a> <span class="k">break</span>
</span><span id="Postgres-344"><a href="#Postgres-344"><span class="linenos">344</span></a>
-</span><span id="Postgres-345"><a href="#Postgres-345"><span class="linenos">345</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-346"><a href="#Postgres-346"><span class="linenos">346</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><span id="Postgres-347"><a href="#Postgres-347"><span class="linenos">347</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_commit_or_rollback</span><span class="p">(),</span>
-</span><span id="Postgres-348"><a href="#Postgres-348"><span class="linenos">348</span></a> <span class="p">}</span>
+</span><span id="Postgres-345"><a href="#Postgres-345"><span class="linenos">345</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Postgres-346"><a href="#Postgres-346"><span class="linenos">346</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="Postgres-347"><a href="#Postgres-347"><span class="linenos">347</span></a> <span class="n">op</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Postgres-348"><a href="#Postgres-348"><span class="linenos">348</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Postgres-349"><a href="#Postgres-349"><span class="linenos">349</span></a>
-</span><span id="Postgres-350"><a href="#Postgres-350"><span class="linenos">350</span></a> <span class="k">def</span> <span class="nf">_parse_operator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Postgres-351"><a href="#Postgres-351"><span class="linenos">351</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Postgres-352"><a href="#Postgres-352"><span class="linenos">352</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Postgres-353"><a href="#Postgres-353"><span class="linenos">353</span></a> <span class="k">break</span>
-</span><span id="Postgres-354"><a href="#Postgres-354"><span class="linenos">354</span></a>
-</span><span id="Postgres-355"><a href="#Postgres-355"><span class="linenos">355</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Postgres-356"><a href="#Postgres-356"><span class="linenos">356</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="Postgres-357"><a href="#Postgres-357"><span class="linenos">357</span></a> <span class="n">op</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Postgres-358"><a href="#Postgres-358"><span class="linenos">358</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Postgres-359"><a href="#Postgres-359"><span class="linenos">359</span></a>
-</span><span id="Postgres-360"><a href="#Postgres-360"><span class="linenos">360</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><span id="Postgres-361"><a href="#Postgres-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Operator</span><span class="p">,</span>
-</span><span id="Postgres-362"><a href="#Postgres-362"><span class="linenos">362</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="Postgres-363"><a href="#Postgres-363"><span class="linenos">363</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Postgres-364"><a href="#Postgres-364"><span class="linenos">364</span></a> <span class="n">operator</span><span class="o">=</span><span class="n">op</span><span class="p">,</span>
-</span><span id="Postgres-365"><a href="#Postgres-365"><span class="linenos">365</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="Postgres-366"><a href="#Postgres-366"><span class="linenos">366</span></a> <span class="p">)</span>
+</span><span id="Postgres-350"><a href="#Postgres-350"><span class="linenos">350</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><span id="Postgres-351"><a href="#Postgres-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Operator</span><span class="p">,</span>
+</span><span id="Postgres-352"><a href="#Postgres-352"><span class="linenos">352</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="Postgres-353"><a href="#Postgres-353"><span class="linenos">353</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Postgres-354"><a href="#Postgres-354"><span class="linenos">354</span></a> <span class="n">operator</span><span class="o">=</span><span class="n">op</span><span class="p">,</span>
+</span><span id="Postgres-355"><a href="#Postgres-355"><span class="linenos">355</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="Postgres-356"><a href="#Postgres-356"><span class="linenos">356</span></a> <span class="p">)</span>
+</span><span id="Postgres-357"><a href="#Postgres-357"><span class="linenos">357</span></a>
+</span><span id="Postgres-358"><a href="#Postgres-358"><span class="linenos">358</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">):</span>
+</span><span id="Postgres-359"><a href="#Postgres-359"><span class="linenos">359</span></a> <span class="k">break</span>
+</span><span id="Postgres-360"><a href="#Postgres-360"><span class="linenos">360</span></a>
+</span><span id="Postgres-361"><a href="#Postgres-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Postgres-362"><a href="#Postgres-362"><span class="linenos">362</span></a>
+</span><span id="Postgres-363"><a href="#Postgres-363"><span class="linenos">363</span></a> <span class="k">def</span> <span class="nf">_parse_date_part</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="Postgres-364"><a href="#Postgres-364"><span class="linenos">364</span></a> <span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Postgres-365"><a href="#Postgres-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="Postgres-366"><a href="#Postgres-366"><span class="linenos">366</span></a> <span class="n">value</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="Postgres-367"><a href="#Postgres-367"><span class="linenos">367</span></a>
-</span><span id="Postgres-368"><a href="#Postgres-368"><span class="linenos">368</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">):</span>
-</span><span id="Postgres-369"><a href="#Postgres-369"><span class="linenos">369</span></a> <span class="k">break</span>
+</span><span id="Postgres-368"><a href="#Postgres-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="n">part</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Postgres-369"><a href="#Postgres-369"><span class="linenos">369</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Postgres-370"><a href="#Postgres-370"><span class="linenos">370</span></a>
-</span><span id="Postgres-371"><a href="#Postgres-371"><span class="linenos">371</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Postgres-371"><a href="#Postgres-371"><span class="linenos">371</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">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">part</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</span><span id="Postgres-372"><a href="#Postgres-372"><span class="linenos">372</span></a>
-</span><span id="Postgres-373"><a href="#Postgres-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">_parse_date_part</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="Postgres-374"><a href="#Postgres-374"><span class="linenos">374</span></a> <span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Postgres-375"><a href="#Postgres-375"><span class="linenos">375</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="Postgres-376"><a href="#Postgres-376"><span class="linenos">376</span></a> <span class="n">value</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="Postgres-377"><a href="#Postgres-377"><span class="linenos">377</span></a>
-</span><span id="Postgres-378"><a href="#Postgres-378"><span class="linenos">378</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="n">part</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Postgres-379"><a href="#Postgres-379"><span class="linenos">379</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Postgres-380"><a href="#Postgres-380"><span class="linenos">380</span></a>
-</span><span id="Postgres-381"><a href="#Postgres-381"><span class="linenos">381</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">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">part</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Postgres-382"><a href="#Postgres-382"><span class="linenos">382</span></a>
-</span><span id="Postgres-383"><a href="#Postgres-383"><span class="linenos">383</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="Postgres-384"><a href="#Postgres-384"><span class="linenos">384</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-385"><a href="#Postgres-385"><span class="linenos">385</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-386"><a href="#Postgres-386"><span class="linenos">386</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-387"><a href="#Postgres-387"><span class="linenos">387</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-388"><a href="#Postgres-388"><span class="linenos">388</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-389"><a href="#Postgres-389"><span class="linenos">389</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-390"><a href="#Postgres-390"><span class="linenos">390</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-391"><a href="#Postgres-391"><span class="linenos">391</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Postgres-392"><a href="#Postgres-392"><span class="linenos">392</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-393"><a href="#Postgres-393"><span class="linenos">393</span></a> <span class="n">TABLESAMPLE_SEED_KEYWORD</span> <span class="o">=</span> <span class="s2">&quot;REPEATABLE&quot;</span>
-</span><span id="Postgres-394"><a href="#Postgres-394"><span class="linenos">394</span></a> <span class="n">SUPPORTS_SELECT_INTO</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-395"><a href="#Postgres-395"><span class="linenos">395</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-396"><a href="#Postgres-396"><span class="linenos">396</span></a> <span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-397"><a href="#Postgres-397"><span class="linenos">397</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-398"><a href="#Postgres-398"><span class="linenos">398</span></a>
-</span><span id="Postgres-399"><a href="#Postgres-399"><span class="linenos">399</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-400"><a href="#Postgres-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
-</span><span id="Postgres-401"><a href="#Postgres-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
-</span><span id="Postgres-402"><a href="#Postgres-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
-</span><span id="Postgres-403"><a href="#Postgres-403"><span class="linenos">403</span></a> <span class="p">}</span>
-</span><span id="Postgres-404"><a href="#Postgres-404"><span class="linenos">404</span></a>
-</span><span id="Postgres-405"><a href="#Postgres-405"><span class="linenos">405</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-406"><a href="#Postgres-406"><span class="linenos">406</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><span id="Postgres-407"><a href="#Postgres-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="Postgres-408"><a href="#Postgres-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="Postgres-409"><a href="#Postgres-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="Postgres-410"><a href="#Postgres-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres-411"><a href="#Postgres-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres-412"><a href="#Postgres-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Postgres-413"><a href="#Postgres-413"><span class="linenos">413</span></a> <span class="p">}</span>
-</span><span id="Postgres-414"><a href="#Postgres-414"><span class="linenos">414</span></a>
-</span><span id="Postgres-415"><a href="#Postgres-415"><span class="linenos">415</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-416"><a href="#Postgres-416"><span class="linenos">416</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><span id="Postgres-417"><a href="#Postgres-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
-</span><span id="Postgres-418"><a href="#Postgres-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
-</span><span id="Postgres-419"><a href="#Postgres-419"><span class="linenos">419</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</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="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Postgres-420"><a href="#Postgres-420"><span class="linenos">420</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</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="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="Postgres-421"><a href="#Postgres-421"><span class="linenos">421</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="Postgres-422"><a href="#Postgres-422"><span class="linenos">422</span></a> <span class="p">),</span>
-</span><span id="Postgres-423"><a href="#Postgres-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
-</span><span id="Postgres-424"><a href="#Postgres-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&lt;@&quot;</span><span class="p">),</span>
-</span><span id="Postgres-425"><a href="#Postgres-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;@&gt;&quot;</span><span class="p">),</span>
-</span><span id="Postgres-426"><a href="#Postgres-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">),</span>
-</span><span id="Postgres-427"><a href="#Postgres-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">),</span>
-</span><span id="Postgres-428"><a href="#Postgres-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
-</span><span id="Postgres-429"><a href="#Postgres-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
-</span><span id="Postgres-430"><a href="#Postgres-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Postgres-431"><a href="#Postgres-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_USER&quot;</span><span class="p">,</span>
-</span><span id="Postgres-432"><a href="#Postgres-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
-</span><span id="Postgres-433"><a href="#Postgres-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
-</span><span id="Postgres-434"><a href="#Postgres-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="Postgres-435"><a href="#Postgres-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
-</span><span id="Postgres-436"><a href="#Postgres-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;-&quot;</span><span class="p">),</span>
-</span><span id="Postgres-437"><a href="#Postgres-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
-</span><span id="Postgres-438"><a href="#Postgres-438"><span class="linenos">438</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="Postgres-439"><a href="#Postgres-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Postgres-440"><a href="#Postgres-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Postgres-441"><a href="#Postgres-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&quot;</span><span class="p">),</span>
-</span><span id="Postgres-442"><a href="#Postgres-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">),</span>
-</span><span id="Postgres-443"><a href="#Postgres-443"><span class="linenos">443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">),</span>
-</span><span id="Postgres-444"><a href="#Postgres-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Postgres-445"><a href="#Postgres-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</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">json_path_part</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="Postgres-446"><a href="#Postgres-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</span><span class="p">:</span> <span class="n">no_last_day_sql</span><span class="p">,</span>
-</span><span id="Postgres-447"><a href="#Postgres-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="Postgres-448"><a href="#Postgres-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="Postgres-449"><a href="#Postgres-449"><span class="linenos">449</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="Postgres-450"><a href="#Postgres-450"><span class="linenos">450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
-</span><span id="Postgres-451"><a href="#Postgres-451"><span class="linenos">451</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="Postgres-452"><a href="#Postgres-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">merge_without_target_sql</span><span class="p">,</span>
-</span><span id="Postgres-453"><a href="#Postgres-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Postgres-454"><a href="#Postgres-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres-455"><a href="#Postgres-455"><span class="linenos">455</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Postgres-456"><a href="#Postgres-456"><span class="linenos">456</span></a> <span class="p">),</span>
-</span><span id="Postgres-457"><a href="#Postgres-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres-458"><a href="#Postgres-458"><span class="linenos">458</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Postgres-459"><a href="#Postgres-459"><span class="linenos">459</span></a> <span class="p">),</span>
-</span><span id="Postgres-460"><a href="#Postgres-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Postgres-461"><a href="#Postgres-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">),</span>
-</span><span id="Postgres-462"><a href="#Postgres-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
-</span><span id="Postgres-463"><a href="#Postgres-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~&quot;</span><span class="p">),</span>
-</span><span id="Postgres-464"><a href="#Postgres-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~*&quot;</span><span class="p">),</span>
-</span><span id="Postgres-465"><a href="#Postgres-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres-466"><a href="#Postgres-466"><span class="linenos">466</span></a> <span class="p">[</span>
-</span><span id="Postgres-467"><a href="#Postgres-467"><span class="linenos">467</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
-</span><span id="Postgres-468"><a href="#Postgres-468"><span class="linenos">468</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="Postgres-469"><a href="#Postgres-469"><span class="linenos">469</span></a> <span class="p">]</span>
-</span><span id="Postgres-470"><a href="#Postgres-470"><span class="linenos">470</span></a> <span class="p">),</span>
-</span><span id="Postgres-471"><a href="#Postgres-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="Postgres-472"><a href="#Postgres-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Postgres-473"><a href="#Postgres-473"><span class="linenos">473</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres-474"><a href="#Postgres-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
-</span><span id="Postgres-475"><a href="#Postgres-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">_substring_sql</span><span class="p">,</span>
-</span><span id="Postgres-476"><a href="#Postgres-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">),</span>
-</span><span id="Postgres-477"><a href="#Postgres-477"><span class="linenos">477</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Postgres-478"><a href="#Postgres-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="Postgres-479"><a href="#Postgres-479"><span class="linenos">479</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Postgres-480"><a href="#Postgres-480"><span class="linenos">480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres-481"><a href="#Postgres-481"><span class="linenos">481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Postgres-482"><a href="#Postgres-482"><span class="linenos">482</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="Postgres-483"><a href="#Postgres-483"><span class="linenos">483</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="Postgres-484"><a href="#Postgres-484"><span class="linenos">484</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
-</span><span id="Postgres-485"><a href="#Postgres-485"><span class="linenos">485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
-</span><span id="Postgres-486"><a href="#Postgres-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres-487"><a href="#Postgres-487"><span class="linenos">487</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
-</span><span id="Postgres-488"><a href="#Postgres-488"><span class="linenos">488</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Variance</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">),</span>
-</span><span id="Postgres-489"><a href="#Postgres-489"><span class="linenos">489</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="Postgres-490"><a href="#Postgres-490"><span class="linenos">490</span></a> <span class="p">}</span>
-</span><span id="Postgres-491"><a href="#Postgres-491"><span class="linenos">491</span></a>
-</span><span id="Postgres-492"><a href="#Postgres-492"><span class="linenos">492</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-493"><a href="#Postgres-493"><span class="linenos">493</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><span id="Postgres-494"><a href="#Postgres-494"><span class="linenos">494</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Postgres-495"><a href="#Postgres-495"><span class="linenos">495</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</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="Postgres-496"><a href="#Postgres-496"><span class="linenos">496</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="Postgres-497"><a href="#Postgres-497"><span class="linenos">497</span></a> <span class="p">}</span>
-</span><span id="Postgres-498"><a href="#Postgres-498"><span class="linenos">498</span></a>
-</span><span id="Postgres-499"><a href="#Postgres-499"><span class="linenos">499</span></a> <span class="k">def</span> <span class="nf">_jsonpathkey_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">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres-500"><a href="#Postgres-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Postgres-501"><a href="#Postgres-501"><span class="linenos">501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported wildcard in JSONPathKey expression&quot;</span><span class="p">)</span>
-</span><span id="Postgres-502"><a href="#Postgres-502"><span class="linenos">502</span></a>
-</span><span id="Postgres-503"><a href="#Postgres-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Postgres-504"><a href="#Postgres-504"><span class="linenos">504</span></a>
-</span><span id="Postgres-505"><a href="#Postgres-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres-506"><a href="#Postgres-506"><span class="linenos">506</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="Postgres-507"><a href="#Postgres-507"><span class="linenos">507</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="Postgres-508"><a href="#Postgres-508"><span class="linenos">508</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Postgres-509"><a href="#Postgres-509"><span class="linenos">509</span></a>
-</span><span id="Postgres-510"><a href="#Postgres-510"><span class="linenos">510</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Postgres-511"><a href="#Postgres-511"><span class="linenos">511</span></a>
-</span><span id="Postgres-512"><a href="#Postgres-512"><span class="linenos">512</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres-513"><a href="#Postgres-513"><span class="linenos">513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Postgres-514"><a href="#Postgres-514"><span class="linenos">514</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
-</span><span id="Postgres-515"><a href="#Postgres-515"><span class="linenos">515</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Postgres-516"><a href="#Postgres-516"><span class="linenos">516</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
+</span><span id="Postgres-373"><a href="#Postgres-373"><span class="linenos">373</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="Postgres-374"><a href="#Postgres-374"><span class="linenos">374</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-375"><a href="#Postgres-375"><span class="linenos">375</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-376"><a href="#Postgres-376"><span class="linenos">376</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-377"><a href="#Postgres-377"><span class="linenos">377</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-378"><a href="#Postgres-378"><span class="linenos">378</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-379"><a href="#Postgres-379"><span class="linenos">379</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-380"><a href="#Postgres-380"><span class="linenos">380</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-381"><a href="#Postgres-381"><span class="linenos">381</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Postgres-382"><a href="#Postgres-382"><span class="linenos">382</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-383"><a href="#Postgres-383"><span class="linenos">383</span></a> <span class="n">TABLESAMPLE_SEED_KEYWORD</span> <span class="o">=</span> <span class="s2">&quot;REPEATABLE&quot;</span>
+</span><span id="Postgres-384"><a href="#Postgres-384"><span class="linenos">384</span></a> <span class="n">SUPPORTS_SELECT_INTO</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-385"><a href="#Postgres-385"><span class="linenos">385</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-386"><a href="#Postgres-386"><span class="linenos">386</span></a> <span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-387"><a href="#Postgres-387"><span class="linenos">387</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-388"><a href="#Postgres-388"><span class="linenos">388</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-389"><a href="#Postgres-389"><span class="linenos">389</span></a>
+</span><span id="Postgres-390"><a href="#Postgres-390"><span class="linenos">390</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-391"><a href="#Postgres-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="Postgres-392"><a href="#Postgres-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="Postgres-393"><a href="#Postgres-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="Postgres-394"><a href="#Postgres-394"><span class="linenos">394</span></a> <span class="p">}</span>
+</span><span id="Postgres-395"><a href="#Postgres-395"><span class="linenos">395</span></a>
+</span><span id="Postgres-396"><a href="#Postgres-396"><span class="linenos">396</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-397"><a href="#Postgres-397"><span class="linenos">397</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><span id="Postgres-398"><a href="#Postgres-398"><span class="linenos">398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
+</span><span id="Postgres-399"><a href="#Postgres-399"><span class="linenos">399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="Postgres-400"><a href="#Postgres-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="Postgres-401"><a href="#Postgres-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres-402"><a href="#Postgres-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres-403"><a href="#Postgres-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Postgres-404"><a href="#Postgres-404"><span class="linenos">404</span></a> <span class="p">}</span>
+</span><span id="Postgres-405"><a href="#Postgres-405"><span class="linenos">405</span></a>
+</span><span id="Postgres-406"><a href="#Postgres-406"><span class="linenos">406</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-407"><a href="#Postgres-407"><span class="linenos">407</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><span id="Postgres-408"><a href="#Postgres-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="Postgres-409"><a href="#Postgres-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
+</span><span id="Postgres-410"><a href="#Postgres-410"><span class="linenos">410</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</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="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Postgres-411"><a href="#Postgres-411"><span class="linenos">411</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</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="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="Postgres-412"><a href="#Postgres-412"><span class="linenos">412</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="Postgres-413"><a href="#Postgres-413"><span class="linenos">413</span></a> <span class="p">),</span>
+</span><span id="Postgres-414"><a href="#Postgres-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="Postgres-415"><a href="#Postgres-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&lt;@&quot;</span><span class="p">),</span>
+</span><span id="Postgres-416"><a href="#Postgres-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;@&gt;&quot;</span><span class="p">),</span>
+</span><span id="Postgres-417"><a href="#Postgres-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">),</span>
+</span><span id="Postgres-418"><a href="#Postgres-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">),</span>
+</span><span id="Postgres-419"><a href="#Postgres-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
+</span><span id="Postgres-420"><a href="#Postgres-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
+</span><span id="Postgres-421"><a href="#Postgres-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Postgres-422"><a href="#Postgres-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_USER&quot;</span><span class="p">,</span>
+</span><span id="Postgres-423"><a href="#Postgres-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
+</span><span id="Postgres-424"><a href="#Postgres-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
+</span><span id="Postgres-425"><a href="#Postgres-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="Postgres-426"><a href="#Postgres-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="Postgres-427"><a href="#Postgres-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;-&quot;</span><span class="p">),</span>
+</span><span id="Postgres-428"><a href="#Postgres-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
+</span><span id="Postgres-429"><a href="#Postgres-429"><span class="linenos">429</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="Postgres-430"><a href="#Postgres-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">),</span>
+</span><span id="Postgres-431"><a href="#Postgres-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">),</span>
+</span><span id="Postgres-432"><a href="#Postgres-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&quot;</span><span class="p">),</span>
+</span><span id="Postgres-433"><a href="#Postgres-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">),</span>
+</span><span id="Postgres-434"><a href="#Postgres-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">),</span>
+</span><span id="Postgres-435"><a href="#Postgres-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">:</span> <span class="n">json_path_key_only_name</span><span class="p">,</span>
+</span><span id="Postgres-436"><a href="#Postgres-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Postgres-437"><a href="#Postgres-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</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">json_path_part</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="Postgres-438"><a href="#Postgres-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</span><span class="p">:</span> <span class="n">no_last_day_sql</span><span class="p">,</span>
+</span><span id="Postgres-439"><a href="#Postgres-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="Postgres-440"><a href="#Postgres-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="Postgres-441"><a href="#Postgres-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="Postgres-442"><a href="#Postgres-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
+</span><span id="Postgres-443"><a href="#Postgres-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="Postgres-444"><a href="#Postgres-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">merge_without_target_sql</span><span class="p">,</span>
+</span><span id="Postgres-445"><a href="#Postgres-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Postgres-446"><a href="#Postgres-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Postgres-447"><a href="#Postgres-447"><span class="linenos">447</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Postgres-448"><a href="#Postgres-448"><span class="linenos">448</span></a> <span class="p">),</span>
+</span><span id="Postgres-449"><a href="#Postgres-449"><span class="linenos">449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Postgres-450"><a href="#Postgres-450"><span class="linenos">450</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Postgres-451"><a href="#Postgres-451"><span class="linenos">451</span></a> <span class="p">),</span>
+</span><span id="Postgres-452"><a href="#Postgres-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Postgres-453"><a href="#Postgres-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">),</span>
+</span><span id="Postgres-454"><a href="#Postgres-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
+</span><span id="Postgres-455"><a href="#Postgres-455"><span class="linenos">455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~&quot;</span><span class="p">),</span>
+</span><span id="Postgres-456"><a href="#Postgres-456"><span class="linenos">456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~*&quot;</span><span class="p">),</span>
+</span><span id="Postgres-457"><a href="#Postgres-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Postgres-458"><a href="#Postgres-458"><span class="linenos">458</span></a> <span class="p">[</span>
+</span><span id="Postgres-459"><a href="#Postgres-459"><span class="linenos">459</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
+</span><span id="Postgres-460"><a href="#Postgres-460"><span class="linenos">460</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="Postgres-461"><a href="#Postgres-461"><span class="linenos">461</span></a> <span class="p">]</span>
+</span><span id="Postgres-462"><a href="#Postgres-462"><span class="linenos">462</span></a> <span class="p">),</span>
+</span><span id="Postgres-463"><a href="#Postgres-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="Postgres-464"><a href="#Postgres-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Postgres-465"><a href="#Postgres-465"><span class="linenos">465</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres-466"><a href="#Postgres-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="Postgres-467"><a href="#Postgres-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">_substring_sql</span><span class="p">,</span>
+</span><span id="Postgres-468"><a href="#Postgres-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">),</span>
+</span><span id="Postgres-469"><a href="#Postgres-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Postgres-470"><a href="#Postgres-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="Postgres-471"><a href="#Postgres-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Postgres-472"><a href="#Postgres-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres-473"><a href="#Postgres-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Postgres-474"><a href="#Postgres-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
+</span><span id="Postgres-475"><a href="#Postgres-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="Postgres-476"><a href="#Postgres-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
+</span><span id="Postgres-477"><a href="#Postgres-477"><span class="linenos">477</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
+</span><span id="Postgres-478"><a href="#Postgres-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres-479"><a href="#Postgres-479"><span class="linenos">479</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
+</span><span id="Postgres-480"><a href="#Postgres-480"><span class="linenos">480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Variance</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">),</span>
+</span><span id="Postgres-481"><a href="#Postgres-481"><span class="linenos">481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="Postgres-482"><a href="#Postgres-482"><span class="linenos">482</span></a> <span class="p">}</span>
+</span><span id="Postgres-483"><a href="#Postgres-483"><span class="linenos">483</span></a>
+</span><span id="Postgres-484"><a href="#Postgres-484"><span class="linenos">484</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-485"><a href="#Postgres-485"><span class="linenos">485</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><span id="Postgres-486"><a href="#Postgres-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Postgres-487"><a href="#Postgres-487"><span class="linenos">487</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</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="Postgres-488"><a href="#Postgres-488"><span class="linenos">488</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="Postgres-489"><a href="#Postgres-489"><span class="linenos">489</span></a> <span class="p">}</span>
+</span><span id="Postgres-490"><a href="#Postgres-490"><span class="linenos">490</span></a>
+</span><span id="Postgres-491"><a href="#Postgres-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres-492"><a href="#Postgres-492"><span class="linenos">492</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="Postgres-493"><a href="#Postgres-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="Postgres-494"><a href="#Postgres-494"><span class="linenos">494</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Postgres-495"><a href="#Postgres-495"><span class="linenos">495</span></a>
+</span><span id="Postgres-496"><a href="#Postgres-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Postgres-497"><a href="#Postgres-497"><span class="linenos">497</span></a>
+</span><span id="Postgres-498"><a href="#Postgres-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres-499"><a href="#Postgres-499"><span class="linenos">499</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Postgres-500"><a href="#Postgres-500"><span class="linenos">500</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="Postgres-501"><a href="#Postgres-501"><span class="linenos">501</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Postgres-502"><a href="#Postgres-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
@@ -1513,61 +1507,64 @@ Possible values: <code>"nulls_are_small"</code>, <code>"nulls_are_large"</code>,
</div>
<a class="headerlink" href="#Postgres.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Tokenizer-243"><a href="#Postgres.Tokenizer-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="Postgres.Tokenizer-244"><a href="#Postgres.Tokenizer-244"><span class="linenos">244</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;b&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;B&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="Postgres.Tokenizer-245"><a href="#Postgres.Tokenizer-245"><span class="linenos">245</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;x&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="Postgres.Tokenizer-246"><a href="#Postgres.Tokenizer-246"><span class="linenos">246</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;e&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;E&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
-</span><span id="Postgres.Tokenizer-247"><a href="#Postgres.Tokenizer-247"><span class="linenos">247</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="Postgres.Tokenizer-248"><a href="#Postgres.Tokenizer-248"><span class="linenos">248</span></a>
-</span><span id="Postgres.Tokenizer-249"><a href="#Postgres.Tokenizer-249"><span class="linenos">249</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Tokenizer-250"><a href="#Postgres.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="Postgres.Tokenizer-251"><a href="#Postgres.Tokenizer-251"><span class="linenos">251</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-252"><a href="#Postgres.Tokenizer-252"><span class="linenos">252</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-253"><a href="#Postgres.Tokenizer-253"><span class="linenos">253</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-254"><a href="#Postgres.Tokenizer-254"><span class="linenos">254</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-255"><a href="#Postgres.Tokenizer-255"><span class="linenos">255</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-256"><a href="#Postgres.Tokenizer-256"><span class="linenos">256</span></a> <span class="s2">&quot;@&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-257"><a href="#Postgres.Tokenizer-257"><span class="linenos">257</span></a> <span class="s2">&quot;&lt;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-258"><a href="#Postgres.Tokenizer-258"><span class="linenos">258</span></a> <span class="s2">&quot;BEGIN&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="Postgres.Tokenizer-259"><a href="#Postgres.Tokenizer-259"><span class="linenos">259</span></a> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-260"><a href="#Postgres.Tokenizer-260"><span class="linenos">260</span></a> <span class="s2">&quot;BIGSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-261"><a href="#Postgres.Tokenizer-261"><span class="linenos">261</span></a> <span class="s2">&quot;CHARACTER VARYING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-262"><a href="#Postgres.Tokenizer-262"><span class="linenos">262</span></a> <span class="s2">&quot;CONSTRAINT TRIGGER&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="Postgres.Tokenizer-263"><a href="#Postgres.Tokenizer-263"><span class="linenos">263</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="Postgres.Tokenizer-264"><a href="#Postgres.Tokenizer-264"><span class="linenos">264</span></a> <span class="s2">&quot;DO&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="Postgres.Tokenizer-265"><a href="#Postgres.Tokenizer-265"><span class="linenos">265</span></a> <span class="s2">&quot;EXEC&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="Postgres.Tokenizer-266"><a href="#Postgres.Tokenizer-266"><span class="linenos">266</span></a> <span class="s2">&quot;HSTORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-267"><a href="#Postgres.Tokenizer-267"><span class="linenos">267</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-268"><a href="#Postgres.Tokenizer-268"><span class="linenos">268</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="Postgres.Tokenizer-269"><a href="#Postgres.Tokenizer-269"><span class="linenos">269</span></a> <span class="s2">&quot;REFRESH&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="Postgres.Tokenizer-270"><a href="#Postgres.Tokenizer-270"><span class="linenos">270</span></a> <span class="s2">&quot;REINDEX&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="Postgres.Tokenizer-271"><a href="#Postgres.Tokenizer-271"><span class="linenos">271</span></a> <span class="s2">&quot;RESET&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="Postgres.Tokenizer-272"><a href="#Postgres.Tokenizer-272"><span class="linenos">272</span></a> <span class="s2">&quot;REVOKE&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="Postgres.Tokenizer-273"><a href="#Postgres.Tokenizer-273"><span class="linenos">273</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-274"><a href="#Postgres.Tokenizer-274"><span class="linenos">274</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-275"><a href="#Postgres.Tokenizer-275"><span class="linenos">275</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-276"><a href="#Postgres.Tokenizer-276"><span class="linenos">276</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-277"><a href="#Postgres.Tokenizer-277"><span class="linenos">277</span></a> <span class="s2">&quot;OID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-278"><a href="#Postgres.Tokenizer-278"><span class="linenos">278</span></a> <span class="s2">&quot;OPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-279"><a href="#Postgres.Tokenizer-279"><span class="linenos">279</span></a> <span class="s2">&quot;REGCLASS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-280"><a href="#Postgres.Tokenizer-280"><span class="linenos">280</span></a> <span class="s2">&quot;REGCOLLATION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-281"><a href="#Postgres.Tokenizer-281"><span class="linenos">281</span></a> <span class="s2">&quot;REGCONFIG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-282"><a href="#Postgres.Tokenizer-282"><span class="linenos">282</span></a> <span class="s2">&quot;REGDICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-283"><a href="#Postgres.Tokenizer-283"><span class="linenos">283</span></a> <span class="s2">&quot;REGNAMESPACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-284"><a href="#Postgres.Tokenizer-284"><span class="linenos">284</span></a> <span class="s2">&quot;REGOPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-285"><a href="#Postgres.Tokenizer-285"><span class="linenos">285</span></a> <span class="s2">&quot;REGOPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-286"><a href="#Postgres.Tokenizer-286"><span class="linenos">286</span></a> <span class="s2">&quot;REGPROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-287"><a href="#Postgres.Tokenizer-287"><span class="linenos">287</span></a> <span class="s2">&quot;REGPROCEDURE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-288"><a href="#Postgres.Tokenizer-288"><span class="linenos">288</span></a> <span class="s2">&quot;REGROLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-289"><a href="#Postgres.Tokenizer-289"><span class="linenos">289</span></a> <span class="s2">&quot;REGTYPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-290"><a href="#Postgres.Tokenizer-290"><span class="linenos">290</span></a> <span class="p">}</span>
-</span><span id="Postgres.Tokenizer-291"><a href="#Postgres.Tokenizer-291"><span class="linenos">291</span></a>
-</span><span id="Postgres.Tokenizer-292"><a href="#Postgres.Tokenizer-292"><span class="linenos">292</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Tokenizer-293"><a href="#Postgres.Tokenizer-293"><span class="linenos">293</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">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-294"><a href="#Postgres.Tokenizer-294"><span class="linenos">294</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
-</span><span id="Postgres.Tokenizer-295"><a href="#Postgres.Tokenizer-295"><span class="linenos">295</span></a> <span class="p">}</span>
-</span><span id="Postgres.Tokenizer-296"><a href="#Postgres.Tokenizer-296"><span class="linenos">296</span></a>
-</span><span id="Postgres.Tokenizer-297"><a href="#Postgres.Tokenizer-297"><span class="linenos">297</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</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="Postgres.Tokenizer-230"><a href="#Postgres.Tokenizer-230"><span class="linenos">230</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="Postgres.Tokenizer-231"><a href="#Postgres.Tokenizer-231"><span class="linenos">231</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;b&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;B&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="Postgres.Tokenizer-232"><a href="#Postgres.Tokenizer-232"><span class="linenos">232</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;x&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="Postgres.Tokenizer-233"><a href="#Postgres.Tokenizer-233"><span class="linenos">233</span></a> <span class="n">BYTE_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;e&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;E&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
+</span><span id="Postgres.Tokenizer-234"><a href="#Postgres.Tokenizer-234"><span class="linenos">234</span></a> <span class="n">HEREDOC_STRINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="Postgres.Tokenizer-235"><a href="#Postgres.Tokenizer-235"><span class="linenos">235</span></a>
+</span><span id="Postgres.Tokenizer-236"><a href="#Postgres.Tokenizer-236"><span class="linenos">236</span></a> <span class="n">HEREDOC_TAG_IS_IDENTIFIER</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Tokenizer-237"><a href="#Postgres.Tokenizer-237"><span class="linenos">237</span></a> <span class="n">HEREDOC_STRING_ALTERNATIVE</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
+</span><span id="Postgres.Tokenizer-238"><a href="#Postgres.Tokenizer-238"><span class="linenos">238</span></a>
+</span><span id="Postgres.Tokenizer-239"><a href="#Postgres.Tokenizer-239"><span class="linenos">239</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Tokenizer-240"><a href="#Postgres.Tokenizer-240"><span class="linenos">240</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="Postgres.Tokenizer-241"><a href="#Postgres.Tokenizer-241"><span class="linenos">241</span></a> <span class="s2">&quot;~~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-242"><a href="#Postgres.Tokenizer-242"><span class="linenos">242</span></a> <span class="s2">&quot;~~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-243"><a href="#Postgres.Tokenizer-243"><span class="linenos">243</span></a> <span class="s2">&quot;~*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-244"><a href="#Postgres.Tokenizer-244"><span class="linenos">244</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-245"><a href="#Postgres.Tokenizer-245"><span class="linenos">245</span></a> <span class="s2">&quot;@@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-246"><a href="#Postgres.Tokenizer-246"><span class="linenos">246</span></a> <span class="s2">&quot;@&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-247"><a href="#Postgres.Tokenizer-247"><span class="linenos">247</span></a> <span class="s2">&quot;&lt;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-248"><a href="#Postgres.Tokenizer-248"><span class="linenos">248</span></a> <span class="s2">&quot;BEGIN&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="Postgres.Tokenizer-249"><a href="#Postgres.Tokenizer-249"><span class="linenos">249</span></a> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-250"><a href="#Postgres.Tokenizer-250"><span class="linenos">250</span></a> <span class="s2">&quot;BIGSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-251"><a href="#Postgres.Tokenizer-251"><span class="linenos">251</span></a> <span class="s2">&quot;CHARACTER VARYING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-252"><a href="#Postgres.Tokenizer-252"><span class="linenos">252</span></a> <span class="s2">&quot;CONSTRAINT TRIGGER&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="Postgres.Tokenizer-253"><a href="#Postgres.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="Postgres.Tokenizer-254"><a href="#Postgres.Tokenizer-254"><span class="linenos">254</span></a> <span class="s2">&quot;DO&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="Postgres.Tokenizer-255"><a href="#Postgres.Tokenizer-255"><span class="linenos">255</span></a> <span class="s2">&quot;EXEC&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="Postgres.Tokenizer-256"><a href="#Postgres.Tokenizer-256"><span class="linenos">256</span></a> <span class="s2">&quot;HSTORE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-257"><a href="#Postgres.Tokenizer-257"><span class="linenos">257</span></a> <span class="s2">&quot;JSONB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-258"><a href="#Postgres.Tokenizer-258"><span class="linenos">258</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="Postgres.Tokenizer-259"><a href="#Postgres.Tokenizer-259"><span class="linenos">259</span></a> <span class="s2">&quot;REFRESH&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="Postgres.Tokenizer-260"><a href="#Postgres.Tokenizer-260"><span class="linenos">260</span></a> <span class="s2">&quot;REINDEX&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="Postgres.Tokenizer-261"><a href="#Postgres.Tokenizer-261"><span class="linenos">261</span></a> <span class="s2">&quot;RESET&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="Postgres.Tokenizer-262"><a href="#Postgres.Tokenizer-262"><span class="linenos">262</span></a> <span class="s2">&quot;REVOKE&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="Postgres.Tokenizer-263"><a href="#Postgres.Tokenizer-263"><span class="linenos">263</span></a> <span class="s2">&quot;SERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-264"><a href="#Postgres.Tokenizer-264"><span class="linenos">264</span></a> <span class="s2">&quot;SMALLSERIAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-265"><a href="#Postgres.Tokenizer-265"><span class="linenos">265</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-266"><a href="#Postgres.Tokenizer-266"><span class="linenos">266</span></a> <span class="s2">&quot;CSTRING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-267"><a href="#Postgres.Tokenizer-267"><span class="linenos">267</span></a> <span class="s2">&quot;OID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-268"><a href="#Postgres.Tokenizer-268"><span class="linenos">268</span></a> <span class="s2">&quot;OPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-269"><a href="#Postgres.Tokenizer-269"><span class="linenos">269</span></a> <span class="s2">&quot;REGCLASS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-270"><a href="#Postgres.Tokenizer-270"><span class="linenos">270</span></a> <span class="s2">&quot;REGCOLLATION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-271"><a href="#Postgres.Tokenizer-271"><span class="linenos">271</span></a> <span class="s2">&quot;REGCONFIG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-272"><a href="#Postgres.Tokenizer-272"><span class="linenos">272</span></a> <span class="s2">&quot;REGDICTIONARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-273"><a href="#Postgres.Tokenizer-273"><span class="linenos">273</span></a> <span class="s2">&quot;REGNAMESPACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-274"><a href="#Postgres.Tokenizer-274"><span class="linenos">274</span></a> <span class="s2">&quot;REGOPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-275"><a href="#Postgres.Tokenizer-275"><span class="linenos">275</span></a> <span class="s2">&quot;REGOPERATOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-276"><a href="#Postgres.Tokenizer-276"><span class="linenos">276</span></a> <span class="s2">&quot;REGPROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-277"><a href="#Postgres.Tokenizer-277"><span class="linenos">277</span></a> <span class="s2">&quot;REGPROCEDURE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-278"><a href="#Postgres.Tokenizer-278"><span class="linenos">278</span></a> <span class="s2">&quot;REGROLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-279"><a href="#Postgres.Tokenizer-279"><span class="linenos">279</span></a> <span class="s2">&quot;REGTYPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-280"><a href="#Postgres.Tokenizer-280"><span class="linenos">280</span></a> <span class="p">}</span>
+</span><span id="Postgres.Tokenizer-281"><a href="#Postgres.Tokenizer-281"><span class="linenos">281</span></a>
+</span><span id="Postgres.Tokenizer-282"><a href="#Postgres.Tokenizer-282"><span class="linenos">282</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Tokenizer-283"><a href="#Postgres.Tokenizer-283"><span class="linenos">283</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">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-284"><a href="#Postgres.Tokenizer-284"><span class="linenos">284</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">,</span>
+</span><span id="Postgres.Tokenizer-285"><a href="#Postgres.Tokenizer-285"><span class="linenos">285</span></a> <span class="p">}</span>
+</span><span id="Postgres.Tokenizer-286"><a href="#Postgres.Tokenizer-286"><span class="linenos">286</span></a>
+</span><span id="Postgres.Tokenizer-287"><a href="#Postgres.Tokenizer-287"><span class="linenos">287</span></a> <span class="n">VAR_SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;$&quot;</span><span class="p">}</span>
</span></pre></div>
@@ -1621,6 +1618,30 @@ Possible values: <code>"nulls_are_small"</code>, <code>"nulls_are_large"</code>,
</div>
+ <div id="Postgres.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEREDOC_TAG_IS_IDENTIFIER</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Postgres.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER"></a>
+
+
+
+ </div>
+ <div id="Postgres.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEREDOC_STRING_ALTERNATIVE</span> =
+<span class="default_value">&lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Postgres.Tokenizer.HEREDOC_STRING_ALTERNATIVE"></a>
+
+
+
+ </div>
<div id="Postgres.Tokenizer.KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">KEYWORDS</span> =
@@ -1699,89 +1720,89 @@ Possible values: <code>"nulls_are_small"</code>, <code>"nulls_are_large"</code>,
</div>
<a class="headerlink" href="#Postgres.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Parser-299"><a href="#Postgres.Parser-299"><span class="linenos">299</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="Postgres.Parser-300"><a href="#Postgres.Parser-300"><span class="linenos">300</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-301"><a href="#Postgres.Parser-301"><span class="linenos">301</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">PROPERTY_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres.Parser-302"><a href="#Postgres.Parser-302"><span class="linenos">302</span></a> <span class="s2">&quot;SET&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</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_set</span><span class="p">()),</span>
-</span><span id="Postgres.Parser-303"><a href="#Postgres.Parser-303"><span class="linenos">303</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-304"><a href="#Postgres.Parser-304"><span class="linenos">304</span></a> <span class="n">PROPERTY_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;INPUT&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Postgres.Parser-305"><a href="#Postgres.Parser-305"><span class="linenos">305</span></a>
-</span><span id="Postgres.Parser-306"><a href="#Postgres.Parser-306"><span class="linenos">306</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-307"><a href="#Postgres.Parser-307"><span class="linenos">307</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><span id="Postgres.Parser-308"><a href="#Postgres.Parser-308"><span class="linenos">308</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
-</span><span id="Postgres.Parser-309"><a href="#Postgres.Parser-309"><span class="linenos">309</span></a> <span class="s2">&quot;GENERATE_SERIES&quot;</span><span class="p">:</span> <span class="n">_generate_series</span><span class="p">,</span>
-</span><span id="Postgres.Parser-310"><a href="#Postgres.Parser-310"><span class="linenos">310</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
-</span><span id="Postgres.Parser-311"><a href="#Postgres.Parser-311"><span class="linenos">311</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
-</span><span id="Postgres.Parser-312"><a href="#Postgres.Parser-312"><span class="linenos">312</span></a> <span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Postgres.Parser-313"><a href="#Postgres.Parser-313"><span class="linenos">313</span></a> <span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Postgres.Parser-314"><a href="#Postgres.Parser-314"><span class="linenos">314</span></a> <span class="s2">&quot;NOW&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="Postgres.Parser-315"><a href="#Postgres.Parser-315"><span class="linenos">315</span></a> <span class="s2">&quot;TO_CHAR&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="s2">&quot;postgres&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Parser-316"><a href="#Postgres.Parser-316"><span class="linenos">316</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_to_timestamp</span><span class="p">,</span>
-</span><span id="Postgres.Parser-317"><a href="#Postgres.Parser-317"><span class="linenos">317</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Parser-289"><a href="#Postgres.Parser-289"><span class="linenos">289</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="Postgres.Parser-290"><a href="#Postgres.Parser-290"><span class="linenos">290</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-291"><a href="#Postgres.Parser-291"><span class="linenos">291</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">PROPERTY_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres.Parser-292"><a href="#Postgres.Parser-292"><span class="linenos">292</span></a> <span class="s2">&quot;SET&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</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_set</span><span class="p">()),</span>
+</span><span id="Postgres.Parser-293"><a href="#Postgres.Parser-293"><span class="linenos">293</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-294"><a href="#Postgres.Parser-294"><span class="linenos">294</span></a> <span class="n">PROPERTY_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;INPUT&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Postgres.Parser-295"><a href="#Postgres.Parser-295"><span class="linenos">295</span></a>
+</span><span id="Postgres.Parser-296"><a href="#Postgres.Parser-296"><span class="linenos">296</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-297"><a href="#Postgres.Parser-297"><span class="linenos">297</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><span id="Postgres.Parser-298"><a href="#Postgres.Parser-298"><span class="linenos">298</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">parse_timestamp_trunc</span><span class="p">,</span>
+</span><span id="Postgres.Parser-299"><a href="#Postgres.Parser-299"><span class="linenos">299</span></a> <span class="s2">&quot;GENERATE_SERIES&quot;</span><span class="p">:</span> <span class="n">_generate_series</span><span class="p">,</span>
+</span><span id="Postgres.Parser-300"><a href="#Postgres.Parser-300"><span class="linenos">300</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
+</span><span id="Postgres.Parser-301"><a href="#Postgres.Parser-301"><span class="linenos">301</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
+</span><span id="Postgres.Parser-302"><a href="#Postgres.Parser-302"><span class="linenos">302</span></a> <span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres.Parser-303"><a href="#Postgres.Parser-303"><span class="linenos">303</span></a> <span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres.Parser-304"><a href="#Postgres.Parser-304"><span class="linenos">304</span></a> <span class="s2">&quot;NOW&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="Postgres.Parser-305"><a href="#Postgres.Parser-305"><span class="linenos">305</span></a> <span class="s2">&quot;TO_CHAR&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="s2">&quot;postgres&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Parser-306"><a href="#Postgres.Parser-306"><span class="linenos">306</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_to_timestamp</span><span class="p">,</span>
+</span><span id="Postgres.Parser-307"><a href="#Postgres.Parser-307"><span class="linenos">307</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Postgres.Parser-308"><a href="#Postgres.Parser-308"><span class="linenos">308</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-309"><a href="#Postgres.Parser-309"><span class="linenos">309</span></a>
+</span><span id="Postgres.Parser-310"><a href="#Postgres.Parser-310"><span class="linenos">310</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-311"><a href="#Postgres.Parser-311"><span class="linenos">311</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres.Parser-312"><a href="#Postgres.Parser-312"><span class="linenos">312</span></a> <span class="s2">&quot;DATE_PART&quot;</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_date_part</span><span class="p">(),</span>
+</span><span id="Postgres.Parser-313"><a href="#Postgres.Parser-313"><span class="linenos">313</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-314"><a href="#Postgres.Parser-314"><span class="linenos">314</span></a>
+</span><span id="Postgres.Parser-315"><a href="#Postgres.Parser-315"><span class="linenos">315</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-316"><a href="#Postgres.Parser-316"><span class="linenos">316</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">BITWISE</span><span class="p">,</span>
+</span><span id="Postgres.Parser-317"><a href="#Postgres.Parser-317"><span class="linenos">317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
</span><span id="Postgres.Parser-318"><a href="#Postgres.Parser-318"><span class="linenos">318</span></a> <span class="p">}</span>
</span><span id="Postgres.Parser-319"><a href="#Postgres.Parser-319"><span class="linenos">319</span></a>
-</span><span id="Postgres.Parser-320"><a href="#Postgres.Parser-320"><span class="linenos">320</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-321"><a href="#Postgres.Parser-321"><span class="linenos">321</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres.Parser-322"><a href="#Postgres.Parser-322"><span class="linenos">322</span></a> <span class="s2">&quot;DATE_PART&quot;</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_date_part</span><span class="p">(),</span>
-</span><span id="Postgres.Parser-323"><a href="#Postgres.Parser-323"><span class="linenos">323</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-324"><a href="#Postgres.Parser-324"><span class="linenos">324</span></a>
-</span><span id="Postgres.Parser-325"><a href="#Postgres.Parser-325"><span class="linenos">325</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-326"><a href="#Postgres.Parser-326"><span class="linenos">326</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">BITWISE</span><span class="p">,</span>
-</span><span id="Postgres.Parser-327"><a href="#Postgres.Parser-327"><span class="linenos">327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
-</span><span id="Postgres.Parser-328"><a href="#Postgres.Parser-328"><span class="linenos">328</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-329"><a href="#Postgres.Parser-329"><span class="linenos">329</span></a>
-</span><span id="Postgres.Parser-330"><a href="#Postgres.Parser-330"><span class="linenos">330</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-331"><a href="#Postgres.Parser-331"><span class="linenos">331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">,</span>
-</span><span id="Postgres.Parser-332"><a href="#Postgres.Parser-332"><span class="linenos">332</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-333"><a href="#Postgres.Parser-333"><span class="linenos">333</span></a>
-</span><span id="Postgres.Parser-334"><a href="#Postgres.Parser-334"><span class="linenos">334</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-335"><a href="#Postgres.Parser-335"><span class="linenos">335</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
-</span><span id="Postgres.Parser-336"><a href="#Postgres.Parser-336"><span class="linenos">336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">),</span>
-</span><span id="Postgres.Parser-337"><a href="#Postgres.Parser-337"><span class="linenos">337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">),</span>
-</span><span id="Postgres.Parser-338"><a href="#Postgres.Parser-338"><span class="linenos">338</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Postgres.Parser-339"><a href="#Postgres.Parser-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
-</span><span id="Postgres.Parser-340"><a href="#Postgres.Parser-340"><span class="linenos">340</span></a> <span class="p">),</span>
-</span><span id="Postgres.Parser-341"><a href="#Postgres.Parser-341"><span class="linenos">341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">),</span>
-</span><span id="Postgres.Parser-342"><a href="#Postgres.Parser-342"><span class="linenos">342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_operator</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Postgres.Parser-343"><a href="#Postgres.Parser-343"><span class="linenos">343</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-320"><a href="#Postgres.Parser-320"><span class="linenos">320</span></a> <span class="n">EXPONENT</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-321"><a href="#Postgres.Parser-321"><span class="linenos">321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">,</span>
+</span><span id="Postgres.Parser-322"><a href="#Postgres.Parser-322"><span class="linenos">322</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-323"><a href="#Postgres.Parser-323"><span class="linenos">323</span></a>
+</span><span id="Postgres.Parser-324"><a href="#Postgres.Parser-324"><span class="linenos">324</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-325"><a href="#Postgres.Parser-325"><span class="linenos">325</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
+</span><span id="Postgres.Parser-326"><a href="#Postgres.Parser-326"><span class="linenos">326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">),</span>
+</span><span id="Postgres.Parser-327"><a href="#Postgres.Parser-327"><span class="linenos">327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">),</span>
+</span><span id="Postgres.Parser-328"><a href="#Postgres.Parser-328"><span class="linenos">328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Postgres.Parser-329"><a href="#Postgres.Parser-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">]</span>
+</span><span id="Postgres.Parser-330"><a href="#Postgres.Parser-330"><span class="linenos">330</span></a> <span class="p">),</span>
+</span><span id="Postgres.Parser-331"><a href="#Postgres.Parser-331"><span class="linenos">331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">),</span>
+</span><span id="Postgres.Parser-332"><a href="#Postgres.Parser-332"><span class="linenos">332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_operator</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Postgres.Parser-333"><a href="#Postgres.Parser-333"><span class="linenos">333</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-334"><a href="#Postgres.Parser-334"><span class="linenos">334</span></a>
+</span><span id="Postgres.Parser-335"><a href="#Postgres.Parser-335"><span class="linenos">335</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-336"><a href="#Postgres.Parser-336"><span class="linenos">336</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><span id="Postgres.Parser-337"><a href="#Postgres.Parser-337"><span class="linenos">337</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_commit_or_rollback</span><span class="p">(),</span>
+</span><span id="Postgres.Parser-338"><a href="#Postgres.Parser-338"><span class="linenos">338</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-339"><a href="#Postgres.Parser-339"><span class="linenos">339</span></a>
+</span><span id="Postgres.Parser-340"><a href="#Postgres.Parser-340"><span class="linenos">340</span></a> <span class="k">def</span> <span class="nf">_parse_operator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Postgres.Parser-341"><a href="#Postgres.Parser-341"><span class="linenos">341</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Postgres.Parser-342"><a href="#Postgres.Parser-342"><span class="linenos">342</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Postgres.Parser-343"><a href="#Postgres.Parser-343"><span class="linenos">343</span></a> <span class="k">break</span>
</span><span id="Postgres.Parser-344"><a href="#Postgres.Parser-344"><span class="linenos">344</span></a>
-</span><span id="Postgres.Parser-345"><a href="#Postgres.Parser-345"><span class="linenos">345</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-346"><a href="#Postgres.Parser-346"><span class="linenos">346</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><span id="Postgres.Parser-347"><a href="#Postgres.Parser-347"><span class="linenos">347</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_commit_or_rollback</span><span class="p">(),</span>
-</span><span id="Postgres.Parser-348"><a href="#Postgres.Parser-348"><span class="linenos">348</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-345"><a href="#Postgres.Parser-345"><span class="linenos">345</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Postgres.Parser-346"><a href="#Postgres.Parser-346"><span class="linenos">346</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="Postgres.Parser-347"><a href="#Postgres.Parser-347"><span class="linenos">347</span></a> <span class="n">op</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Postgres.Parser-348"><a href="#Postgres.Parser-348"><span class="linenos">348</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Postgres.Parser-349"><a href="#Postgres.Parser-349"><span class="linenos">349</span></a>
-</span><span id="Postgres.Parser-350"><a href="#Postgres.Parser-350"><span class="linenos">350</span></a> <span class="k">def</span> <span class="nf">_parse_operator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Postgres.Parser-351"><a href="#Postgres.Parser-351"><span class="linenos">351</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Postgres.Parser-352"><a href="#Postgres.Parser-352"><span class="linenos">352</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Postgres.Parser-353"><a href="#Postgres.Parser-353"><span class="linenos">353</span></a> <span class="k">break</span>
-</span><span id="Postgres.Parser-354"><a href="#Postgres.Parser-354"><span class="linenos">354</span></a>
-</span><span id="Postgres.Parser-355"><a href="#Postgres.Parser-355"><span class="linenos">355</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Postgres.Parser-356"><a href="#Postgres.Parser-356"><span class="linenos">356</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="Postgres.Parser-357"><a href="#Postgres.Parser-357"><span class="linenos">357</span></a> <span class="n">op</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Postgres.Parser-358"><a href="#Postgres.Parser-358"><span class="linenos">358</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Postgres.Parser-359"><a href="#Postgres.Parser-359"><span class="linenos">359</span></a>
-</span><span id="Postgres.Parser-360"><a href="#Postgres.Parser-360"><span class="linenos">360</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><span id="Postgres.Parser-361"><a href="#Postgres.Parser-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Operator</span><span class="p">,</span>
-</span><span id="Postgres.Parser-362"><a href="#Postgres.Parser-362"><span class="linenos">362</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="Postgres.Parser-363"><a href="#Postgres.Parser-363"><span class="linenos">363</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Postgres.Parser-364"><a href="#Postgres.Parser-364"><span class="linenos">364</span></a> <span class="n">operator</span><span class="o">=</span><span class="n">op</span><span class="p">,</span>
-</span><span id="Postgres.Parser-365"><a href="#Postgres.Parser-365"><span class="linenos">365</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="Postgres.Parser-366"><a href="#Postgres.Parser-366"><span class="linenos">366</span></a> <span class="p">)</span>
+</span><span id="Postgres.Parser-350"><a href="#Postgres.Parser-350"><span class="linenos">350</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><span id="Postgres.Parser-351"><a href="#Postgres.Parser-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Operator</span><span class="p">,</span>
+</span><span id="Postgres.Parser-352"><a href="#Postgres.Parser-352"><span class="linenos">352</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="Postgres.Parser-353"><a href="#Postgres.Parser-353"><span class="linenos">353</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Postgres.Parser-354"><a href="#Postgres.Parser-354"><span class="linenos">354</span></a> <span class="n">operator</span><span class="o">=</span><span class="n">op</span><span class="p">,</span>
+</span><span id="Postgres.Parser-355"><a href="#Postgres.Parser-355"><span class="linenos">355</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="Postgres.Parser-356"><a href="#Postgres.Parser-356"><span class="linenos">356</span></a> <span class="p">)</span>
+</span><span id="Postgres.Parser-357"><a href="#Postgres.Parser-357"><span class="linenos">357</span></a>
+</span><span id="Postgres.Parser-358"><a href="#Postgres.Parser-358"><span class="linenos">358</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">):</span>
+</span><span id="Postgres.Parser-359"><a href="#Postgres.Parser-359"><span class="linenos">359</span></a> <span class="k">break</span>
+</span><span id="Postgres.Parser-360"><a href="#Postgres.Parser-360"><span class="linenos">360</span></a>
+</span><span id="Postgres.Parser-361"><a href="#Postgres.Parser-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Postgres.Parser-362"><a href="#Postgres.Parser-362"><span class="linenos">362</span></a>
+</span><span id="Postgres.Parser-363"><a href="#Postgres.Parser-363"><span class="linenos">363</span></a> <span class="k">def</span> <span class="nf">_parse_date_part</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="Postgres.Parser-364"><a href="#Postgres.Parser-364"><span class="linenos">364</span></a> <span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Postgres.Parser-365"><a href="#Postgres.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="Postgres.Parser-366"><a href="#Postgres.Parser-366"><span class="linenos">366</span></a> <span class="n">value</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="Postgres.Parser-367"><a href="#Postgres.Parser-367"><span class="linenos">367</span></a>
-</span><span id="Postgres.Parser-368"><a href="#Postgres.Parser-368"><span class="linenos">368</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">):</span>
-</span><span id="Postgres.Parser-369"><a href="#Postgres.Parser-369"><span class="linenos">369</span></a> <span class="k">break</span>
+</span><span id="Postgres.Parser-368"><a href="#Postgres.Parser-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="n">part</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Postgres.Parser-369"><a href="#Postgres.Parser-369"><span class="linenos">369</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Postgres.Parser-370"><a href="#Postgres.Parser-370"><span class="linenos">370</span></a>
-</span><span id="Postgres.Parser-371"><a href="#Postgres.Parser-371"><span class="linenos">371</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Postgres.Parser-372"><a href="#Postgres.Parser-372"><span class="linenos">372</span></a>
-</span><span id="Postgres.Parser-373"><a href="#Postgres.Parser-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">_parse_date_part</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="Postgres.Parser-374"><a href="#Postgres.Parser-374"><span class="linenos">374</span></a> <span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Postgres.Parser-375"><a href="#Postgres.Parser-375"><span class="linenos">375</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="Postgres.Parser-376"><a href="#Postgres.Parser-376"><span class="linenos">376</span></a> <span class="n">value</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="Postgres.Parser-377"><a href="#Postgres.Parser-377"><span class="linenos">377</span></a>
-</span><span id="Postgres.Parser-378"><a href="#Postgres.Parser-378"><span class="linenos">378</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="n">part</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Postgres.Parser-379"><a href="#Postgres.Parser-379"><span class="linenos">379</span></a> <span class="n">part</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Postgres.Parser-380"><a href="#Postgres.Parser-380"><span class="linenos">380</span></a>
-</span><span id="Postgres.Parser-381"><a href="#Postgres.Parser-381"><span class="linenos">381</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">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">part</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Postgres.Parser-371"><a href="#Postgres.Parser-371"><span class="linenos">371</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">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">part</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</span></pre></div>
@@ -2028,140 +2049,136 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Postgres.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator-383"><a href="#Postgres.Generator-383"><span class="linenos">383</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="Postgres.Generator-384"><a href="#Postgres.Generator-384"><span class="linenos">384</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-385"><a href="#Postgres.Generator-385"><span class="linenos">385</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-386"><a href="#Postgres.Generator-386"><span class="linenos">386</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-387"><a href="#Postgres.Generator-387"><span class="linenos">387</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-388"><a href="#Postgres.Generator-388"><span class="linenos">388</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-389"><a href="#Postgres.Generator-389"><span class="linenos">389</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-390"><a href="#Postgres.Generator-390"><span class="linenos">390</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-391"><a href="#Postgres.Generator-391"><span class="linenos">391</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Postgres.Generator-392"><a href="#Postgres.Generator-392"><span class="linenos">392</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-393"><a href="#Postgres.Generator-393"><span class="linenos">393</span></a> <span class="n">TABLESAMPLE_SEED_KEYWORD</span> <span class="o">=</span> <span class="s2">&quot;REPEATABLE&quot;</span>
-</span><span id="Postgres.Generator-394"><a href="#Postgres.Generator-394"><span class="linenos">394</span></a> <span class="n">SUPPORTS_SELECT_INTO</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-395"><a href="#Postgres.Generator-395"><span class="linenos">395</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-396"><a href="#Postgres.Generator-396"><span class="linenos">396</span></a> <span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-397"><a href="#Postgres.Generator-397"><span class="linenos">397</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-398"><a href="#Postgres.Generator-398"><span class="linenos">398</span></a>
-</span><span id="Postgres.Generator-399"><a href="#Postgres.Generator-399"><span class="linenos">399</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-400"><a href="#Postgres.Generator-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
-</span><span id="Postgres.Generator-401"><a href="#Postgres.Generator-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
-</span><span id="Postgres.Generator-402"><a href="#Postgres.Generator-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
-</span><span id="Postgres.Generator-403"><a href="#Postgres.Generator-403"><span class="linenos">403</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-404"><a href="#Postgres.Generator-404"><span class="linenos">404</span></a>
-</span><span id="Postgres.Generator-405"><a href="#Postgres.Generator-405"><span class="linenos">405</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-406"><a href="#Postgres.Generator-406"><span class="linenos">406</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><span id="Postgres.Generator-407"><a href="#Postgres.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-408"><a href="#Postgres.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-409"><a href="#Postgres.Generator-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-410"><a href="#Postgres.Generator-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-411"><a href="#Postgres.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-412"><a href="#Postgres.Generator-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-413"><a href="#Postgres.Generator-413"><span class="linenos">413</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-414"><a href="#Postgres.Generator-414"><span class="linenos">414</span></a>
-</span><span id="Postgres.Generator-415"><a href="#Postgres.Generator-415"><span class="linenos">415</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-416"><a href="#Postgres.Generator-416"><span class="linenos">416</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><span id="Postgres.Generator-417"><a href="#Postgres.Generator-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-418"><a href="#Postgres.Generator-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
-</span><span id="Postgres.Generator-419"><a href="#Postgres.Generator-419"><span class="linenos">419</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</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="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Postgres.Generator-420"><a href="#Postgres.Generator-420"><span class="linenos">420</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</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="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="Postgres.Generator-421"><a href="#Postgres.Generator-421"><span class="linenos">421</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="Postgres.Generator-422"><a href="#Postgres.Generator-422"><span class="linenos">422</span></a> <span class="p">),</span>
-</span><span id="Postgres.Generator-423"><a href="#Postgres.Generator-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-424"><a href="#Postgres.Generator-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&lt;@&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-425"><a href="#Postgres.Generator-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;@&gt;&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-426"><a href="#Postgres.Generator-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-427"><a href="#Postgres.Generator-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-428"><a href="#Postgres.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
-</span><span id="Postgres.Generator-429"><a href="#Postgres.Generator-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-430"><a href="#Postgres.Generator-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-431"><a href="#Postgres.Generator-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_USER&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-432"><a href="#Postgres.Generator-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-433"><a href="#Postgres.Generator-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-434"><a href="#Postgres.Generator-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-435"><a href="#Postgres.Generator-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-436"><a href="#Postgres.Generator-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;-&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-437"><a href="#Postgres.Generator-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-438"><a href="#Postgres.Generator-438"><span class="linenos">438</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="Postgres.Generator-439"><a href="#Postgres.Generator-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-440"><a href="#Postgres.Generator-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-441"><a href="#Postgres.Generator-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-442"><a href="#Postgres.Generator-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-443"><a href="#Postgres.Generator-443"><span class="linenos">443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-444"><a href="#Postgres.Generator-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-445"><a href="#Postgres.Generator-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</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">json_path_part</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="Postgres.Generator-446"><a href="#Postgres.Generator-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</span><span class="p">:</span> <span class="n">no_last_day_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-447"><a href="#Postgres.Generator-447"><span class="linenos">447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-448"><a href="#Postgres.Generator-448"><span class="linenos">448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-449"><a href="#Postgres.Generator-449"><span class="linenos">449</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="Postgres.Generator-450"><a href="#Postgres.Generator-450"><span class="linenos">450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-451"><a href="#Postgres.Generator-451"><span class="linenos">451</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="Postgres.Generator-452"><a href="#Postgres.Generator-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">merge_without_target_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-453"><a href="#Postgres.Generator-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-454"><a href="#Postgres.Generator-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres.Generator-455"><a href="#Postgres.Generator-455"><span class="linenos">455</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Postgres.Generator-456"><a href="#Postgres.Generator-456"><span class="linenos">456</span></a> <span class="p">),</span>
-</span><span id="Postgres.Generator-457"><a href="#Postgres.Generator-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres.Generator-458"><a href="#Postgres.Generator-458"><span class="linenos">458</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Postgres.Generator-459"><a href="#Postgres.Generator-459"><span class="linenos">459</span></a> <span class="p">),</span>
-</span><span id="Postgres.Generator-460"><a href="#Postgres.Generator-460"><span class="linenos">460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-461"><a href="#Postgres.Generator-461"><span class="linenos">461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-462"><a href="#Postgres.Generator-462"><span class="linenos">462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-463"><a href="#Postgres.Generator-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-464"><a href="#Postgres.Generator-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~*&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-465"><a href="#Postgres.Generator-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres.Generator-466"><a href="#Postgres.Generator-466"><span class="linenos">466</span></a> <span class="p">[</span>
-</span><span id="Postgres.Generator-467"><a href="#Postgres.Generator-467"><span class="linenos">467</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
-</span><span id="Postgres.Generator-468"><a href="#Postgres.Generator-468"><span class="linenos">468</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="Postgres.Generator-469"><a href="#Postgres.Generator-469"><span class="linenos">469</span></a> <span class="p">]</span>
-</span><span id="Postgres.Generator-470"><a href="#Postgres.Generator-470"><span class="linenos">470</span></a> <span class="p">),</span>
-</span><span id="Postgres.Generator-471"><a href="#Postgres.Generator-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-472"><a href="#Postgres.Generator-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Postgres.Generator-473"><a href="#Postgres.Generator-473"><span class="linenos">473</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-474"><a href="#Postgres.Generator-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-475"><a href="#Postgres.Generator-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">_substring_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-476"><a href="#Postgres.Generator-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-477"><a href="#Postgres.Generator-477"><span class="linenos">477</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-478"><a href="#Postgres.Generator-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-479"><a href="#Postgres.Generator-479"><span class="linenos">479</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-480"><a href="#Postgres.Generator-480"><span class="linenos">480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-481"><a href="#Postgres.Generator-481"><span class="linenos">481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Postgres.Generator-482"><a href="#Postgres.Generator-482"><span class="linenos">482</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-483"><a href="#Postgres.Generator-483"><span class="linenos">483</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-484"><a href="#Postgres.Generator-484"><span class="linenos">484</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-485"><a href="#Postgres.Generator-485"><span class="linenos">485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-486"><a href="#Postgres.Generator-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-487"><a href="#Postgres.Generator-487"><span class="linenos">487</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-488"><a href="#Postgres.Generator-488"><span class="linenos">488</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Variance</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">),</span>
-</span><span id="Postgres.Generator-489"><a href="#Postgres.Generator-489"><span class="linenos">489</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-490"><a href="#Postgres.Generator-490"><span class="linenos">490</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-491"><a href="#Postgres.Generator-491"><span class="linenos">491</span></a>
-</span><span id="Postgres.Generator-492"><a href="#Postgres.Generator-492"><span class="linenos">492</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-493"><a href="#Postgres.Generator-493"><span class="linenos">493</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><span id="Postgres.Generator-494"><a href="#Postgres.Generator-494"><span class="linenos">494</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Postgres.Generator-495"><a href="#Postgres.Generator-495"><span class="linenos">495</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</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="Postgres.Generator-496"><a href="#Postgres.Generator-496"><span class="linenos">496</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="Postgres.Generator-497"><a href="#Postgres.Generator-497"><span class="linenos">497</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-498"><a href="#Postgres.Generator-498"><span class="linenos">498</span></a>
-</span><span id="Postgres.Generator-499"><a href="#Postgres.Generator-499"><span class="linenos">499</span></a> <span class="k">def</span> <span class="nf">_jsonpathkey_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">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres.Generator-500"><a href="#Postgres.Generator-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Postgres.Generator-501"><a href="#Postgres.Generator-501"><span class="linenos">501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported wildcard in JSONPathKey expression&quot;</span><span class="p">)</span>
-</span><span id="Postgres.Generator-502"><a href="#Postgres.Generator-502"><span class="linenos">502</span></a>
-</span><span id="Postgres.Generator-503"><a href="#Postgres.Generator-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Postgres.Generator-504"><a href="#Postgres.Generator-504"><span class="linenos">504</span></a>
-</span><span id="Postgres.Generator-505"><a href="#Postgres.Generator-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres.Generator-506"><a href="#Postgres.Generator-506"><span class="linenos">506</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="Postgres.Generator-507"><a href="#Postgres.Generator-507"><span class="linenos">507</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="Postgres.Generator-508"><a href="#Postgres.Generator-508"><span class="linenos">508</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Postgres.Generator-509"><a href="#Postgres.Generator-509"><span class="linenos">509</span></a>
-</span><span id="Postgres.Generator-510"><a href="#Postgres.Generator-510"><span class="linenos">510</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Postgres.Generator-511"><a href="#Postgres.Generator-511"><span class="linenos">511</span></a>
-</span><span id="Postgres.Generator-512"><a href="#Postgres.Generator-512"><span class="linenos">512</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres.Generator-513"><a href="#Postgres.Generator-513"><span class="linenos">513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Postgres.Generator-514"><a href="#Postgres.Generator-514"><span class="linenos">514</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
-</span><span id="Postgres.Generator-515"><a href="#Postgres.Generator-515"><span class="linenos">515</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Postgres.Generator-516"><a href="#Postgres.Generator-516"><span class="linenos">516</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator-373"><a href="#Postgres.Generator-373"><span class="linenos">373</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="Postgres.Generator-374"><a href="#Postgres.Generator-374"><span class="linenos">374</span></a> <span class="n">SINGLE_STRING_INTERVAL</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-375"><a href="#Postgres.Generator-375"><span class="linenos">375</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-376"><a href="#Postgres.Generator-376"><span class="linenos">376</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-377"><a href="#Postgres.Generator-377"><span class="linenos">377</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-378"><a href="#Postgres.Generator-378"><span class="linenos">378</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-379"><a href="#Postgres.Generator-379"><span class="linenos">379</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-380"><a href="#Postgres.Generator-380"><span class="linenos">380</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-381"><a href="#Postgres.Generator-381"><span class="linenos">381</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Postgres.Generator-382"><a href="#Postgres.Generator-382"><span class="linenos">382</span></a> <span class="n">TABLESAMPLE_SIZE_IS_ROWS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-383"><a href="#Postgres.Generator-383"><span class="linenos">383</span></a> <span class="n">TABLESAMPLE_SEED_KEYWORD</span> <span class="o">=</span> <span class="s2">&quot;REPEATABLE&quot;</span>
+</span><span id="Postgres.Generator-384"><a href="#Postgres.Generator-384"><span class="linenos">384</span></a> <span class="n">SUPPORTS_SELECT_INTO</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-385"><a href="#Postgres.Generator-385"><span class="linenos">385</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-386"><a href="#Postgres.Generator-386"><span class="linenos">386</span></a> <span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-387"><a href="#Postgres.Generator-387"><span class="linenos">387</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-388"><a href="#Postgres.Generator-388"><span class="linenos">388</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-389"><a href="#Postgres.Generator-389"><span class="linenos">389</span></a>
+</span><span id="Postgres.Generator-390"><a href="#Postgres.Generator-390"><span class="linenos">390</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-391"><a href="#Postgres.Generator-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">,</span>
+</span><span id="Postgres.Generator-392"><a href="#Postgres.Generator-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">,</span>
+</span><span id="Postgres.Generator-393"><a href="#Postgres.Generator-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</span><span class="p">,</span>
+</span><span id="Postgres.Generator-394"><a href="#Postgres.Generator-394"><span class="linenos">394</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-395"><a href="#Postgres.Generator-395"><span class="linenos">395</span></a>
+</span><span id="Postgres.Generator-396"><a href="#Postgres.Generator-396"><span class="linenos">396</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-397"><a href="#Postgres.Generator-397"><span class="linenos">397</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><span id="Postgres.Generator-398"><a href="#Postgres.Generator-398"><span class="linenos">398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-399"><a href="#Postgres.Generator-399"><span class="linenos">399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-400"><a href="#Postgres.Generator-400"><span class="linenos">400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-401"><a href="#Postgres.Generator-401"><span class="linenos">401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-402"><a href="#Postgres.Generator-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-403"><a href="#Postgres.Generator-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-404"><a href="#Postgres.Generator-404"><span class="linenos">404</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-405"><a href="#Postgres.Generator-405"><span class="linenos">405</span></a>
+</span><span id="Postgres.Generator-406"><a href="#Postgres.Generator-406"><span class="linenos">406</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-407"><a href="#Postgres.Generator-407"><span class="linenos">407</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><span id="Postgres.Generator-408"><a href="#Postgres.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">any_value_to_max_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-409"><a href="#Postgres.Generator-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</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="p">(</span>
+</span><span id="Postgres.Generator-410"><a href="#Postgres.Generator-410"><span class="linenos">410</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</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="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Postgres.Generator-411"><a href="#Postgres.Generator-411"><span class="linenos">411</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">e</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="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="Postgres.Generator-412"><a href="#Postgres.Generator-412"><span class="linenos">412</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="s1">&#39;ARRAY&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="Postgres.Generator-413"><a href="#Postgres.Generator-413"><span class="linenos">413</span></a> <span class="p">),</span>
+</span><span id="Postgres.Generator-414"><a href="#Postgres.Generator-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARRAY_CAT&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-415"><a href="#Postgres.Generator-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContained</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&lt;@&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-416"><a href="#Postgres.Generator-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;@&gt;&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-417"><a href="#Postgres.Generator-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayOverlaps</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-418"><a href="#Postgres.Generator-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-419"><a href="#Postgres.Generator-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_auto_increment_to_serial</span><span class="p">,</span> <span class="n">_serial_to_generated</span><span class="p">]),</span>
+</span><span id="Postgres.Generator-420"><a href="#Postgres.Generator-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">no_paren_current_date_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-421"><a href="#Postgres.Generator-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-422"><a href="#Postgres.Generator-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_USER&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-423"><a href="#Postgres.Generator-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-424"><a href="#Postgres.Generator-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-425"><a href="#Postgres.Generator-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-426"><a href="#Postgres.Generator-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="n">_datatype_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-427"><a href="#Postgres.Generator-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;-&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-428"><a href="#Postgres.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNNEST&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-429"><a href="#Postgres.Generator-429"><span class="linenos">429</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="Postgres.Generator-430"><a href="#Postgres.Generator-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-431"><a href="#Postgres.Generator-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-432"><a href="#Postgres.Generator-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-433"><a href="#Postgres.Generator-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-434"><a href="#Postgres.Generator-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-435"><a href="#Postgres.Generator-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathKey</span><span class="p">:</span> <span class="n">json_path_key_only_name</span><span class="p">,</span>
+</span><span id="Postgres.Generator-436"><a href="#Postgres.Generator-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathRoot</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-437"><a href="#Postgres.Generator-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathSubscript</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">json_path_part</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="Postgres.Generator-438"><a href="#Postgres.Generator-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</span><span class="p">:</span> <span class="n">no_last_day_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-439"><a href="#Postgres.Generator-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-440"><a href="#Postgres.Generator-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-441"><a href="#Postgres.Generator-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="Postgres.Generator-442"><a href="#Postgres.Generator-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MapFromEntries</span><span class="p">:</span> <span class="n">no_map_from_entries_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-443"><a href="#Postgres.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="Postgres.Generator-444"><a href="#Postgres.Generator-444"><span class="linenos">444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">merge_without_target_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-445"><a href="#Postgres.Generator-445"><span class="linenos">445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-446"><a href="#Postgres.Generator-446"><span class="linenos">446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Postgres.Generator-447"><a href="#Postgres.Generator-447"><span class="linenos">447</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Postgres.Generator-448"><a href="#Postgres.Generator-448"><span class="linenos">448</span></a> <span class="p">),</span>
+</span><span id="Postgres.Generator-449"><a href="#Postgres.Generator-449"><span class="linenos">449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Postgres.Generator-450"><a href="#Postgres.Generator-450"><span class="linenos">450</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Postgres.Generator-451"><a href="#Postgres.Generator-451"><span class="linenos">451</span></a> <span class="p">),</span>
+</span><span id="Postgres.Generator-452"><a href="#Postgres.Generator-452"><span class="linenos">452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-453"><a href="#Postgres.Generator-453"><span class="linenos">453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-454"><a href="#Postgres.Generator-454"><span class="linenos">454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Rand</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANDOM&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-455"><a href="#Postgres.Generator-455"><span class="linenos">455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-456"><a href="#Postgres.Generator-456"><span class="linenos">456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;~*&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-457"><a href="#Postgres.Generator-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Postgres.Generator-458"><a href="#Postgres.Generator-458"><span class="linenos">458</span></a> <span class="p">[</span>
+</span><span id="Postgres.Generator-459"><a href="#Postgres.Generator-459"><span class="linenos">459</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
+</span><span id="Postgres.Generator-460"><a href="#Postgres.Generator-460"><span class="linenos">460</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="Postgres.Generator-461"><a href="#Postgres.Generator-461"><span class="linenos">461</span></a> <span class="p">]</span>
+</span><span id="Postgres.Generator-462"><a href="#Postgres.Generator-462"><span class="linenos">462</span></a> <span class="p">),</span>
+</span><span id="Postgres.Generator-463"><a href="#Postgres.Generator-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-464"><a href="#Postgres.Generator-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Postgres.Generator-465"><a href="#Postgres.Generator-465"><span class="linenos">465</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-466"><a href="#Postgres.Generator-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-467"><a href="#Postgres.Generator-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">_substring_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-468"><a href="#Postgres.Generator-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIME&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-469"><a href="#Postgres.Generator-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-470"><a href="#Postgres.Generator-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-471"><a href="#Postgres.Generator-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-472"><a href="#Postgres.Generator-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-473"><a href="#Postgres.Generator-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Postgres.Generator-474"><a href="#Postgres.Generator-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-475"><a href="#Postgres.Generator-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-476"><a href="#Postgres.Generator-476"><span class="linenos">476</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;+&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-477"><a href="#Postgres.Generator-477"><span class="linenos">477</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-478"><a href="#Postgres.Generator-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-479"><a href="#Postgres.Generator-479"><span class="linenos">479</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-480"><a href="#Postgres.Generator-480"><span class="linenos">480</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Variance</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">),</span>
+</span><span id="Postgres.Generator-481"><a href="#Postgres.Generator-481"><span class="linenos">481</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-482"><a href="#Postgres.Generator-482"><span class="linenos">482</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-483"><a href="#Postgres.Generator-483"><span class="linenos">483</span></a>
+</span><span id="Postgres.Generator-484"><a href="#Postgres.Generator-484"><span class="linenos">484</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-485"><a href="#Postgres.Generator-485"><span class="linenos">485</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><span id="Postgres.Generator-486"><a href="#Postgres.Generator-486"><span class="linenos">486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Postgres.Generator-487"><a href="#Postgres.Generator-487"><span class="linenos">487</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</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="Postgres.Generator-488"><a href="#Postgres.Generator-488"><span class="linenos">488</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="Postgres.Generator-489"><a href="#Postgres.Generator-489"><span class="linenos">489</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-490"><a href="#Postgres.Generator-490"><span class="linenos">490</span></a>
+</span><span id="Postgres.Generator-491"><a href="#Postgres.Generator-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator-492"><a href="#Postgres.Generator-492"><span class="linenos">492</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="Postgres.Generator-493"><a href="#Postgres.Generator-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="Postgres.Generator-494"><a href="#Postgres.Generator-494"><span class="linenos">494</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Postgres.Generator-495"><a href="#Postgres.Generator-495"><span class="linenos">495</span></a>
+</span><span id="Postgres.Generator-496"><a href="#Postgres.Generator-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Postgres.Generator-497"><a href="#Postgres.Generator-497"><span class="linenos">497</span></a>
+</span><span id="Postgres.Generator-498"><a href="#Postgres.Generator-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator-499"><a href="#Postgres.Generator-499"><span class="linenos">499</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Postgres.Generator-500"><a href="#Postgres.Generator-500"><span class="linenos">500</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="Postgres.Generator-501"><a href="#Postgres.Generator-501"><span class="linenos">501</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Postgres.Generator-502"><a href="#Postgres.Generator-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
@@ -2372,6 +2389,18 @@ Default: True</li>
</div>
+ <div id="Postgres.Generator.MULTI_ARG_DISTINCT" class="classattr">
+ <div class="attr variable">
+ <span class="name">MULTI_ARG_DISTINCT</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Postgres.Generator.MULTI_ARG_DISTINCT"></a>
+
+
+
+ </div>
<div id="Postgres.Generator.SUPPORTED_JSON_PATH_PARTS" class="classattr">
<div class="attr variable">
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
@@ -2402,7 +2431,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Postgres.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Postgres.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AutoRefreshProperty">sqlglot.expressions.AutoRefreshProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InheritsProperty">sqlglot.expressions.InheritsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InputModelProperty">sqlglot.expressions.InputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalSpan">sqlglot.expressions.IntervalSpan</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OutputModelProperty">sqlglot.expressions.OutputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RemoteWithConnectionModelProperty">sqlglot.expressions.RemoteWithConnectionModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SampleProperty">sqlglot.expressions.SampleProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetConfigProperty">sqlglot.expressions.SetConfigProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlReadWriteProperty">sqlglot.expressions.SqlReadWriteProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransformModelProperty">sqlglot.expressions.TransformModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function any_value_to_max_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function _json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function _json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;: &lt;function no_last_day_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function merge_without_target_sql&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function bool_xor_sql&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Postgres.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;: &lt;function json_path_key_only_name&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AutoRefreshProperty">sqlglot.expressions.AutoRefreshProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InheritsProperty">sqlglot.expressions.InheritsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InputModelProperty">sqlglot.expressions.InputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalSpan">sqlglot.expressions.IntervalSpan</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OutputModelProperty">sqlglot.expressions.OutputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RemoteWithConnectionModelProperty">sqlglot.expressions.RemoteWithConnectionModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SampleProperty">sqlglot.expressions.SampleProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetConfigProperty">sqlglot.expressions.SetConfigProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlReadWriteProperty">sqlglot.expressions.SqlReadWriteProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransformModelProperty">sqlglot.expressions.TransformModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;: &lt;function any_value_to_max_sql&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _string_agg_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function json_extract_segments.&lt;locals&gt;._json_extract_segments&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function json_extract_segments.&lt;locals&gt;._json_extract_segments&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;: &lt;function no_last_day_sql&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function merge_without_target_sql&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Pivot">sqlglot.expressions.Pivot</a>&#39;&gt;: &lt;function no_pivot_sql&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;: &lt;function _date_diff_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function <a href="#Postgres.Generator">Postgres.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function bool_xor_sql&gt;}</span>
</div>
@@ -2435,12 +2464,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Postgres.Generator.bracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.bracket_sql-505"><a href="#Postgres.Generator.bracket_sql-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres.Generator.bracket_sql-506"><a href="#Postgres.Generator.bracket_sql-506"><span class="linenos">506</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
-</span><span id="Postgres.Generator.bracket_sql-507"><a href="#Postgres.Generator.bracket_sql-507"><span class="linenos">507</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="Postgres.Generator.bracket_sql-508"><a href="#Postgres.Generator.bracket_sql-508"><span class="linenos">508</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Postgres.Generator.bracket_sql-509"><a href="#Postgres.Generator.bracket_sql-509"><span class="linenos">509</span></a>
-</span><span id="Postgres.Generator.bracket_sql-510"><a href="#Postgres.Generator.bracket_sql-510"><span class="linenos">510</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.bracket_sql-491"><a href="#Postgres.Generator.bracket_sql-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator.bracket_sql-492"><a href="#Postgres.Generator.bracket_sql-492"><span class="linenos">492</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Forms like ARRAY[1, 2, 3][3] aren&#39;t allowed; we need to wrap the ARRAY.&quot;&quot;&quot;</span>
+</span><span id="Postgres.Generator.bracket_sql-493"><a href="#Postgres.Generator.bracket_sql-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="Postgres.Generator.bracket_sql-494"><a href="#Postgres.Generator.bracket_sql-494"><span class="linenos">494</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Postgres.Generator.bracket_sql-495"><a href="#Postgres.Generator.bracket_sql-495"><span class="linenos">495</span></a>
+</span><span id="Postgres.Generator.bracket_sql-496"><a href="#Postgres.Generator.bracket_sql-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2460,11 +2489,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Postgres.Generator.matchagainst_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.matchagainst_sql-512"><a href="#Postgres.Generator.matchagainst_sql-512"><span class="linenos">512</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Postgres.Generator.matchagainst_sql-513"><a href="#Postgres.Generator.matchagainst_sql-513"><span class="linenos">513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Postgres.Generator.matchagainst_sql-514"><a href="#Postgres.Generator.matchagainst_sql-514"><span class="linenos">514</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
-</span><span id="Postgres.Generator.matchagainst_sql-515"><a href="#Postgres.Generator.matchagainst_sql-515"><span class="linenos">515</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Postgres.Generator.matchagainst_sql-516"><a href="#Postgres.Generator.matchagainst_sql-516"><span class="linenos">516</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator.matchagainst_sql-498"><a href="#Postgres.Generator.matchagainst_sql-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Postgres.Generator.matchagainst_sql-499"><a href="#Postgres.Generator.matchagainst_sql-499"><span class="linenos">499</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Postgres.Generator.matchagainst_sql-500"><a href="#Postgres.Generator.matchagainst_sql-500"><span class="linenos">500</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> @@ </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
+</span><span id="Postgres.Generator.matchagainst_sql-501"><a href="#Postgres.Generator.matchagainst_sql-501"><span class="linenos">501</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot; OR &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Postgres.Generator.matchagainst_sql-502"><a href="#Postgres.Generator.matchagainst_sql-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/presto.html b/docs/sqlglot/dialects/presto.html
index 4255c04..987b4a1 100644
--- a/docs/sqlglot/dialects/presto.html
+++ b/docs/sqlglot/dialects/presto.html
@@ -130,6 +130,9 @@
<a class="variable" href="#Presto.Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a>
</li>
<li>
+ <a class="variable" href="#Presto.Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a>
+ </li>
+ <li>
<a class="variable" href="#Presto.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a>
</li>
<li>
@@ -545,225 +548,226 @@
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">LIMIT_ONLY_LITERALS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</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><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</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-299"><a href="#L-299"><span class="linenos">299</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-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><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</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><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">exp</span><span 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-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="p">}</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">_approx_distinct_sql</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">),</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX_BY&quot;</span><span class="p">),</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN_BY&quot;</span><span class="p">),</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ARRAY[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">),</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONTAINS&quot;</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">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CARDINALITY&quot;</span><span class="p">),</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayUniqueAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SET_AGG&quot;</span><span class="p">),</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AT_TIMEZONE&quot;</span><span class="p">),</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_AND(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_LEFT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_NOT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_OR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_RIGHT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_XOR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</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-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">_to_int</span><span class="p">(</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="p">),</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="p">),</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&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><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="p">),</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</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-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">_to_int</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="p">),</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;FROM_UTF8&quot;</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">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_PARSE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FORMAT=&#39;</span><span class="si">{</span><span class="n">e</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="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</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">FirstValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH_TIMEZONE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AT TIME ZONE &#39;UTC&#39;&quot;</span><span class="p">,</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unalias_group</span><span class="p">]),</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="s2">&quot;ARRAY_JOIN&quot;</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;ARRAY_AGG&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">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><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="p">),</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_HEX&quot;</span><span class="p">),</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">(),</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Initcap</span><span class="p">:</span> <span class="n">_initcap_sql</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</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;LAST_DAY_OF_MONTH&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-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="n">_explode_to_unnest_sql</span><span class="p">,</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">:</span> <span class="n">_schema_sql</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="p">[</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="p">]</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="p">),</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</span><span class="p">,</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRPOS&quot;</span><span class="p">),</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">_str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</span><span class="p">,</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</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">TsOrDsDiff</span><span class="p">:</span> <span class="n">_ts_or_ds_diff_sql</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">TsOrDsToDate</span><span class="p">:</span> <span class="n">_ts_or_ds_to_date_sql</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">Unhex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_HEX&quot;</span><span class="p">),</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS VARCHAR)&quot;</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">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</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">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</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">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="p">),</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="p">}</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">seq_get</span><span class="p">(</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="p">),</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="mi">0</span><span class="p">,</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="p">),</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="p">)</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</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="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <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;offset&quot;</span><span class="p">),</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="p">]</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a><span class="sd"> so we need to remove them</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</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-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</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><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</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-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="p">}</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</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><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">exp</span><span 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-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</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">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</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><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">_approx_distinct_sql</span><span class="p">,</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">),</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX_BY&quot;</span><span class="p">),</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN_BY&quot;</span><span class="p">),</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ARRAY[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</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">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CARDINALITY&quot;</span><span class="p">),</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayUniqueAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SET_AGG&quot;</span><span class="p">),</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AT_TIMEZONE&quot;</span><span class="p">),</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_AND(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_LEFT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_NOT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_OR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_RIGHT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_XOR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</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-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">_to_int</span><span class="p">(</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="p">),</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="p">),</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&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><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="p">),</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</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-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">_to_int</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <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">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_PARSE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FORMAT=&#39;</span><span class="si">{</span><span class="n">e</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="si">}</span><span class="s2">&#39;&quot;</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">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FirstValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH_TIMEZONE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AT TIME ZONE &#39;UTC&#39;&quot;</span><span class="p">,</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unalias_group</span><span class="p">]),</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="s2">&quot;ARRAY_JOIN&quot;</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;ARRAY_AGG&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">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><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="p">),</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_HEX&quot;</span><span class="p">),</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">(),</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Initcap</span><span class="p">:</span> <span class="n">_initcap_sql</span><span class="p">,</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</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;LAST_DAY_OF_MONTH&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-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="n">_explode_to_unnest_sql</span><span class="p">,</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">:</span> <span class="n">_schema_sql</span><span class="p">,</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</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">naked_property</span><span class="p">(</span><span class="n">e</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">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="p">[</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="p">]</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="p">),</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</span><span class="p">,</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRPOS&quot;</span><span class="p">),</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">_str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</span><span class="p">,</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</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">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</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">TsOrDsDiff</span><span class="p">:</span> <span class="n">_ts_or_ds_diff_sql</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">TsOrDsToDate</span><span class="p">:</span> <span class="n">_ts_or_ds_to_date_sql</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_HEX&quot;</span><span class="p">),</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</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">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS VARCHAR)&quot;</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">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&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">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</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">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <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">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="p">}</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><span class="p">):</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="n">seq_get</span><span class="p">(</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="p">),</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="mi">0</span><span class="p">,</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="p">),</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="p">)</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span 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;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <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;offset&quot;</span><span class="p">),</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="p">]</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a><span class="sd"> so we need to remove them</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</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-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -878,225 +882,226 @@
</span><span id="Presto-293"><a href="#Presto-293"><span class="linenos">293</span></a> <span class="n">LIMIT_ONLY_LITERALS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Presto-294"><a href="#Presto-294"><span class="linenos">294</span></a> <span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Presto-295"><a href="#Presto-295"><span class="linenos">295</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Presto-296"><a href="#Presto-296"><span class="linenos">296</span></a>
-</span><span id="Presto-297"><a href="#Presto-297"><span class="linenos">297</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-298"><a href="#Presto-298"><span class="linenos">298</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><span id="Presto-299"><a href="#Presto-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</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="Presto-300"><a href="#Presto-300"><span class="linenos">300</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="Presto-301"><a href="#Presto-301"><span class="linenos">301</span></a> <span class="p">}</span>
-</span><span id="Presto-302"><a href="#Presto-302"><span class="linenos">302</span></a>
-</span><span id="Presto-303"><a href="#Presto-303"><span class="linenos">303</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-304"><a href="#Presto-304"><span class="linenos">304</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><span id="Presto-305"><a href="#Presto-305"><span class="linenos">305</span></a> <span class="n">exp</span><span 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="Presto-306"><a href="#Presto-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="Presto-307"><a href="#Presto-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
-</span><span id="Presto-308"><a href="#Presto-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Presto-309"><a href="#Presto-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
-</span><span id="Presto-310"><a href="#Presto-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto-311"><a href="#Presto-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span>
-</span><span id="Presto-312"><a href="#Presto-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto-313"><a href="#Presto-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto-314"><a href="#Presto-314"><span class="linenos">314</span></a> <span class="p">}</span>
-</span><span id="Presto-315"><a href="#Presto-315"><span class="linenos">315</span></a>
-</span><span id="Presto-316"><a href="#Presto-316"><span class="linenos">316</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-317"><a href="#Presto-317"><span class="linenos">317</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><span id="Presto-318"><a href="#Presto-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
-</span><span id="Presto-319"><a href="#Presto-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">_approx_distinct_sql</span><span class="p">,</span>
-</span><span id="Presto-320"><a href="#Presto-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">),</span>
-</span><span id="Presto-321"><a href="#Presto-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX_BY&quot;</span><span class="p">),</span>
-</span><span id="Presto-322"><a href="#Presto-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN_BY&quot;</span><span class="p">),</span>
-</span><span id="Presto-323"><a href="#Presto-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ARRAY[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
-</span><span id="Presto-324"><a href="#Presto-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">),</span>
-</span><span id="Presto-325"><a href="#Presto-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="Presto-326"><a href="#Presto-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CARDINALITY&quot;</span><span class="p">),</span>
-</span><span id="Presto-327"><a href="#Presto-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayUniqueAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SET_AGG&quot;</span><span class="p">),</span>
-</span><span id="Presto-328"><a href="#Presto-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AT_TIMEZONE&quot;</span><span class="p">),</span>
-</span><span id="Presto-329"><a href="#Presto-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-330"><a href="#Presto-330"><span class="linenos">330</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_AND(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-331"><a href="#Presto-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-332"><a href="#Presto-332"><span class="linenos">332</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_LEFT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-333"><a href="#Presto-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_NOT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-334"><a href="#Presto-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-335"><a href="#Presto-335"><span class="linenos">335</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_OR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-336"><a href="#Presto-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-337"><a href="#Presto-337"><span class="linenos">337</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_RIGHT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-338"><a href="#Presto-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-339"><a href="#Presto-339"><span class="linenos">339</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_XOR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-340"><a href="#Presto-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto-341"><a href="#Presto-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto-342"><a href="#Presto-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</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="Presto-343"><a href="#Presto-343"><span class="linenos">343</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
-</span><span id="Presto-344"><a href="#Presto-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Presto-345"><a href="#Presto-345"><span class="linenos">345</span></a> <span class="n">_to_int</span><span class="p">(</span>
-</span><span id="Presto-346"><a href="#Presto-346"><span class="linenos">346</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Presto-347"><a href="#Presto-347"><span class="linenos">347</span></a> <span class="p">),</span>
-</span><span id="Presto-348"><a href="#Presto-348"><span class="linenos">348</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto-349"><a href="#Presto-349"><span class="linenos">349</span></a> <span class="p">),</span>
-</span><span id="Presto-350"><a href="#Presto-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="Presto-351"><a href="#Presto-351"><span class="linenos">351</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&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><span id="Presto-352"><a href="#Presto-352"><span class="linenos">352</span></a> <span class="p">),</span>
-</span><span id="Presto-353"><a href="#Presto-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="Presto-354"><a href="#Presto-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-355"><a href="#Presto-355"><span class="linenos">355</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Presto-356"><a href="#Presto-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</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="Presto-357"><a href="#Presto-357"><span class="linenos">357</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
-</span><span id="Presto-358"><a href="#Presto-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Presto-359"><a href="#Presto-359"><span class="linenos">359</span></a> <span class="n">_to_int</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="Presto-360"><a href="#Presto-360"><span class="linenos">360</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto-361"><a href="#Presto-361"><span class="linenos">361</span></a> <span class="p">),</span>
-</span><span id="Presto-362"><a href="#Presto-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto-363"><a href="#Presto-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-364"><a href="#Presto-364"><span class="linenos">364</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_PARSE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Presto-365"><a href="#Presto-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto-366"><a href="#Presto-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FORMAT=&#39;</span><span class="si">{</span><span class="n">e</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="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
-</span><span id="Presto-367"><a href="#Presto-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto-368"><a href="#Presto-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FirstValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto-369"><a href="#Presto-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-370"><a href="#Presto-370"><span class="linenos">370</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH_TIMEZONE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AT TIME ZONE &#39;UTC&#39;&quot;</span><span class="p">,</span>
-</span><span id="Presto-371"><a href="#Presto-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unalias_group</span><span class="p">]),</span>
-</span><span id="Presto-372"><a href="#Presto-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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="Presto-373"><a href="#Presto-373"><span class="linenos">373</span></a> <span class="s2">&quot;ARRAY_JOIN&quot;</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;ARRAY_AGG&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">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><span id="Presto-374"><a href="#Presto-374"><span class="linenos">374</span></a> <span class="p">),</span>
-</span><span id="Presto-375"><a href="#Presto-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_HEX&quot;</span><span class="p">),</span>
-</span><span id="Presto-376"><a href="#Presto-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">(),</span>
-</span><span id="Presto-377"><a href="#Presto-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="Presto-378"><a href="#Presto-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Initcap</span><span class="p">:</span> <span class="n">_initcap_sql</span><span class="p">,</span>
-</span><span id="Presto-379"><a href="#Presto-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
-</span><span id="Presto-380"><a href="#Presto-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto-381"><a href="#Presto-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto-382"><a href="#Presto-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</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;LAST_DAY_OF_MONTH&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="Presto-383"><a href="#Presto-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="n">_explode_to_unnest_sql</span><span class="p">,</span>
-</span><span id="Presto-384"><a href="#Presto-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto-385"><a href="#Presto-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
-</span><span id="Presto-386"><a href="#Presto-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="Presto-387"><a href="#Presto-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="Presto-388"><a href="#Presto-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Presto-389"><a href="#Presto-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
-</span><span id="Presto-390"><a href="#Presto-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="Presto-391"><a href="#Presto-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto-392"><a href="#Presto-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
-</span><span id="Presto-393"><a href="#Presto-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">:</span> <span class="n">_schema_sql</span><span class="p">,</span>
-</span><span id="Presto-394"><a href="#Presto-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Presto-395"><a href="#Presto-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Presto-396"><a href="#Presto-396"><span class="linenos">396</span></a> <span class="p">[</span>
-</span><span id="Presto-397"><a href="#Presto-397"><span class="linenos">397</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="Presto-398"><a href="#Presto-398"><span class="linenos">398</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
-</span><span id="Presto-399"><a href="#Presto-399"><span class="linenos">399</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="Presto-400"><a href="#Presto-400"><span class="linenos">400</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
-</span><span id="Presto-401"><a href="#Presto-401"><span class="linenos">401</span></a> <span class="p">]</span>
-</span><span id="Presto-402"><a href="#Presto-402"><span class="linenos">402</span></a> <span class="p">),</span>
-</span><span id="Presto-403"><a href="#Presto-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</span><span class="p">,</span>
-</span><span id="Presto-404"><a href="#Presto-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRPOS&quot;</span><span class="p">),</span>
-</span><span id="Presto-405"><a href="#Presto-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">_str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Presto-406"><a href="#Presto-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
-</span><span id="Presto-407"><a href="#Presto-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</span><span class="p">,</span>
-</span><span id="Presto-408"><a href="#Presto-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-409"><a href="#Presto-409"><span class="linenos">409</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="Presto-410"><a href="#Presto-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
-</span><span id="Presto-411"><a href="#Presto-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
-</span><span id="Presto-412"><a href="#Presto-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
-</span><span id="Presto-413"><a href="#Presto-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="Presto-414"><a href="#Presto-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Presto-415"><a href="#Presto-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Presto-416"><a href="#Presto-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-417"><a href="#Presto-417"><span class="linenos">417</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="Presto-418"><a href="#Presto-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-419"><a href="#Presto-419"><span class="linenos">419</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-420"><a href="#Presto-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="Presto-421"><a href="#Presto-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-422"><a href="#Presto-422"><span class="linenos">422</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-423"><a href="#Presto-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto-424"><a href="#Presto-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-425"><a href="#Presto-425"><span class="linenos">425</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Presto-426"><a href="#Presto-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
-</span><span id="Presto-427"><a href="#Presto-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_ts_or_ds_diff_sql</span><span class="p">,</span>
-</span><span id="Presto-428"><a href="#Presto-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_ts_or_ds_to_date_sql</span><span class="p">,</span>
-</span><span id="Presto-429"><a href="#Presto-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_HEX&quot;</span><span class="p">),</span>
-</span><span id="Presto-430"><a href="#Presto-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-431"><a href="#Presto-431"><span class="linenos">431</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto-432"><a href="#Presto-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
-</span><span id="Presto-433"><a href="#Presto-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto-434"><a href="#Presto-434"><span class="linenos">434</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS VARCHAR)&quot;</span><span class="p">,</span>
-</span><span id="Presto-435"><a href="#Presto-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
-</span><span id="Presto-436"><a href="#Presto-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
-</span><span id="Presto-437"><a href="#Presto-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Presto-438"><a href="#Presto-438"><span class="linenos">438</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Presto-439"><a href="#Presto-439"><span class="linenos">439</span></a> <span class="p">),</span>
-</span><span id="Presto-440"><a href="#Presto-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="Presto-441"><a href="#Presto-441"><span class="linenos">441</span></a> <span class="p">}</span>
-</span><span id="Presto-442"><a href="#Presto-442"><span class="linenos">442</span></a>
-</span><span id="Presto-443"><a href="#Presto-443"><span class="linenos">443</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto-444"><a href="#Presto-444"><span class="linenos">444</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><span class="p">):</span>
-</span><span id="Presto-445"><a href="#Presto-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Presto-446"><a href="#Presto-446"><span class="linenos">446</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
-</span><span id="Presto-447"><a href="#Presto-447"><span class="linenos">447</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto-448"><a href="#Presto-448"><span class="linenos">448</span></a> <span class="n">seq_get</span><span class="p">(</span>
-</span><span id="Presto-449"><a href="#Presto-449"><span class="linenos">449</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
-</span><span id="Presto-450"><a href="#Presto-450"><span class="linenos">450</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto-451"><a href="#Presto-451"><span class="linenos">451</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Presto-452"><a href="#Presto-452"><span class="linenos">452</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Presto-453"><a href="#Presto-453"><span class="linenos">453</span></a> <span class="p">),</span>
-</span><span id="Presto-454"><a href="#Presto-454"><span class="linenos">454</span></a> <span class="mi">0</span><span class="p">,</span>
-</span><span id="Presto-455"><a href="#Presto-455"><span class="linenos">455</span></a> <span class="p">),</span>
-</span><span id="Presto-456"><a href="#Presto-456"><span class="linenos">456</span></a> <span class="p">)</span>
-</span><span id="Presto-457"><a href="#Presto-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto-458"><a href="#Presto-458"><span class="linenos">458</span></a>
-</span><span id="Presto-459"><a href="#Presto-459"><span class="linenos">459</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto-460"><a href="#Presto-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Presto-461"><a href="#Presto-461"><span class="linenos">461</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
-</span><span id="Presto-462"><a href="#Presto-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto-463"><a href="#Presto-463"><span class="linenos">463</span></a>
-</span><span id="Presto-464"><a href="#Presto-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto-465"><a href="#Presto-465"><span class="linenos">465</span></a>
-</span><span id="Presto-466"><a href="#Presto-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto-467"><a href="#Presto-467"><span class="linenos">467</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
-</span><span id="Presto-468"><a href="#Presto-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
-</span><span id="Presto-469"><a href="#Presto-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
-</span><span id="Presto-470"><a href="#Presto-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto-471"><a href="#Presto-471"><span class="linenos">471</span></a>
-</span><span id="Presto-472"><a href="#Presto-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto-473"><a href="#Presto-473"><span class="linenos">473</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
-</span><span id="Presto-474"><a href="#Presto-474"><span class="linenos">474</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Presto-475"><a href="#Presto-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Presto-476"><a href="#Presto-476"><span class="linenos">476</span></a>
-</span><span id="Presto-477"><a href="#Presto-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto-478"><a href="#Presto-478"><span class="linenos">478</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
-</span><span id="Presto-479"><a href="#Presto-479"><span class="linenos">479</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
-</span><span id="Presto-480"><a href="#Presto-480"><span class="linenos">480</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
-</span><span id="Presto-481"><a href="#Presto-481"><span class="linenos">481</span></a>
-</span><span id="Presto-482"><a href="#Presto-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto-483"><a href="#Presto-483"><span class="linenos">483</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto-484"><a href="#Presto-484"><span class="linenos">484</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto-485"><a href="#Presto-485"><span class="linenos">485</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto-486"><a href="#Presto-486"><span class="linenos">486</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto-487"><a href="#Presto-487"><span class="linenos">487</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Presto-488"><a href="#Presto-488"><span class="linenos">488</span></a>
-</span><span id="Presto-489"><a href="#Presto-489"><span class="linenos">489</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="Presto-490"><a href="#Presto-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="Presto-491"><a href="#Presto-491"><span class="linenos">491</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="Presto-492"><a href="#Presto-492"><span class="linenos">492</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto-493"><a href="#Presto-493"><span class="linenos">493</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="Presto-494"><a href="#Presto-494"><span class="linenos">494</span></a>
-</span><span id="Presto-495"><a href="#Presto-495"><span class="linenos">495</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;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
-</span><span id="Presto-496"><a href="#Presto-496"><span class="linenos">496</span></a>
-</span><span id="Presto-497"><a href="#Presto-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Presto-498"><a href="#Presto-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Presto-499"><a href="#Presto-499"><span class="linenos">499</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Presto-500"><a href="#Presto-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Presto-501"><a href="#Presto-501"><span class="linenos">501</span></a> <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;offset&quot;</span><span class="p">),</span>
-</span><span id="Presto-502"><a href="#Presto-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Presto-503"><a href="#Presto-503"><span class="linenos">503</span></a> <span class="p">]</span>
-</span><span id="Presto-504"><a href="#Presto-504"><span class="linenos">504</span></a>
-</span><span id="Presto-505"><a href="#Presto-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto-506"><a href="#Presto-506"><span class="linenos">506</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Presto-507"><a href="#Presto-507"><span class="linenos">507</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
-</span><span id="Presto-508"><a href="#Presto-508"><span class="linenos">508</span></a><span class="sd"> so we need to remove them</span>
-</span><span id="Presto-509"><a href="#Presto-509"><span class="linenos">509</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Presto-510"><a href="#Presto-510"><span class="linenos">510</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="Presto-511"><a href="#Presto-511"><span class="linenos">511</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Presto-512"><a href="#Presto-512"><span class="linenos">512</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Presto-513"><a href="#Presto-513"><span class="linenos">513</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Presto-514"><a href="#Presto-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto-296"><a href="#Presto-296"><span class="linenos">296</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto-297"><a href="#Presto-297"><span class="linenos">297</span></a>
+</span><span id="Presto-298"><a href="#Presto-298"><span class="linenos">298</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-299"><a href="#Presto-299"><span class="linenos">299</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><span id="Presto-300"><a href="#Presto-300"><span class="linenos">300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</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="Presto-301"><a href="#Presto-301"><span class="linenos">301</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="Presto-302"><a href="#Presto-302"><span class="linenos">302</span></a> <span class="p">}</span>
+</span><span id="Presto-303"><a href="#Presto-303"><span class="linenos">303</span></a>
+</span><span id="Presto-304"><a href="#Presto-304"><span class="linenos">304</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-305"><a href="#Presto-305"><span class="linenos">305</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><span id="Presto-306"><a href="#Presto-306"><span class="linenos">306</span></a> <span class="n">exp</span><span 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="Presto-307"><a href="#Presto-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="Presto-308"><a href="#Presto-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
+</span><span id="Presto-309"><a href="#Presto-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Presto-310"><a href="#Presto-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="Presto-311"><a href="#Presto-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto-312"><a href="#Presto-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span>
+</span><span id="Presto-313"><a href="#Presto-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto-314"><a href="#Presto-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto-315"><a href="#Presto-315"><span class="linenos">315</span></a> <span class="p">}</span>
+</span><span id="Presto-316"><a href="#Presto-316"><span class="linenos">316</span></a>
+</span><span id="Presto-317"><a href="#Presto-317"><span class="linenos">317</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-318"><a href="#Presto-318"><span class="linenos">318</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><span id="Presto-319"><a href="#Presto-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
+</span><span id="Presto-320"><a href="#Presto-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">_approx_distinct_sql</span><span class="p">,</span>
+</span><span id="Presto-321"><a href="#Presto-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">),</span>
+</span><span id="Presto-322"><a href="#Presto-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX_BY&quot;</span><span class="p">),</span>
+</span><span id="Presto-323"><a href="#Presto-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN_BY&quot;</span><span class="p">),</span>
+</span><span id="Presto-324"><a href="#Presto-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ARRAY[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
+</span><span id="Presto-325"><a href="#Presto-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">),</span>
+</span><span id="Presto-326"><a href="#Presto-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="Presto-327"><a href="#Presto-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CARDINALITY&quot;</span><span class="p">),</span>
+</span><span id="Presto-328"><a href="#Presto-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayUniqueAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SET_AGG&quot;</span><span class="p">),</span>
+</span><span id="Presto-329"><a href="#Presto-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AT_TIMEZONE&quot;</span><span class="p">),</span>
+</span><span id="Presto-330"><a href="#Presto-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-331"><a href="#Presto-331"><span class="linenos">331</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_AND(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-332"><a href="#Presto-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-333"><a href="#Presto-333"><span class="linenos">333</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_LEFT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-334"><a href="#Presto-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_NOT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-335"><a href="#Presto-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-336"><a href="#Presto-336"><span class="linenos">336</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_OR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-337"><a href="#Presto-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-338"><a href="#Presto-338"><span class="linenos">338</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_RIGHT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-339"><a href="#Presto-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-340"><a href="#Presto-340"><span class="linenos">340</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_XOR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-341"><a href="#Presto-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto-342"><a href="#Presto-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto-343"><a href="#Presto-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</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="Presto-344"><a href="#Presto-344"><span class="linenos">344</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
+</span><span id="Presto-345"><a href="#Presto-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Presto-346"><a href="#Presto-346"><span class="linenos">346</span></a> <span class="n">_to_int</span><span class="p">(</span>
+</span><span id="Presto-347"><a href="#Presto-347"><span class="linenos">347</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Presto-348"><a href="#Presto-348"><span class="linenos">348</span></a> <span class="p">),</span>
+</span><span id="Presto-349"><a href="#Presto-349"><span class="linenos">349</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto-350"><a href="#Presto-350"><span class="linenos">350</span></a> <span class="p">),</span>
+</span><span id="Presto-351"><a href="#Presto-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="Presto-352"><a href="#Presto-352"><span class="linenos">352</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&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><span id="Presto-353"><a href="#Presto-353"><span class="linenos">353</span></a> <span class="p">),</span>
+</span><span id="Presto-354"><a href="#Presto-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="Presto-355"><a href="#Presto-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-356"><a href="#Presto-356"><span class="linenos">356</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Presto-357"><a href="#Presto-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</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="Presto-358"><a href="#Presto-358"><span class="linenos">358</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
+</span><span id="Presto-359"><a href="#Presto-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Presto-360"><a href="#Presto-360"><span class="linenos">360</span></a> <span class="n">_to_int</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="Presto-361"><a href="#Presto-361"><span class="linenos">361</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto-362"><a href="#Presto-362"><span class="linenos">362</span></a> <span class="p">),</span>
+</span><span id="Presto-363"><a href="#Presto-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto-364"><a href="#Presto-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-365"><a href="#Presto-365"><span class="linenos">365</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_PARSE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Presto-366"><a href="#Presto-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto-367"><a href="#Presto-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FORMAT=&#39;</span><span class="si">{</span><span class="n">e</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="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
+</span><span id="Presto-368"><a href="#Presto-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto-369"><a href="#Presto-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FirstValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto-370"><a href="#Presto-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-371"><a href="#Presto-371"><span class="linenos">371</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH_TIMEZONE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AT TIME ZONE &#39;UTC&#39;&quot;</span><span class="p">,</span>
+</span><span id="Presto-372"><a href="#Presto-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unalias_group</span><span class="p">]),</span>
+</span><span id="Presto-373"><a href="#Presto-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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="Presto-374"><a href="#Presto-374"><span class="linenos">374</span></a> <span class="s2">&quot;ARRAY_JOIN&quot;</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;ARRAY_AGG&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">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><span id="Presto-375"><a href="#Presto-375"><span class="linenos">375</span></a> <span class="p">),</span>
+</span><span id="Presto-376"><a href="#Presto-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_HEX&quot;</span><span class="p">),</span>
+</span><span id="Presto-377"><a href="#Presto-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">(),</span>
+</span><span id="Presto-378"><a href="#Presto-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="Presto-379"><a href="#Presto-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Initcap</span><span class="p">:</span> <span class="n">_initcap_sql</span><span class="p">,</span>
+</span><span id="Presto-380"><a href="#Presto-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
+</span><span id="Presto-381"><a href="#Presto-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto-382"><a href="#Presto-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto-383"><a href="#Presto-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</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;LAST_DAY_OF_MONTH&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="Presto-384"><a href="#Presto-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="n">_explode_to_unnest_sql</span><span class="p">,</span>
+</span><span id="Presto-385"><a href="#Presto-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto-386"><a href="#Presto-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
+</span><span id="Presto-387"><a href="#Presto-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="Presto-388"><a href="#Presto-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="Presto-389"><a href="#Presto-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Presto-390"><a href="#Presto-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
+</span><span id="Presto-391"><a href="#Presto-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="Presto-392"><a href="#Presto-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto-393"><a href="#Presto-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="Presto-394"><a href="#Presto-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">:</span> <span class="n">_schema_sql</span><span class="p">,</span>
+</span><span id="Presto-395"><a href="#Presto-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Presto-396"><a href="#Presto-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Presto-397"><a href="#Presto-397"><span class="linenos">397</span></a> <span class="p">[</span>
+</span><span id="Presto-398"><a href="#Presto-398"><span class="linenos">398</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="Presto-399"><a href="#Presto-399"><span class="linenos">399</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
+</span><span id="Presto-400"><a href="#Presto-400"><span class="linenos">400</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="Presto-401"><a href="#Presto-401"><span class="linenos">401</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
+</span><span id="Presto-402"><a href="#Presto-402"><span class="linenos">402</span></a> <span class="p">]</span>
+</span><span id="Presto-403"><a href="#Presto-403"><span class="linenos">403</span></a> <span class="p">),</span>
+</span><span id="Presto-404"><a href="#Presto-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</span><span class="p">,</span>
+</span><span id="Presto-405"><a href="#Presto-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRPOS&quot;</span><span class="p">),</span>
+</span><span id="Presto-406"><a href="#Presto-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">_str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Presto-407"><a href="#Presto-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
+</span><span id="Presto-408"><a href="#Presto-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</span><span class="p">,</span>
+</span><span id="Presto-409"><a href="#Presto-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-410"><a href="#Presto-410"><span class="linenos">410</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="Presto-411"><a href="#Presto-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="Presto-412"><a href="#Presto-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
+</span><span id="Presto-413"><a href="#Presto-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
+</span><span id="Presto-414"><a href="#Presto-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="Presto-415"><a href="#Presto-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Presto-416"><a href="#Presto-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Presto-417"><a href="#Presto-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-418"><a href="#Presto-418"><span class="linenos">418</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="Presto-419"><a href="#Presto-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-420"><a href="#Presto-420"><span class="linenos">420</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-421"><a href="#Presto-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Presto-422"><a href="#Presto-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-423"><a href="#Presto-423"><span class="linenos">423</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-424"><a href="#Presto-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto-425"><a href="#Presto-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-426"><a href="#Presto-426"><span class="linenos">426</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Presto-427"><a href="#Presto-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
+</span><span id="Presto-428"><a href="#Presto-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_ts_or_ds_diff_sql</span><span class="p">,</span>
+</span><span id="Presto-429"><a href="#Presto-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_ts_or_ds_to_date_sql</span><span class="p">,</span>
+</span><span id="Presto-430"><a href="#Presto-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_HEX&quot;</span><span class="p">),</span>
+</span><span id="Presto-431"><a href="#Presto-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-432"><a href="#Presto-432"><span class="linenos">432</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto-433"><a href="#Presto-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
+</span><span id="Presto-434"><a href="#Presto-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto-435"><a href="#Presto-435"><span class="linenos">435</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS VARCHAR)&quot;</span><span class="p">,</span>
+</span><span id="Presto-436"><a href="#Presto-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
+</span><span id="Presto-437"><a href="#Presto-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
+</span><span id="Presto-438"><a href="#Presto-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Presto-439"><a href="#Presto-439"><span class="linenos">439</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Presto-440"><a href="#Presto-440"><span class="linenos">440</span></a> <span class="p">),</span>
+</span><span id="Presto-441"><a href="#Presto-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="Presto-442"><a href="#Presto-442"><span class="linenos">442</span></a> <span class="p">}</span>
+</span><span id="Presto-443"><a href="#Presto-443"><span class="linenos">443</span></a>
+</span><span id="Presto-444"><a href="#Presto-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto-445"><a href="#Presto-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><span class="p">):</span>
+</span><span id="Presto-446"><a href="#Presto-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Presto-447"><a href="#Presto-447"><span class="linenos">447</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
+</span><span id="Presto-448"><a href="#Presto-448"><span class="linenos">448</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto-449"><a href="#Presto-449"><span class="linenos">449</span></a> <span class="n">seq_get</span><span class="p">(</span>
+</span><span id="Presto-450"><a href="#Presto-450"><span class="linenos">450</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
+</span><span id="Presto-451"><a href="#Presto-451"><span class="linenos">451</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto-452"><a href="#Presto-452"><span class="linenos">452</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Presto-453"><a href="#Presto-453"><span class="linenos">453</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Presto-454"><a href="#Presto-454"><span class="linenos">454</span></a> <span class="p">),</span>
+</span><span id="Presto-455"><a href="#Presto-455"><span class="linenos">455</span></a> <span class="mi">0</span><span class="p">,</span>
+</span><span id="Presto-456"><a href="#Presto-456"><span class="linenos">456</span></a> <span class="p">),</span>
+</span><span id="Presto-457"><a href="#Presto-457"><span class="linenos">457</span></a> <span class="p">)</span>
+</span><span id="Presto-458"><a href="#Presto-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto-459"><a href="#Presto-459"><span class="linenos">459</span></a>
+</span><span id="Presto-460"><a href="#Presto-460"><span class="linenos">460</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto-461"><a href="#Presto-461"><span class="linenos">461</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Presto-462"><a href="#Presto-462"><span class="linenos">462</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
+</span><span id="Presto-463"><a href="#Presto-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto-464"><a href="#Presto-464"><span class="linenos">464</span></a>
+</span><span id="Presto-465"><a href="#Presto-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto-466"><a href="#Presto-466"><span class="linenos">466</span></a>
+</span><span id="Presto-467"><a href="#Presto-467"><span class="linenos">467</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto-468"><a href="#Presto-468"><span class="linenos">468</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
+</span><span id="Presto-469"><a href="#Presto-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
+</span><span id="Presto-470"><a href="#Presto-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
+</span><span id="Presto-471"><a href="#Presto-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto-472"><a href="#Presto-472"><span class="linenos">472</span></a>
+</span><span id="Presto-473"><a href="#Presto-473"><span class="linenos">473</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto-474"><a href="#Presto-474"><span class="linenos">474</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
+</span><span id="Presto-475"><a href="#Presto-475"><span class="linenos">475</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Presto-476"><a href="#Presto-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Presto-477"><a href="#Presto-477"><span class="linenos">477</span></a>
+</span><span id="Presto-478"><a href="#Presto-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto-479"><a href="#Presto-479"><span class="linenos">479</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
+</span><span id="Presto-480"><a href="#Presto-480"><span class="linenos">480</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
+</span><span id="Presto-481"><a href="#Presto-481"><span class="linenos">481</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
+</span><span id="Presto-482"><a href="#Presto-482"><span class="linenos">482</span></a>
+</span><span id="Presto-483"><a href="#Presto-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto-484"><a href="#Presto-484"><span class="linenos">484</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto-485"><a href="#Presto-485"><span class="linenos">485</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto-486"><a href="#Presto-486"><span class="linenos">486</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto-487"><a href="#Presto-487"><span class="linenos">487</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto-488"><a href="#Presto-488"><span class="linenos">488</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Presto-489"><a href="#Presto-489"><span class="linenos">489</span></a>
+</span><span id="Presto-490"><a href="#Presto-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="Presto-491"><a href="#Presto-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="Presto-492"><a href="#Presto-492"><span class="linenos">492</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="Presto-493"><a href="#Presto-493"><span class="linenos">493</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto-494"><a href="#Presto-494"><span class="linenos">494</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="Presto-495"><a href="#Presto-495"><span class="linenos">495</span></a>
+</span><span id="Presto-496"><a href="#Presto-496"><span class="linenos">496</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;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
+</span><span id="Presto-497"><a href="#Presto-497"><span class="linenos">497</span></a>
+</span><span id="Presto-498"><a href="#Presto-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Presto-499"><a href="#Presto-499"><span class="linenos">499</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Presto-500"><a href="#Presto-500"><span class="linenos">500</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Presto-501"><a href="#Presto-501"><span class="linenos">501</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Presto-502"><a href="#Presto-502"><span class="linenos">502</span></a> <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;offset&quot;</span><span class="p">),</span>
+</span><span id="Presto-503"><a href="#Presto-503"><span class="linenos">503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Presto-504"><a href="#Presto-504"><span class="linenos">504</span></a> <span class="p">]</span>
+</span><span id="Presto-505"><a href="#Presto-505"><span class="linenos">505</span></a>
+</span><span id="Presto-506"><a href="#Presto-506"><span class="linenos">506</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto-507"><a href="#Presto-507"><span class="linenos">507</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Presto-508"><a href="#Presto-508"><span class="linenos">508</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
+</span><span id="Presto-509"><a href="#Presto-509"><span class="linenos">509</span></a><span class="sd"> so we need to remove them</span>
+</span><span id="Presto-510"><a href="#Presto-510"><span class="linenos">510</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Presto-511"><a href="#Presto-511"><span class="linenos">511</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="Presto-512"><a href="#Presto-512"><span class="linenos">512</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Presto-513"><a href="#Presto-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Presto-514"><a href="#Presto-514"><span class="linenos">514</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Presto-515"><a href="#Presto-515"><span class="linenos">515</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1587,6 +1592,8 @@ True means <code>a / b</code> is integer division if both <code>a</code> and <co
<dd id="Presto.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Presto.Tokenizer.STRING_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a></dd>
<dd id="Presto.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Presto.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Presto.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Presto.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Presto.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Presto.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -1721,7 +1728,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Presto.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Presto.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Presto.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -1882,225 +1889,226 @@ Default: 3</li>
</span><span id="Presto.Generator-293"><a href="#Presto.Generator-293"><span class="linenos">293</span></a> <span class="n">LIMIT_ONLY_LITERALS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Presto.Generator-294"><a href="#Presto.Generator-294"><span class="linenos">294</span></a> <span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Presto.Generator-295"><a href="#Presto.Generator-295"><span class="linenos">295</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Presto.Generator-296"><a href="#Presto.Generator-296"><span class="linenos">296</span></a>
-</span><span id="Presto.Generator-297"><a href="#Presto.Generator-297"><span class="linenos">297</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-298"><a href="#Presto.Generator-298"><span class="linenos">298</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><span id="Presto.Generator-299"><a href="#Presto.Generator-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</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="Presto.Generator-300"><a href="#Presto.Generator-300"><span class="linenos">300</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="Presto.Generator-301"><a href="#Presto.Generator-301"><span class="linenos">301</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-302"><a href="#Presto.Generator-302"><span class="linenos">302</span></a>
-</span><span id="Presto.Generator-303"><a href="#Presto.Generator-303"><span class="linenos">303</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-304"><a href="#Presto.Generator-304"><span class="linenos">304</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><span id="Presto.Generator-305"><a href="#Presto.Generator-305"><span class="linenos">305</span></a> <span class="n">exp</span><span 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="Presto.Generator-306"><a href="#Presto.Generator-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-307"><a href="#Presto.Generator-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-308"><a href="#Presto.Generator-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-309"><a href="#Presto.Generator-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-310"><a href="#Presto.Generator-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-311"><a href="#Presto.Generator-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-312"><a href="#Presto.Generator-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-313"><a href="#Presto.Generator-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-314"><a href="#Presto.Generator-314"><span class="linenos">314</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-315"><a href="#Presto.Generator-315"><span class="linenos">315</span></a>
-</span><span id="Presto.Generator-316"><a href="#Presto.Generator-316"><span class="linenos">316</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-317"><a href="#Presto.Generator-317"><span class="linenos">317</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><span id="Presto.Generator-318"><a href="#Presto.Generator-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-319"><a href="#Presto.Generator-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">_approx_distinct_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-320"><a href="#Presto.Generator-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-321"><a href="#Presto.Generator-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX_BY&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-322"><a href="#Presto.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN_BY&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-323"><a href="#Presto.Generator-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ARRAY[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-324"><a href="#Presto.Generator-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-325"><a href="#Presto.Generator-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-326"><a href="#Presto.Generator-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CARDINALITY&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-327"><a href="#Presto.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayUniqueAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SET_AGG&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-328"><a href="#Presto.Generator-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AT_TIMEZONE&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-329"><a href="#Presto.Generator-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-330"><a href="#Presto.Generator-330"><span class="linenos">330</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_AND(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-331"><a href="#Presto.Generator-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-332"><a href="#Presto.Generator-332"><span class="linenos">332</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_LEFT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-333"><a href="#Presto.Generator-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_NOT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-334"><a href="#Presto.Generator-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-335"><a href="#Presto.Generator-335"><span class="linenos">335</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_OR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-336"><a href="#Presto.Generator-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-337"><a href="#Presto.Generator-337"><span class="linenos">337</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_RIGHT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-338"><a href="#Presto.Generator-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-339"><a href="#Presto.Generator-339"><span class="linenos">339</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_XOR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-340"><a href="#Presto.Generator-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto.Generator-341"><a href="#Presto.Generator-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-342"><a href="#Presto.Generator-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</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="Presto.Generator-343"><a href="#Presto.Generator-343"><span class="linenos">343</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-344"><a href="#Presto.Generator-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-345"><a href="#Presto.Generator-345"><span class="linenos">345</span></a> <span class="n">_to_int</span><span class="p">(</span>
-</span><span id="Presto.Generator-346"><a href="#Presto.Generator-346"><span class="linenos">346</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Presto.Generator-347"><a href="#Presto.Generator-347"><span class="linenos">347</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-348"><a href="#Presto.Generator-348"><span class="linenos">348</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto.Generator-349"><a href="#Presto.Generator-349"><span class="linenos">349</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-350"><a href="#Presto.Generator-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="Presto.Generator-351"><a href="#Presto.Generator-351"><span class="linenos">351</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&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><span id="Presto.Generator-352"><a href="#Presto.Generator-352"><span class="linenos">352</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-353"><a href="#Presto.Generator-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-354"><a href="#Presto.Generator-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-355"><a href="#Presto.Generator-355"><span class="linenos">355</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-356"><a href="#Presto.Generator-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</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="Presto.Generator-357"><a href="#Presto.Generator-357"><span class="linenos">357</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-358"><a href="#Presto.Generator-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-359"><a href="#Presto.Generator-359"><span class="linenos">359</span></a> <span class="n">_to_int</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="Presto.Generator-360"><a href="#Presto.Generator-360"><span class="linenos">360</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto.Generator-361"><a href="#Presto.Generator-361"><span class="linenos">361</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-362"><a href="#Presto.Generator-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-363"><a href="#Presto.Generator-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-364"><a href="#Presto.Generator-364"><span class="linenos">364</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_PARSE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-365"><a href="#Presto.Generator-365"><span class="linenos">365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-366"><a href="#Presto.Generator-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FORMAT=&#39;</span><span class="si">{</span><span class="n">e</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="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-367"><a href="#Presto.Generator-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-368"><a href="#Presto.Generator-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FirstValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-369"><a href="#Presto.Generator-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-370"><a href="#Presto.Generator-370"><span class="linenos">370</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH_TIMEZONE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AT TIME ZONE &#39;UTC&#39;&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-371"><a href="#Presto.Generator-371"><span class="linenos">371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unalias_group</span><span class="p">]),</span>
-</span><span id="Presto.Generator-372"><a href="#Presto.Generator-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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="Presto.Generator-373"><a href="#Presto.Generator-373"><span class="linenos">373</span></a> <span class="s2">&quot;ARRAY_JOIN&quot;</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;ARRAY_AGG&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">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><span id="Presto.Generator-374"><a href="#Presto.Generator-374"><span class="linenos">374</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-375"><a href="#Presto.Generator-375"><span class="linenos">375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_HEX&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-376"><a href="#Presto.Generator-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">(),</span>
-</span><span id="Presto.Generator-377"><a href="#Presto.Generator-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-378"><a href="#Presto.Generator-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Initcap</span><span class="p">:</span> <span class="n">_initcap_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-379"><a href="#Presto.Generator-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-380"><a href="#Presto.Generator-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-381"><a href="#Presto.Generator-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-382"><a href="#Presto.Generator-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</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;LAST_DAY_OF_MONTH&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="Presto.Generator-383"><a href="#Presto.Generator-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="n">_explode_to_unnest_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-384"><a href="#Presto.Generator-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-385"><a href="#Presto.Generator-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-386"><a href="#Presto.Generator-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-387"><a href="#Presto.Generator-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-388"><a href="#Presto.Generator-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-389"><a href="#Presto.Generator-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-390"><a href="#Presto.Generator-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-391"><a href="#Presto.Generator-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-392"><a href="#Presto.Generator-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-393"><a href="#Presto.Generator-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">:</span> <span class="n">_schema_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-394"><a href="#Presto.Generator-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Presto.Generator-395"><a href="#Presto.Generator-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Presto.Generator-396"><a href="#Presto.Generator-396"><span class="linenos">396</span></a> <span class="p">[</span>
-</span><span id="Presto.Generator-397"><a href="#Presto.Generator-397"><span class="linenos">397</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
-</span><span id="Presto.Generator-398"><a href="#Presto.Generator-398"><span class="linenos">398</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
-</span><span id="Presto.Generator-399"><a href="#Presto.Generator-399"><span class="linenos">399</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="Presto.Generator-400"><a href="#Presto.Generator-400"><span class="linenos">400</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
-</span><span id="Presto.Generator-401"><a href="#Presto.Generator-401"><span class="linenos">401</span></a> <span class="p">]</span>
-</span><span id="Presto.Generator-402"><a href="#Presto.Generator-402"><span class="linenos">402</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-403"><a href="#Presto.Generator-403"><span class="linenos">403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</span><span class="p">,</span>
-</span><span id="Presto.Generator-404"><a href="#Presto.Generator-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRPOS&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-405"><a href="#Presto.Generator-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">_str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-406"><a href="#Presto.Generator-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-407"><a href="#Presto.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-408"><a href="#Presto.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-409"><a href="#Presto.Generator-409"><span class="linenos">409</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-410"><a href="#Presto.Generator-410"><span class="linenos">410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-411"><a href="#Presto.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
-</span><span id="Presto.Generator-412"><a href="#Presto.Generator-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-413"><a href="#Presto.Generator-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-414"><a href="#Presto.Generator-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-415"><a href="#Presto.Generator-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-416"><a href="#Presto.Generator-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-417"><a href="#Presto.Generator-417"><span class="linenos">417</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-418"><a href="#Presto.Generator-418"><span class="linenos">418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-419"><a href="#Presto.Generator-419"><span class="linenos">419</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-420"><a href="#Presto.Generator-420"><span class="linenos">420</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-421"><a href="#Presto.Generator-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-422"><a href="#Presto.Generator-422"><span class="linenos">422</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-423"><a href="#Presto.Generator-423"><span class="linenos">423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
-</span><span id="Presto.Generator-424"><a href="#Presto.Generator-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-425"><a href="#Presto.Generator-425"><span class="linenos">425</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-426"><a href="#Presto.Generator-426"><span class="linenos">426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-427"><a href="#Presto.Generator-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_ts_or_ds_diff_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-428"><a href="#Presto.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_ts_or_ds_to_date_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-429"><a href="#Presto.Generator-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_HEX&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-430"><a href="#Presto.Generator-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-431"><a href="#Presto.Generator-431"><span class="linenos">431</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-432"><a href="#Presto.Generator-432"><span class="linenos">432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-433"><a href="#Presto.Generator-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Presto.Generator-434"><a href="#Presto.Generator-434"><span class="linenos">434</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS VARCHAR)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-435"><a href="#Presto.Generator-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-436"><a href="#Presto.Generator-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
-</span><span id="Presto.Generator-437"><a href="#Presto.Generator-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Presto.Generator-438"><a href="#Presto.Generator-438"><span class="linenos">438</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
-</span><span id="Presto.Generator-439"><a href="#Presto.Generator-439"><span class="linenos">439</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-440"><a href="#Presto.Generator-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-441"><a href="#Presto.Generator-441"><span class="linenos">441</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-442"><a href="#Presto.Generator-442"><span class="linenos">442</span></a>
-</span><span id="Presto.Generator-443"><a href="#Presto.Generator-443"><span class="linenos">443</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator-444"><a href="#Presto.Generator-444"><span class="linenos">444</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator-445"><a href="#Presto.Generator-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Presto.Generator-446"><a href="#Presto.Generator-446"><span class="linenos">446</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-447"><a href="#Presto.Generator-447"><span class="linenos">447</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto.Generator-448"><a href="#Presto.Generator-448"><span class="linenos">448</span></a> <span class="n">seq_get</span><span class="p">(</span>
-</span><span id="Presto.Generator-449"><a href="#Presto.Generator-449"><span class="linenos">449</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
-</span><span id="Presto.Generator-450"><a href="#Presto.Generator-450"><span class="linenos">450</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto.Generator-451"><a href="#Presto.Generator-451"><span class="linenos">451</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Presto.Generator-452"><a href="#Presto.Generator-452"><span class="linenos">452</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Presto.Generator-453"><a href="#Presto.Generator-453"><span class="linenos">453</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-454"><a href="#Presto.Generator-454"><span class="linenos">454</span></a> <span class="mi">0</span><span class="p">,</span>
-</span><span id="Presto.Generator-455"><a href="#Presto.Generator-455"><span class="linenos">455</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-456"><a href="#Presto.Generator-456"><span class="linenos">456</span></a> <span class="p">)</span>
-</span><span id="Presto.Generator-457"><a href="#Presto.Generator-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto.Generator-458"><a href="#Presto.Generator-458"><span class="linenos">458</span></a>
-</span><span id="Presto.Generator-459"><a href="#Presto.Generator-459"><span class="linenos">459</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator-460"><a href="#Presto.Generator-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Presto.Generator-461"><a href="#Presto.Generator-461"><span class="linenos">461</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator-462"><a href="#Presto.Generator-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto.Generator-463"><a href="#Presto.Generator-463"><span class="linenos">463</span></a>
-</span><span id="Presto.Generator-464"><a href="#Presto.Generator-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto.Generator-465"><a href="#Presto.Generator-465"><span class="linenos">465</span></a>
-</span><span id="Presto.Generator-466"><a href="#Presto.Generator-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator-467"><a href="#Presto.Generator-467"><span class="linenos">467</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator-468"><a href="#Presto.Generator-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator-469"><a href="#Presto.Generator-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
-</span><span id="Presto.Generator-470"><a href="#Presto.Generator-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto.Generator-471"><a href="#Presto.Generator-471"><span class="linenos">471</span></a>
-</span><span id="Presto.Generator-472"><a href="#Presto.Generator-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator-473"><a href="#Presto.Generator-473"><span class="linenos">473</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator-474"><a href="#Presto.Generator-474"><span class="linenos">474</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Presto.Generator-475"><a href="#Presto.Generator-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Presto.Generator-476"><a href="#Presto.Generator-476"><span class="linenos">476</span></a>
-</span><span id="Presto.Generator-477"><a href="#Presto.Generator-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator-478"><a href="#Presto.Generator-478"><span class="linenos">478</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator-479"><a href="#Presto.Generator-479"><span class="linenos">479</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator-480"><a href="#Presto.Generator-480"><span class="linenos">480</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator-481"><a href="#Presto.Generator-481"><span class="linenos">481</span></a>
-</span><span id="Presto.Generator-482"><a href="#Presto.Generator-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator-483"><a href="#Presto.Generator-483"><span class="linenos">483</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator-484"><a href="#Presto.Generator-484"><span class="linenos">484</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator-485"><a href="#Presto.Generator-485"><span class="linenos">485</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator-486"><a href="#Presto.Generator-486"><span class="linenos">486</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator-487"><a href="#Presto.Generator-487"><span class="linenos">487</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Presto.Generator-488"><a href="#Presto.Generator-488"><span class="linenos">488</span></a>
-</span><span id="Presto.Generator-489"><a href="#Presto.Generator-489"><span class="linenos">489</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator-490"><a href="#Presto.Generator-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="Presto.Generator-491"><a href="#Presto.Generator-491"><span class="linenos">491</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="Presto.Generator-492"><a href="#Presto.Generator-492"><span class="linenos">492</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator-493"><a href="#Presto.Generator-493"><span class="linenos">493</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="Presto.Generator-494"><a href="#Presto.Generator-494"><span class="linenos">494</span></a>
-</span><span id="Presto.Generator-495"><a href="#Presto.Generator-495"><span class="linenos">495</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;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
-</span><span id="Presto.Generator-496"><a href="#Presto.Generator-496"><span class="linenos">496</span></a>
-</span><span id="Presto.Generator-497"><a href="#Presto.Generator-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Presto.Generator-498"><a href="#Presto.Generator-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Presto.Generator-499"><a href="#Presto.Generator-499"><span class="linenos">499</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Presto.Generator-500"><a href="#Presto.Generator-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Presto.Generator-501"><a href="#Presto.Generator-501"><span class="linenos">501</span></a> <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;offset&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator-502"><a href="#Presto.Generator-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Presto.Generator-503"><a href="#Presto.Generator-503"><span class="linenos">503</span></a> <span class="p">]</span>
-</span><span id="Presto.Generator-504"><a href="#Presto.Generator-504"><span class="linenos">504</span></a>
-</span><span id="Presto.Generator-505"><a href="#Presto.Generator-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator-506"><a href="#Presto.Generator-506"><span class="linenos">506</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Presto.Generator-507"><a href="#Presto.Generator-507"><span class="linenos">507</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
-</span><span id="Presto.Generator-508"><a href="#Presto.Generator-508"><span class="linenos">508</span></a><span class="sd"> so we need to remove them</span>
-</span><span id="Presto.Generator-509"><a href="#Presto.Generator-509"><span class="linenos">509</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Presto.Generator-510"><a href="#Presto.Generator-510"><span class="linenos">510</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="Presto.Generator-511"><a href="#Presto.Generator-511"><span class="linenos">511</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Presto.Generator-512"><a href="#Presto.Generator-512"><span class="linenos">512</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Presto.Generator-513"><a href="#Presto.Generator-513"><span class="linenos">513</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Presto.Generator-514"><a href="#Presto.Generator-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto.Generator-296"><a href="#Presto.Generator-296"><span class="linenos">296</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto.Generator-297"><a href="#Presto.Generator-297"><span class="linenos">297</span></a>
+</span><span id="Presto.Generator-298"><a href="#Presto.Generator-298"><span class="linenos">298</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-299"><a href="#Presto.Generator-299"><span class="linenos">299</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><span id="Presto.Generator-300"><a href="#Presto.Generator-300"><span class="linenos">300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</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="Presto.Generator-301"><a href="#Presto.Generator-301"><span class="linenos">301</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="Presto.Generator-302"><a href="#Presto.Generator-302"><span class="linenos">302</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-303"><a href="#Presto.Generator-303"><span class="linenos">303</span></a>
+</span><span id="Presto.Generator-304"><a href="#Presto.Generator-304"><span class="linenos">304</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-305"><a href="#Presto.Generator-305"><span class="linenos">305</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><span id="Presto.Generator-306"><a href="#Presto.Generator-306"><span class="linenos">306</span></a> <span class="n">exp</span><span 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="Presto.Generator-307"><a href="#Presto.Generator-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-308"><a href="#Presto.Generator-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-309"><a href="#Presto.Generator-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-310"><a href="#Presto.Generator-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-311"><a href="#Presto.Generator-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-312"><a href="#Presto.Generator-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-313"><a href="#Presto.Generator-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-314"><a href="#Presto.Generator-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-315"><a href="#Presto.Generator-315"><span class="linenos">315</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-316"><a href="#Presto.Generator-316"><span class="linenos">316</span></a>
+</span><span id="Presto.Generator-317"><a href="#Presto.Generator-317"><span class="linenos">317</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-318"><a href="#Presto.Generator-318"><span class="linenos">318</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><span id="Presto.Generator-319"><a href="#Presto.Generator-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ARBITRARY&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-320"><a href="#Presto.Generator-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">_approx_distinct_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-321"><a href="#Presto.Generator-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-322"><a href="#Presto.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMax</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX_BY&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-323"><a href="#Presto.Generator-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArgMin</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN_BY&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-324"><a href="#Presto.Generator-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;ARRAY[</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">]&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-325"><a href="#Presto.Generator-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONCAT&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-326"><a href="#Presto.Generator-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-327"><a href="#Presto.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;CARDINALITY&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-328"><a href="#Presto.Generator-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayUniqueAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SET_AGG&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-329"><a href="#Presto.Generator-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AT_TIMEZONE&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-330"><a href="#Presto.Generator-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-331"><a href="#Presto.Generator-331"><span class="linenos">331</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_AND(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-332"><a href="#Presto.Generator-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-333"><a href="#Presto.Generator-333"><span class="linenos">333</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_LEFT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-334"><a href="#Presto.Generator-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_NOT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-335"><a href="#Presto.Generator-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-336"><a href="#Presto.Generator-336"><span class="linenos">336</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_OR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-337"><a href="#Presto.Generator-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-338"><a href="#Presto.Generator-338"><span class="linenos">338</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_ARITHMETIC_SHIFT_RIGHT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-339"><a href="#Presto.Generator-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-340"><a href="#Presto.Generator-340"><span class="linenos">340</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;BITWISE_XOR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-341"><a href="#Presto.Generator-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto.Generator-342"><a href="#Presto.Generator-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-343"><a href="#Presto.Generator-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</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="Presto.Generator-344"><a href="#Presto.Generator-344"><span class="linenos">344</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-345"><a href="#Presto.Generator-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-346"><a href="#Presto.Generator-346"><span class="linenos">346</span></a> <span class="n">_to_int</span><span class="p">(</span>
+</span><span id="Presto.Generator-347"><a href="#Presto.Generator-347"><span class="linenos">347</span></a> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Presto.Generator-348"><a href="#Presto.Generator-348"><span class="linenos">348</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-349"><a href="#Presto.Generator-349"><span class="linenos">349</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto.Generator-350"><a href="#Presto.Generator-350"><span class="linenos">350</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-351"><a href="#Presto.Generator-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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="Presto.Generator-352"><a href="#Presto.Generator-352"><span class="linenos">352</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&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><span id="Presto.Generator-353"><a href="#Presto.Generator-353"><span class="linenos">353</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-354"><a href="#Presto.Generator-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-355"><a href="#Presto.Generator-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-356"><a href="#Presto.Generator-356"><span class="linenos">356</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-357"><a href="#Presto.Generator-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</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="Presto.Generator-358"><a href="#Presto.Generator-358"><span class="linenos">358</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-359"><a href="#Presto.Generator-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-360"><a href="#Presto.Generator-360"><span class="linenos">360</span></a> <span class="n">_to_int</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="Presto.Generator-361"><a href="#Presto.Generator-361"><span class="linenos">361</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto.Generator-362"><a href="#Presto.Generator-362"><span class="linenos">362</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-363"><a href="#Presto.Generator-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;FROM_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-364"><a href="#Presto.Generator-364"><span class="linenos">364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-365"><a href="#Presto.Generator-365"><span class="linenos">365</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(DATE_PARSE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">DATEINT_FORMAT</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-366"><a href="#Presto.Generator-366"><span class="linenos">366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">encode_decode_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 class="s2">&quot;TO_UTF8&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-367"><a href="#Presto.Generator-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FORMAT=&#39;</span><span class="si">{</span><span class="n">e</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="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-368"><a href="#Presto.Generator-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">First</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-369"><a href="#Presto.Generator-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FirstValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-370"><a href="#Presto.Generator-370"><span class="linenos">370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-371"><a href="#Presto.Generator-371"><span class="linenos">371</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;WITH_TIMEZONE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AT TIME ZONE &#39;UTC&#39;&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-372"><a href="#Presto.Generator-372"><span class="linenos">372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">unalias_group</span><span class="p">]),</span>
+</span><span id="Presto.Generator-373"><a href="#Presto.Generator-373"><span class="linenos">373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</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="Presto.Generator-374"><a href="#Presto.Generator-374"><span class="linenos">374</span></a> <span class="s2">&quot;ARRAY_JOIN&quot;</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;ARRAY_AGG&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">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><span id="Presto.Generator-375"><a href="#Presto.Generator-375"><span class="linenos">375</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-376"><a href="#Presto.Generator-376"><span class="linenos">376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_HEX&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-377"><a href="#Presto.Generator-377"><span class="linenos">377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">if_sql</span><span class="p">(),</span>
+</span><span id="Presto.Generator-378"><a href="#Presto.Generator-378"><span class="linenos">378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-379"><a href="#Presto.Generator-379"><span class="linenos">379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Initcap</span><span class="p">:</span> <span class="n">_initcap_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-380"><a href="#Presto.Generator-380"><span class="linenos">380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-381"><a href="#Presto.Generator-381"><span class="linenos">381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Last</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-382"><a href="#Presto.Generator-382"><span class="linenos">382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastValue</span><span class="p">:</span> <span class="n">_first_last_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-383"><a href="#Presto.Generator-383"><span class="linenos">383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDay</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;LAST_DAY_OF_MONTH&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="Presto.Generator-384"><a href="#Presto.Generator-384"><span class="linenos">384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="n">_explode_to_unnest_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-385"><a href="#Presto.Generator-385"><span class="linenos">385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">:</span> <span class="n">left_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-386"><a href="#Presto.Generator-386"><span class="linenos">386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-387"><a href="#Presto.Generator-387"><span class="linenos">387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-388"><a href="#Presto.Generator-388"><span class="linenos">388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-389"><a href="#Presto.Generator-389"><span class="linenos">389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-390"><a href="#Presto.Generator-390"><span class="linenos">390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">_quantile_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-391"><a href="#Presto.Generator-391"><span class="linenos">391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">:</span> <span class="n">regexp_extract_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-392"><a href="#Presto.Generator-392"><span class="linenos">392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">:</span> <span class="n">right_to_substring_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-393"><a href="#Presto.Generator-393"><span class="linenos">393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-394"><a href="#Presto.Generator-394"><span class="linenos">394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">:</span> <span class="n">_schema_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-395"><a href="#Presto.Generator-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Presto.Generator-396"><a href="#Presto.Generator-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Presto.Generator-397"><a href="#Presto.Generator-397"><span class="linenos">397</span></a> <span class="p">[</span>
+</span><span id="Presto.Generator-398"><a href="#Presto.Generator-398"><span class="linenos">398</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="Presto.Generator-399"><a href="#Presto.Generator-399"><span class="linenos">399</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
+</span><span id="Presto.Generator-400"><a href="#Presto.Generator-400"><span class="linenos">400</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="Presto.Generator-401"><a href="#Presto.Generator-401"><span class="linenos">401</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">,</span>
+</span><span id="Presto.Generator-402"><a href="#Presto.Generator-402"><span class="linenos">402</span></a> <span class="p">]</span>
+</span><span id="Presto.Generator-403"><a href="#Presto.Generator-403"><span class="linenos">403</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-404"><a href="#Presto.Generator-404"><span class="linenos">404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</span><span class="p">,</span>
+</span><span id="Presto.Generator-405"><a href="#Presto.Generator-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRPOS&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-406"><a href="#Presto.Generator-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">_str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-407"><a href="#Presto.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT_TO_MAP&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-408"><a href="#Presto.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-409"><a href="#Presto.Generator-409"><span class="linenos">409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-410"><a href="#Presto.Generator-410"><span class="linenos">410</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-411"><a href="#Presto.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-412"><a href="#Presto.Generator-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unnest_sequence</span><span class="p">]),</span>
+</span><span id="Presto.Generator-413"><a href="#Presto.Generator-413"><span class="linenos">413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">:</span> <span class="n">no_timestamp_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-414"><a href="#Presto.Generator-414"><span class="linenos">414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-415"><a href="#Presto.Generator-415"><span class="linenos">415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-416"><a href="#Presto.Generator-416"><span class="linenos">416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-417"><a href="#Presto.Generator-417"><span class="linenos">417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-418"><a href="#Presto.Generator-418"><span class="linenos">418</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_UNIXTIME(DATE_PARSE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Presto</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-419"><a href="#Presto.Generator-419"><span class="linenos">419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-420"><a href="#Presto.Generator-420"><span class="linenos">420</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-421"><a href="#Presto.Generator-421"><span class="linenos">421</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-422"><a href="#Presto.Generator-422"><span class="linenos">422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-423"><a href="#Presto.Generator-423"><span class="linenos">423</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-424"><a href="#Presto.Generator-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">epoch_cast_to_ts</span><span class="p">]),</span>
+</span><span id="Presto.Generator-425"><a href="#Presto.Generator-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-426"><a href="#Presto.Generator-426"><span class="linenos">426</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-427"><a href="#Presto.Generator-427"><span class="linenos">427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-428"><a href="#Presto.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">_ts_or_ds_diff_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-429"><a href="#Presto.Generator-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_ts_or_ds_to_date_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-430"><a href="#Presto.Generator-430"><span class="linenos">430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_HEX&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-431"><a href="#Presto.Generator-431"><span class="linenos">431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-432"><a href="#Presto.Generator-432"><span class="linenos">432</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-433"><a href="#Presto.Generator-433"><span class="linenos">433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-434"><a href="#Presto.Generator-434"><span class="linenos">434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Presto.Generator-435"><a href="#Presto.Generator-435"><span class="linenos">435</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) AS VARCHAR)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-436"><a href="#Presto.Generator-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-437"><a href="#Presto.Generator-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">add_recursive_cte_column_names</span><span class="p">]),</span>
+</span><span id="Presto.Generator-438"><a href="#Presto.Generator-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Presto.Generator-439"><a href="#Presto.Generator-439"><span class="linenos">439</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
+</span><span id="Presto.Generator-440"><a href="#Presto.Generator-440"><span class="linenos">440</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-441"><a href="#Presto.Generator-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">:</span> <span class="n">bool_xor_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-442"><a href="#Presto.Generator-442"><span class="linenos">442</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-443"><a href="#Presto.Generator-443"><span class="linenos">443</span></a>
+</span><span id="Presto.Generator-444"><a href="#Presto.Generator-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator-445"><a href="#Presto.Generator-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator-446"><a href="#Presto.Generator-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Presto.Generator-447"><a href="#Presto.Generator-447"><span class="linenos">447</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-448"><a href="#Presto.Generator-448"><span class="linenos">448</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto.Generator-449"><a href="#Presto.Generator-449"><span class="linenos">449</span></a> <span class="n">seq_get</span><span class="p">(</span>
+</span><span id="Presto.Generator-450"><a href="#Presto.Generator-450"><span class="linenos">450</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
+</span><span id="Presto.Generator-451"><a href="#Presto.Generator-451"><span class="linenos">451</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto.Generator-452"><a href="#Presto.Generator-452"><span class="linenos">452</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Presto.Generator-453"><a href="#Presto.Generator-453"><span class="linenos">453</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Presto.Generator-454"><a href="#Presto.Generator-454"><span class="linenos">454</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-455"><a href="#Presto.Generator-455"><span class="linenos">455</span></a> <span class="mi">0</span><span class="p">,</span>
+</span><span id="Presto.Generator-456"><a href="#Presto.Generator-456"><span class="linenos">456</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-457"><a href="#Presto.Generator-457"><span class="linenos">457</span></a> <span class="p">)</span>
+</span><span id="Presto.Generator-458"><a href="#Presto.Generator-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto.Generator-459"><a href="#Presto.Generator-459"><span class="linenos">459</span></a>
+</span><span id="Presto.Generator-460"><a href="#Presto.Generator-460"><span class="linenos">460</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator-461"><a href="#Presto.Generator-461"><span class="linenos">461</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Presto.Generator-462"><a href="#Presto.Generator-462"><span class="linenos">462</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator-463"><a href="#Presto.Generator-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto.Generator-464"><a href="#Presto.Generator-464"><span class="linenos">464</span></a>
+</span><span id="Presto.Generator-465"><a href="#Presto.Generator-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto.Generator-466"><a href="#Presto.Generator-466"><span class="linenos">466</span></a>
+</span><span id="Presto.Generator-467"><a href="#Presto.Generator-467"><span class="linenos">467</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator-468"><a href="#Presto.Generator-468"><span class="linenos">468</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator-469"><a href="#Presto.Generator-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator-470"><a href="#Presto.Generator-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
+</span><span id="Presto.Generator-471"><a href="#Presto.Generator-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto.Generator-472"><a href="#Presto.Generator-472"><span class="linenos">472</span></a>
+</span><span id="Presto.Generator-473"><a href="#Presto.Generator-473"><span class="linenos">473</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator-474"><a href="#Presto.Generator-474"><span class="linenos">474</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator-475"><a href="#Presto.Generator-475"><span class="linenos">475</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Presto.Generator-476"><a href="#Presto.Generator-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Presto.Generator-477"><a href="#Presto.Generator-477"><span class="linenos">477</span></a>
+</span><span id="Presto.Generator-478"><a href="#Presto.Generator-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator-479"><a href="#Presto.Generator-479"><span class="linenos">479</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator-480"><a href="#Presto.Generator-480"><span class="linenos">480</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator-481"><a href="#Presto.Generator-481"><span class="linenos">481</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator-482"><a href="#Presto.Generator-482"><span class="linenos">482</span></a>
+</span><span id="Presto.Generator-483"><a href="#Presto.Generator-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator-484"><a href="#Presto.Generator-484"><span class="linenos">484</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator-485"><a href="#Presto.Generator-485"><span class="linenos">485</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator-486"><a href="#Presto.Generator-486"><span class="linenos">486</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator-487"><a href="#Presto.Generator-487"><span class="linenos">487</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator-488"><a href="#Presto.Generator-488"><span class="linenos">488</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Presto.Generator-489"><a href="#Presto.Generator-489"><span class="linenos">489</span></a>
+</span><span id="Presto.Generator-490"><a href="#Presto.Generator-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator-491"><a href="#Presto.Generator-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="Presto.Generator-492"><a href="#Presto.Generator-492"><span class="linenos">492</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="Presto.Generator-493"><a href="#Presto.Generator-493"><span class="linenos">493</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator-494"><a href="#Presto.Generator-494"><span class="linenos">494</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="Presto.Generator-495"><a href="#Presto.Generator-495"><span class="linenos">495</span></a>
+</span><span id="Presto.Generator-496"><a href="#Presto.Generator-496"><span class="linenos">496</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;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
+</span><span id="Presto.Generator-497"><a href="#Presto.Generator-497"><span class="linenos">497</span></a>
+</span><span id="Presto.Generator-498"><a href="#Presto.Generator-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Presto.Generator-499"><a href="#Presto.Generator-499"><span class="linenos">499</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Presto.Generator-500"><a href="#Presto.Generator-500"><span class="linenos">500</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Presto.Generator-501"><a href="#Presto.Generator-501"><span class="linenos">501</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Presto.Generator-502"><a href="#Presto.Generator-502"><span class="linenos">502</span></a> <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;offset&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator-503"><a href="#Presto.Generator-503"><span class="linenos">503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Presto.Generator-504"><a href="#Presto.Generator-504"><span class="linenos">504</span></a> <span class="p">]</span>
+</span><span id="Presto.Generator-505"><a href="#Presto.Generator-505"><span class="linenos">505</span></a>
+</span><span id="Presto.Generator-506"><a href="#Presto.Generator-506"><span class="linenos">506</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator-507"><a href="#Presto.Generator-507"><span class="linenos">507</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Presto.Generator-508"><a href="#Presto.Generator-508"><span class="linenos">508</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
+</span><span id="Presto.Generator-509"><a href="#Presto.Generator-509"><span class="linenos">509</span></a><span class="sd"> so we need to remove them</span>
+</span><span id="Presto.Generator-510"><a href="#Presto.Generator-510"><span class="linenos">510</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Presto.Generator-511"><a href="#Presto.Generator-511"><span class="linenos">511</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="Presto.Generator-512"><a href="#Presto.Generator-512"><span class="linenos">512</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Presto.Generator-513"><a href="#Presto.Generator-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Presto.Generator-514"><a href="#Presto.Generator-514"><span class="linenos">514</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Presto.Generator-515"><a href="#Presto.Generator-515"><span class="linenos">515</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2275,6 +2283,18 @@ Default: True</li>
</div>
+ <div id="Presto.Generator.MULTI_ARG_DISTINCT" class="classattr">
+ <div class="attr variable">
+ <span class="name">MULTI_ARG_DISTINCT</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Presto.Generator.MULTI_ARG_DISTINCT"></a>
+
+
+
+ </div>
<div id="Presto.Generator.PROPERTIES_LOCATION" class="classattr">
<div class="attr variable">
<span class="name">PROPERTIES_LOCATION</span> =
@@ -2325,21 +2345,21 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.bracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.bracket_sql-443"><a href="#Presto.Generator.bracket_sql-443"><span class="linenos">443</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator.bracket_sql-444"><a href="#Presto.Generator.bracket_sql-444"><span class="linenos">444</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator.bracket_sql-445"><a href="#Presto.Generator.bracket_sql-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Presto.Generator.bracket_sql-446"><a href="#Presto.Generator.bracket_sql-446"><span class="linenos">446</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator.bracket_sql-447"><a href="#Presto.Generator.bracket_sql-447"><span class="linenos">447</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto.Generator.bracket_sql-448"><a href="#Presto.Generator.bracket_sql-448"><span class="linenos">448</span></a> <span class="n">seq_get</span><span class="p">(</span>
-</span><span id="Presto.Generator.bracket_sql-449"><a href="#Presto.Generator.bracket_sql-449"><span class="linenos">449</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
-</span><span id="Presto.Generator.bracket_sql-450"><a href="#Presto.Generator.bracket_sql-450"><span class="linenos">450</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Presto.Generator.bracket_sql-451"><a href="#Presto.Generator.bracket_sql-451"><span class="linenos">451</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Presto.Generator.bracket_sql-452"><a href="#Presto.Generator.bracket_sql-452"><span class="linenos">452</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Presto.Generator.bracket_sql-453"><a href="#Presto.Generator.bracket_sql-453"><span class="linenos">453</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator.bracket_sql-454"><a href="#Presto.Generator.bracket_sql-454"><span class="linenos">454</span></a> <span class="mi">0</span><span class="p">,</span>
-</span><span id="Presto.Generator.bracket_sql-455"><a href="#Presto.Generator.bracket_sql-455"><span class="linenos">455</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator.bracket_sql-456"><a href="#Presto.Generator.bracket_sql-456"><span class="linenos">456</span></a> <span class="p">)</span>
-</span><span id="Presto.Generator.bracket_sql-457"><a href="#Presto.Generator.bracket_sql-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.bracket_sql-444"><a href="#Presto.Generator.bracket_sql-444"><span class="linenos">444</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator.bracket_sql-445"><a href="#Presto.Generator.bracket_sql-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;safe&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator.bracket_sql-446"><a href="#Presto.Generator.bracket_sql-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Presto.Generator.bracket_sql-447"><a href="#Presto.Generator.bracket_sql-447"><span class="linenos">447</span></a> <span class="s2">&quot;ELEMENT_AT&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator.bracket_sql-448"><a href="#Presto.Generator.bracket_sql-448"><span class="linenos">448</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto.Generator.bracket_sql-449"><a href="#Presto.Generator.bracket_sql-449"><span class="linenos">449</span></a> <span class="n">seq_get</span><span class="p">(</span>
+</span><span id="Presto.Generator.bracket_sql-450"><a href="#Presto.Generator.bracket_sql-450"><span class="linenos">450</span></a> <span class="n">apply_index_offset</span><span class="p">(</span>
+</span><span id="Presto.Generator.bracket_sql-451"><a href="#Presto.Generator.bracket_sql-451"><span class="linenos">451</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Presto.Generator.bracket_sql-452"><a href="#Presto.Generator.bracket_sql-452"><span class="linenos">452</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Presto.Generator.bracket_sql-453"><a href="#Presto.Generator.bracket_sql-453"><span class="linenos">453</span></a> <span class="mi">1</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Presto.Generator.bracket_sql-454"><a href="#Presto.Generator.bracket_sql-454"><span class="linenos">454</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator.bracket_sql-455"><a href="#Presto.Generator.bracket_sql-455"><span class="linenos">455</span></a> <span class="mi">0</span><span class="p">,</span>
+</span><span id="Presto.Generator.bracket_sql-456"><a href="#Presto.Generator.bracket_sql-456"><span class="linenos">456</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator.bracket_sql-457"><a href="#Presto.Generator.bracket_sql-457"><span class="linenos">457</span></a> <span class="p">)</span>
+</span><span id="Presto.Generator.bracket_sql-458"><a href="#Presto.Generator.bracket_sql-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">bracket_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2357,12 +2377,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.struct_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.struct_sql-459"><a href="#Presto.Generator.struct_sql-459"><span class="linenos">459</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator.struct_sql-460"><a href="#Presto.Generator.struct_sql-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Presto.Generator.struct_sql-461"><a href="#Presto.Generator.struct_sql-461"><span class="linenos">461</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator.struct_sql-462"><a href="#Presto.Generator.struct_sql-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Presto.Generator.struct_sql-463"><a href="#Presto.Generator.struct_sql-463"><span class="linenos">463</span></a>
-</span><span id="Presto.Generator.struct_sql-464"><a href="#Presto.Generator.struct_sql-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.struct_sql-460"><a href="#Presto.Generator.struct_sql-460"><span class="linenos">460</span></a> <span class="k">def</span> <span class="nf">struct_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">Struct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator.struct_sql-461"><a href="#Presto.Generator.struct_sql-461"><span class="linenos">461</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Presto.Generator.struct_sql-462"><a href="#Presto.Generator.struct_sql-462"><span class="linenos">462</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Struct with key-value definitions is unsupported.&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator.struct_sql-463"><a href="#Presto.Generator.struct_sql-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Presto.Generator.struct_sql-464"><a href="#Presto.Generator.struct_sql-464"><span class="linenos">464</span></a>
+</span><span id="Presto.Generator.struct_sql-465"><a href="#Presto.Generator.struct_sql-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2380,11 +2400,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.interval_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.interval_sql-466"><a href="#Presto.Generator.interval_sql-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator.interval_sql-467"><a href="#Presto.Generator.interval_sql-467"><span class="linenos">467</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator.interval_sql-468"><a href="#Presto.Generator.interval_sql-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator.interval_sql-469"><a href="#Presto.Generator.interval_sql-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
-</span><span id="Presto.Generator.interval_sql-470"><a href="#Presto.Generator.interval_sql-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.interval_sql-467"><a href="#Presto.Generator.interval_sql-467"><span class="linenos">467</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator.interval_sql-468"><a href="#Presto.Generator.interval_sql-468"><span class="linenos">468</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator.interval_sql-469"><a href="#Presto.Generator.interval_sql-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">unit</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;WEEK&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator.interval_sql-470"><a href="#Presto.Generator.interval_sql-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> * INTERVAL &#39;7&#39; DAY)&quot;</span>
+</span><span id="Presto.Generator.interval_sql-471"><a href="#Presto.Generator.interval_sql-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2402,10 +2422,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.transaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.transaction_sql-472"><a href="#Presto.Generator.transaction_sql-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator.transaction_sql-473"><a href="#Presto.Generator.transaction_sql-473"><span class="linenos">473</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator.transaction_sql-474"><a href="#Presto.Generator.transaction_sql-474"><span class="linenos">474</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Presto.Generator.transaction_sql-475"><a href="#Presto.Generator.transaction_sql-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.transaction_sql-473"><a href="#Presto.Generator.transaction_sql-473"><span class="linenos">473</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator.transaction_sql-474"><a href="#Presto.Generator.transaction_sql-474"><span class="linenos">474</span></a> <span class="n">modes</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;modes&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator.transaction_sql-475"><a href="#Presto.Generator.transaction_sql-475"><span class="linenos">475</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">modes</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Presto.Generator.transaction_sql-476"><a href="#Presto.Generator.transaction_sql-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;START TRANSACTION</span><span class="si">{</span><span class="n">modes</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -2423,25 +2443,25 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.generateseries_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.generateseries_sql-477"><a href="#Presto.Generator.generateseries_sql-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-478"><a href="#Presto.Generator.generateseries_sql-478"><span class="linenos">478</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator.generateseries_sql-479"><a href="#Presto.Generator.generateseries_sql-479"><span class="linenos">479</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
-</span><span id="Presto.Generator.generateseries_sql-480"><a href="#Presto.Generator.generateseries_sql-480"><span class="linenos">480</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
-</span><span id="Presto.Generator.generateseries_sql-481"><a href="#Presto.Generator.generateseries_sql-481"><span class="linenos">481</span></a>
-</span><span id="Presto.Generator.generateseries_sql-482"><a href="#Presto.Generator.generateseries_sql-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator.generateseries_sql-483"><a href="#Presto.Generator.generateseries_sql-483"><span class="linenos">483</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator.generateseries_sql-484"><a href="#Presto.Generator.generateseries_sql-484"><span class="linenos">484</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Presto.Generator.generateseries_sql-485"><a href="#Presto.Generator.generateseries_sql-485"><span class="linenos">485</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
-</span><span id="Presto.Generator.generateseries_sql-486"><a href="#Presto.Generator.generateseries_sql-486"><span class="linenos">486</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-487"><a href="#Presto.Generator.generateseries_sql-487"><span class="linenos">487</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Presto.Generator.generateseries_sql-488"><a href="#Presto.Generator.generateseries_sql-488"><span class="linenos">488</span></a>
-</span><span id="Presto.Generator.generateseries_sql-489"><a href="#Presto.Generator.generateseries_sql-489"><span class="linenos">489</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
-</span><span id="Presto.Generator.generateseries_sql-490"><a href="#Presto.Generator.generateseries_sql-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-491"><a href="#Presto.Generator.generateseries_sql-491"><span class="linenos">491</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="Presto.Generator.generateseries_sql-492"><a href="#Presto.Generator.generateseries_sql-492"><span class="linenos">492</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Presto.Generator.generateseries_sql-493"><a href="#Presto.Generator.generateseries_sql-493"><span class="linenos">493</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="Presto.Generator.generateseries_sql-494"><a href="#Presto.Generator.generateseries_sql-494"><span class="linenos">494</span></a>
-</span><span id="Presto.Generator.generateseries_sql-495"><a href="#Presto.Generator.generateseries_sql-495"><span class="linenos">495</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;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.generateseries_sql-478"><a href="#Presto.Generator.generateseries_sql-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">generateseries_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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-479"><a href="#Presto.Generator.generateseries_sql-479"><span class="linenos">479</span></a> <span class="n">start</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;start&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator.generateseries_sql-480"><a href="#Presto.Generator.generateseries_sql-480"><span class="linenos">480</span></a> <span class="n">end</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;end&quot;</span><span class="p">]</span>
+</span><span id="Presto.Generator.generateseries_sql-481"><a href="#Presto.Generator.generateseries_sql-481"><span class="linenos">481</span></a> <span class="n">step</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;step&quot;</span><span class="p">)</span>
+</span><span id="Presto.Generator.generateseries_sql-482"><a href="#Presto.Generator.generateseries_sql-482"><span class="linenos">482</span></a>
+</span><span id="Presto.Generator.generateseries_sql-483"><a href="#Presto.Generator.generateseries_sql-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator.generateseries_sql-484"><a href="#Presto.Generator.generateseries_sql-484"><span class="linenos">484</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator.generateseries_sql-485"><a href="#Presto.Generator.generateseries_sql-485"><span class="linenos">485</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Presto.Generator.generateseries_sql-486"><a href="#Presto.Generator.generateseries_sql-486"><span class="linenos">486</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="n">end</span><span class="o">.</span><span class="n">to</span>
+</span><span id="Presto.Generator.generateseries_sql-487"><a href="#Presto.Generator.generateseries_sql-487"><span class="linenos">487</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-488"><a href="#Presto.Generator.generateseries_sql-488"><span class="linenos">488</span></a> <span class="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Presto.Generator.generateseries_sql-489"><a href="#Presto.Generator.generateseries_sql-489"><span class="linenos">489</span></a>
+</span><span id="Presto.Generator.generateseries_sql-490"><a href="#Presto.Generator.generateseries_sql-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">and</span> <span class="n">target_type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">):</span>
+</span><span id="Presto.Generator.generateseries_sql-491"><a href="#Presto.Generator.generateseries_sql-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">target_type</span> <span class="ow">is</span> <span class="n">start</span><span class="o">.</span><span class="n">to</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-492"><a href="#Presto.Generator.generateseries_sql-492"><span class="linenos">492</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="Presto.Generator.generateseries_sql-493"><a href="#Presto.Generator.generateseries_sql-493"><span class="linenos">493</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Presto.Generator.generateseries_sql-494"><a href="#Presto.Generator.generateseries_sql-494"><span class="linenos">494</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="Presto.Generator.generateseries_sql-495"><a href="#Presto.Generator.generateseries_sql-495"><span class="linenos">495</span></a>
+</span><span id="Presto.Generator.generateseries_sql-496"><a href="#Presto.Generator.generateseries_sql-496"><span class="linenos">496</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;SEQUENCE&quot;</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
</span></pre></div>
@@ -2459,13 +2479,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.offset_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.offset_limit_modifiers-497"><a href="#Presto.Generator.offset_limit_modifiers-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-498"><a href="#Presto.Generator.offset_limit_modifiers-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-499"><a href="#Presto.Generator.offset_limit_modifiers-499"><span class="linenos">499</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-500"><a href="#Presto.Generator.offset_limit_modifiers-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-501"><a href="#Presto.Generator.offset_limit_modifiers-501"><span class="linenos">501</span></a> <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;offset&quot;</span><span class="p">),</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-502"><a href="#Presto.Generator.offset_limit_modifiers-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Presto.Generator.offset_limit_modifiers-503"><a href="#Presto.Generator.offset_limit_modifiers-503"><span class="linenos">503</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.offset_limit_modifiers-498"><a href="#Presto.Generator.offset_limit_modifiers-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-499"><a href="#Presto.Generator.offset_limit_modifiers-499"><span class="linenos">499</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-500"><a href="#Presto.Generator.offset_limit_modifiers-500"><span class="linenos">500</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-501"><a href="#Presto.Generator.offset_limit_modifiers-501"><span class="linenos">501</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-502"><a href="#Presto.Generator.offset_limit_modifiers-502"><span class="linenos">502</span></a> <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;offset&quot;</span><span class="p">),</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-503"><a href="#Presto.Generator.offset_limit_modifiers-503"><span class="linenos">503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Presto.Generator.offset_limit_modifiers-504"><a href="#Presto.Generator.offset_limit_modifiers-504"><span class="linenos">504</span></a> <span class="p">]</span>
</span></pre></div>
@@ -2483,16 +2503,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#Presto.Generator.create_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.create_sql-505"><a href="#Presto.Generator.create_sql-505"><span class="linenos">505</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Presto.Generator.create_sql-506"><a href="#Presto.Generator.create_sql-506"><span class="linenos">506</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Presto.Generator.create_sql-507"><a href="#Presto.Generator.create_sql-507"><span class="linenos">507</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
-</span><span id="Presto.Generator.create_sql-508"><a href="#Presto.Generator.create_sql-508"><span class="linenos">508</span></a><span class="sd"> so we need to remove them</span>
-</span><span id="Presto.Generator.create_sql-509"><a href="#Presto.Generator.create_sql-509"><span class="linenos">509</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Presto.Generator.create_sql-510"><a href="#Presto.Generator.create_sql-510"><span class="linenos">510</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="Presto.Generator.create_sql-511"><a href="#Presto.Generator.create_sql-511"><span class="linenos">511</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Presto.Generator.create_sql-512"><a href="#Presto.Generator.create_sql-512"><span class="linenos">512</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Presto.Generator.create_sql-513"><a href="#Presto.Generator.create_sql-513"><span class="linenos">513</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Presto.Generator.create_sql-514"><a href="#Presto.Generator.create_sql-514"><span class="linenos">514</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator.create_sql-506"><a href="#Presto.Generator.create_sql-506"><span class="linenos">506</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Presto.Generator.create_sql-507"><a href="#Presto.Generator.create_sql-507"><span class="linenos">507</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Presto.Generator.create_sql-508"><a href="#Presto.Generator.create_sql-508"><span class="linenos">508</span></a><span class="sd"> Presto doesn&#39;t support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),</span>
+</span><span id="Presto.Generator.create_sql-509"><a href="#Presto.Generator.create_sql-509"><span class="linenos">509</span></a><span class="sd"> so we need to remove them</span>
+</span><span id="Presto.Generator.create_sql-510"><a href="#Presto.Generator.create_sql-510"><span class="linenos">510</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Presto.Generator.create_sql-511"><a href="#Presto.Generator.create_sql-511"><span class="linenos">511</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="Presto.Generator.create_sql-512"><a href="#Presto.Generator.create_sql-512"><span class="linenos">512</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Presto.Generator.create_sql-513"><a href="#Presto.Generator.create_sql-513"><span class="linenos">513</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;VIEW&quot;</span> <span class="ow">and</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Presto.Generator.create_sql-514"><a href="#Presto.Generator.create_sql-514"><span class="linenos">514</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Presto.Generator.create_sql-515"><a href="#Presto.Generator.create_sql-515"><span class="linenos">515</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/redshift.html b/docs/sqlglot/dialects/redshift.html
index 880cb89..2062073 100644
--- a/docs/sqlglot/dialects/redshift.html
+++ b/docs/sqlglot/dialects/redshift.html
@@ -229,261 +229,245 @@
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a> <span class="n">concat_ws_to_dpipe_sql</span><span class="p">,</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">date_delta_sql</span><span class="p">,</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">generatedasidentitycolumnconstraint_sql</span><span class="p">,</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">json_path_segments</span><span class="p">,</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">json_extract_segments</span><span class="p">,</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">parse_json_extract_path</span><span class="p">,</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">rename_func</span><span class="p">,</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="p">)</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.postgres</span> <span class="kn">import</span> <span class="n">Postgres</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="kn">from</span> <span class="nn">sqlglot._typing</span> <span class="kn">import</span> <span class="n">E</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="p">)</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.postgres</span> <span class="kn">import</span> <span class="n">Postgres</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="kn">from</span> <span class="nn">sqlglot._typing</span> <span class="kn">import</span> <span class="n">E</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="k">def</span> <span class="nf">_json_extract_sql</span><span class="p">(</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Redshift</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="o">*</span><span class="n">json_path_segments</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <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;null_if_invalid&quot;</span><span class="p">),</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="p">)</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="k">def</span> <span class="nf">_parse_date_delta</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="k">def</span> <span class="nf">_parse_delta</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr_type</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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="k">if</span> <span class="n">expr_type</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;return_type&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">))</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="k">return</span> <span class="n">expr</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="k">return</span> <span class="n">_parse_delta</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="k">def</span> <span class="nf">_parse_date_delta</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="k">def</span> <span class="nf">_parse_delta</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr_type</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">2</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">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-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">if</span> <span class="n">expr_type</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;return_type&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">))</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="k">class</span> <span class="nc">Redshift</span><span class="p">(</span><span class="n">Postgres</span><span class="p">):</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_names.html</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">return</span> <span class="n">expr</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">return</span> <span class="n">_parse_delta</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="k">class</span> <span class="nc">Redshift</span><span class="p">(</span><span class="n">Postgres</span><span class="p">):</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_names.html</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH:MI:SS&#39;&quot;</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</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-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="p">}</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;ADD_MONTHS&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">TsOrDsAdd</span><span class="p">(</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</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-66"><a href="#L-66"><span class="linenos"> 66</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-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">return_type</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="p">),</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span 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">TsOrDsAdd</span><span class="p">),</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">),</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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">TsOrDsDiff</span><span class="p">),</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;DATE_DIFF&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">TsOrDsDiff</span><span class="p">),</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span> <span class="n">supports_null_if_invalid</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="p">),</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;LISTAGG&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="p">}</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;APPROXIMATE&quot;</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_approximate_count</span><span class="p">(),</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;SYSDATE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span> <span class="n">transaction</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="p">}</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <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><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH:MI:SS&#39;&quot;</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="p">}</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;ADD_MONTHS&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">TsOrDsAdd</span><span class="p">(</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</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-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">return_type</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="p">),</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span 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">TsOrDsAdd</span><span class="p">),</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">),</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</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">TsOrDsDiff</span><span class="p">),</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;DATE_DIFF&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">TsOrDsDiff</span><span class="p">),</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</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-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;LISTAGG&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="p">}</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;APPROXIMATE&quot;</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_approximate_count</span><span class="p">(),</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;SYSDATE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span> <span class="n">transaction</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="p">}</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <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><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</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-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="c1"># Redshift supports UNPIVOTing SUPER objects, e.g. `UNPIVOT foo.obj[0] AS val AT attr`</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">unpivot</span> <span class="o">=</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">UNPIVOT</span><span class="p">)</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</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</span><span class="p">(</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="p">)</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="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">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">unpivot</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="c1"># Redshift supports UNPIVOTing SUPER objects, e.g. `UNPIVOT foo.obj[0] AS val AT attr`</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">unpivot</span> <span class="o">=</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">UNPIVOT</span><span class="p">)</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</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</span><span class="p">(</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="p">)</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">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">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">unpivot</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</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_types</span><span class="p">(</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="p">)</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <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">DataType</span><span class="p">)</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="p">):</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</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-111"><a href="#L-111"><span class="linenos">111</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_types</span><span class="p">(</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <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 class="k">if</span> <span class="p">(</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <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">DataType</span><span class="p">)</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <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">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</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="k">return</span> <span class="n">this</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</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">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 class="n">safe</span><span class="o">=</span><span class="n">safe</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">def</span> <span class="nf">_parse_approximate_count</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">ApproxDistinct</span><span class="p">]:</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</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">ApproxDistinct</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">func</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">,</span> <span class="p">[])):</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="p">(</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;joins&quot;</span><span class="p">][</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="p">)</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">())</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="o">**</span><span class="n">Postgres</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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;UNLOAD&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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="p">}</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</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-179"><a href="#L-179"><span class="linenos">179</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-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="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="o">**</span><span class="n">Postgres</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><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">exp</span><span 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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&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">TRANSFORMS</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="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">:</span> <span class="n">concat_ws_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;APPROXIMATE COUNT(DISTINCT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;SYSDATE&quot;</span> <span class="k">if</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;transaction&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;GETDATE()&quot;</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="p">),</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span> <span class="n">generatedasidentitycolumnconstraint_sql</span><span class="p">,</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LISTAGG&quot;</span><span class="p">),</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">]</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="p">),</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</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="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="p">}</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</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">Pivot</span><span class="p">)</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</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">Pow</span><span class="p">)</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</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">AnyValue</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">this</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</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-113"><a href="#L-113"><span class="linenos">113</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-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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">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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">def</span> <span class="nf">_parse_approximate_count</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">ApproxDistinct</span><span class="p">]:</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</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">ApproxDistinct</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">func</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</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_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">,</span> <span class="p">[])):</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="p">(</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;joins&quot;</span><span class="p">][</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="p">)</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">())</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="o">**</span><span class="n">Postgres</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-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;UNLOAD&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-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="p">}</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</span></a>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="o">**</span><span class="n">Postgres</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><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">exp</span><span 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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="p">}</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">:</span> <span class="n">concat_ws_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;APPROXIMATE COUNT(DISTINCT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;SYSDATE&quot;</span> <span class="k">if</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;transaction&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;GETDATE()&quot;</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="p">),</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span> <span class="n">generatedasidentitycolumnconstraint_sql</span><span class="p">,</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">),</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LISTAGG&quot;</span><span class="p">),</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">]</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="p">),</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</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="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</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="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="p">}</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</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">Pivot</span><span class="p">)</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</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">Pow</span><span class="p">)</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</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">AnyValue</span><span class="p">)</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="c1"># Redshift supports LAST_DAY(..)</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</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">LastDay</span><span class="p">)</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="c1"># Redshift supports LAST_DAY(..)</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</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">LastDay</span><span class="p">)</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">precision</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;expressions&quot;</span><span class="p">)</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">precision</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;expressions&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="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -499,226 +483,222 @@
</div>
<a class="headerlink" href="#Redshift"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift-48"><a href="#Redshift-48"><span class="linenos"> 48</span></a><span class="k">class</span> <span class="nc">Redshift</span><span class="p">(</span><span class="n">Postgres</span><span class="p">):</span>
-</span><span id="Redshift-49"><a href="#Redshift-49"><span class="linenos"> 49</span></a> <span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_names.html</span>
-</span><span id="Redshift-50"><a href="#Redshift-50"><span class="linenos"> 50</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
-</span><span id="Redshift-51"><a href="#Redshift-51"><span class="linenos"> 51</span></a>
-</span><span id="Redshift-52"><a href="#Redshift-52"><span class="linenos"> 52</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-53"><a href="#Redshift-53"><span class="linenos"> 53</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Redshift-54"><a href="#Redshift-54"><span class="linenos"> 54</span></a>
-</span><span id="Redshift-55"><a href="#Redshift-55"><span class="linenos"> 55</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH:MI:SS&#39;&quot;</span>
-</span><span id="Redshift-56"><a href="#Redshift-56"><span class="linenos"> 56</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-57"><a href="#Redshift-57"><span class="linenos"> 57</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="Redshift-58"><a href="#Redshift-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="Redshift-59"><a href="#Redshift-59"><span class="linenos"> 59</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="Redshift-60"><a href="#Redshift-60"><span class="linenos"> 60</span></a> <span class="p">}</span>
-</span><span id="Redshift-61"><a href="#Redshift-61"><span class="linenos"> 61</span></a>
-</span><span id="Redshift-62"><a href="#Redshift-62"><span class="linenos"> 62</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Redshift-63"><a href="#Redshift-63"><span class="linenos"> 63</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-64"><a href="#Redshift-64"><span class="linenos"> 64</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Redshift-65"><a href="#Redshift-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;ADD_MONTHS&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">TsOrDsAdd</span><span class="p">(</span>
-</span><span id="Redshift-66"><a href="#Redshift-66"><span class="linenos"> 66</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="Redshift-67"><a href="#Redshift-67"><span class="linenos"> 67</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="Redshift-68"><a href="#Redshift-68"><span class="linenos"> 68</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
-</span><span id="Redshift-69"><a href="#Redshift-69"><span class="linenos"> 69</span></a> <span class="n">return_type</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Redshift-70"><a href="#Redshift-70"><span class="linenos"> 70</span></a> <span class="p">),</span>
-</span><span id="Redshift-71"><a href="#Redshift-71"><span class="linenos"> 71</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">TsOrDsAdd</span><span class="p">),</span>
-</span><span id="Redshift-72"><a href="#Redshift-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">),</span>
-</span><span id="Redshift-73"><a href="#Redshift-73"><span class="linenos"> 73</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">TsOrDsDiff</span><span class="p">),</span>
-</span><span id="Redshift-74"><a href="#Redshift-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;DATE_DIFF&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">TsOrDsDiff</span><span class="p">),</span>
-</span><span id="Redshift-75"><a href="#Redshift-75"><span class="linenos"> 75</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="Redshift-76"><a href="#Redshift-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span>
-</span><span id="Redshift-77"><a href="#Redshift-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span> <span class="n">supports_null_if_invalid</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="Redshift-78"><a href="#Redshift-78"><span class="linenos"> 78</span></a> <span class="p">),</span>
-</span><span id="Redshift-79"><a href="#Redshift-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;LISTAGG&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Redshift-80"><a href="#Redshift-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Redshift-81"><a href="#Redshift-81"><span class="linenos"> 81</span></a> <span class="p">}</span>
-</span><span id="Redshift-82"><a href="#Redshift-82"><span class="linenos"> 82</span></a>
-</span><span id="Redshift-83"><a href="#Redshift-83"><span class="linenos"> 83</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-84"><a href="#Redshift-84"><span class="linenos"> 84</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Redshift-85"><a href="#Redshift-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;APPROXIMATE&quot;</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_approximate_count</span><span class="p">(),</span>
-</span><span id="Redshift-86"><a href="#Redshift-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;SYSDATE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span> <span class="n">transaction</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Redshift-87"><a href="#Redshift-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
-</span><span id="Redshift-88"><a href="#Redshift-88"><span class="linenos"> 88</span></a>
-</span><span id="Redshift-89"><a href="#Redshift-89"><span class="linenos"> 89</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="Redshift-90"><a href="#Redshift-90"><span class="linenos"> 90</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Redshift-91"><a href="#Redshift-91"><span class="linenos"> 91</span></a> <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><span id="Redshift-92"><a href="#Redshift-92"><span class="linenos"> 92</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Redshift-93"><a href="#Redshift-93"><span class="linenos"> 93</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift-36"><a href="#Redshift-36"><span class="linenos"> 36</span></a><span class="k">class</span> <span class="nc">Redshift</span><span class="p">(</span><span class="n">Postgres</span><span class="p">):</span>
+</span><span id="Redshift-37"><a href="#Redshift-37"><span class="linenos"> 37</span></a> <span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_names.html</span>
+</span><span id="Redshift-38"><a href="#Redshift-38"><span class="linenos"> 38</span></a> <span class="n">NORMALIZATION_STRATEGY</span> <span class="o">=</span> <span class="n">NormalizationStrategy</span><span class="o">.</span><span class="n">CASE_INSENSITIVE</span>
+</span><span id="Redshift-39"><a href="#Redshift-39"><span class="linenos"> 39</span></a>
+</span><span id="Redshift-40"><a href="#Redshift-40"><span class="linenos"> 40</span></a> <span class="n">SUPPORTS_USER_DEFINED_TYPES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-41"><a href="#Redshift-41"><span class="linenos"> 41</span></a> <span class="n">INDEX_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Redshift-42"><a href="#Redshift-42"><span class="linenos"> 42</span></a>
+</span><span id="Redshift-43"><a href="#Redshift-43"><span class="linenos"> 43</span></a> <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;&#39;YYYY-MM-DD HH:MI:SS&#39;&quot;</span>
+</span><span id="Redshift-44"><a href="#Redshift-44"><span class="linenos"> 44</span></a> <span class="n">TIME_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-45"><a href="#Redshift-45"><span class="linenos"> 45</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="Redshift-46"><a href="#Redshift-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="Redshift-47"><a href="#Redshift-47"><span class="linenos"> 47</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="Redshift-48"><a href="#Redshift-48"><span class="linenos"> 48</span></a> <span class="p">}</span>
+</span><span id="Redshift-49"><a href="#Redshift-49"><span class="linenos"> 49</span></a>
+</span><span id="Redshift-50"><a href="#Redshift-50"><span class="linenos"> 50</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Redshift-51"><a href="#Redshift-51"><span class="linenos"> 51</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-52"><a href="#Redshift-52"><span class="linenos"> 52</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Redshift-53"><a href="#Redshift-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;ADD_MONTHS&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">TsOrDsAdd</span><span class="p">(</span>
+</span><span id="Redshift-54"><a href="#Redshift-54"><span class="linenos"> 54</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Redshift-55"><a href="#Redshift-55"><span class="linenos"> 55</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="Redshift-56"><a href="#Redshift-56"><span class="linenos"> 56</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
+</span><span id="Redshift-57"><a href="#Redshift-57"><span class="linenos"> 57</span></a> <span class="n">return_type</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Redshift-58"><a href="#Redshift-58"><span class="linenos"> 58</span></a> <span class="p">),</span>
+</span><span id="Redshift-59"><a href="#Redshift-59"><span class="linenos"> 59</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">TsOrDsAdd</span><span class="p">),</span>
+</span><span id="Redshift-60"><a href="#Redshift-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">),</span>
+</span><span id="Redshift-61"><a href="#Redshift-61"><span class="linenos"> 61</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">TsOrDsDiff</span><span class="p">),</span>
+</span><span id="Redshift-62"><a href="#Redshift-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;DATE_DIFF&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">TsOrDsDiff</span><span class="p">),</span>
+</span><span id="Redshift-63"><a href="#Redshift-63"><span class="linenos"> 63</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="Redshift-64"><a href="#Redshift-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;LISTAGG&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Redshift-65"><a href="#Redshift-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Redshift-66"><a href="#Redshift-66"><span class="linenos"> 66</span></a> <span class="p">}</span>
+</span><span id="Redshift-67"><a href="#Redshift-67"><span class="linenos"> 67</span></a>
+</span><span id="Redshift-68"><a href="#Redshift-68"><span class="linenos"> 68</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-69"><a href="#Redshift-69"><span class="linenos"> 69</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Redshift-70"><a href="#Redshift-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;APPROXIMATE&quot;</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_approximate_count</span><span class="p">(),</span>
+</span><span id="Redshift-71"><a href="#Redshift-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;SYSDATE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span> <span class="n">transaction</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Redshift-72"><a href="#Redshift-72"><span class="linenos"> 72</span></a> <span class="p">}</span>
+</span><span id="Redshift-73"><a href="#Redshift-73"><span class="linenos"> 73</span></a>
+</span><span id="Redshift-74"><a href="#Redshift-74"><span class="linenos"> 74</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="Redshift-75"><a href="#Redshift-75"><span class="linenos"> 75</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Redshift-76"><a href="#Redshift-76"><span class="linenos"> 76</span></a> <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><span id="Redshift-77"><a href="#Redshift-77"><span class="linenos"> 77</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Redshift-78"><a href="#Redshift-78"><span class="linenos"> 78</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Redshift-79"><a href="#Redshift-79"><span class="linenos"> 79</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Redshift-80"><a href="#Redshift-80"><span class="linenos"> 80</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Redshift-81"><a href="#Redshift-81"><span class="linenos"> 81</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="Redshift-82"><a href="#Redshift-82"><span class="linenos"> 82</span></a> <span class="c1"># Redshift supports UNPIVOTing SUPER objects, e.g. `UNPIVOT foo.obj[0] AS val AT attr`</span>
+</span><span id="Redshift-83"><a href="#Redshift-83"><span class="linenos"> 83</span></a> <span class="n">unpivot</span> <span class="o">=</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">UNPIVOT</span><span class="p">)</span>
+</span><span id="Redshift-84"><a href="#Redshift-84"><span class="linenos"> 84</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</span><span class="p">(</span>
+</span><span id="Redshift-85"><a href="#Redshift-85"><span class="linenos"> 85</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="Redshift-86"><a href="#Redshift-86"><span class="linenos"> 86</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
+</span><span id="Redshift-87"><a href="#Redshift-87"><span class="linenos"> 87</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
+</span><span id="Redshift-88"><a href="#Redshift-88"><span class="linenos"> 88</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
+</span><span id="Redshift-89"><a href="#Redshift-89"><span class="linenos"> 89</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
+</span><span id="Redshift-90"><a href="#Redshift-90"><span class="linenos"> 90</span></a> <span class="p">)</span>
+</span><span id="Redshift-91"><a href="#Redshift-91"><span class="linenos"> 91</span></a>
+</span><span id="Redshift-92"><a href="#Redshift-92"><span class="linenos"> 92</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">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">unpivot</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="Redshift-93"><a href="#Redshift-93"><span class="linenos"> 93</span></a>
+</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Redshift-96"><a href="#Redshift-96"><span class="linenos"> 96</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="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</span></a> <span class="c1"># Redshift supports UNPIVOTing SUPER objects, e.g. `UNPIVOT foo.obj[0] AS val AT attr`</span>
-</span><span id="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</span></a> <span class="n">unpivot</span> <span class="o">=</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">UNPIVOT</span><span class="p">)</span>
-</span><span id="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</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</span><span class="p">(</span>
-</span><span id="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
-</span><span id="Redshift-102"><a href="#Redshift-102"><span class="linenos">102</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
-</span><span id="Redshift-103"><a href="#Redshift-103"><span class="linenos">103</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
-</span><span id="Redshift-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
-</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</span></a> <span class="p">)</span>
-</span><span id="Redshift-106"><a href="#Redshift-106"><span class="linenos">106</span></a>
-</span><span id="Redshift-107"><a href="#Redshift-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">unpivot</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</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_types</span><span class="p">(</span>
+</span><span id="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</span></a> <span class="p">)</span>
+</span><span id="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a>
+</span><span id="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Redshift-102"><a href="#Redshift-102"><span class="linenos">102</span></a> <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">DataType</span><span class="p">)</span>
+</span><span id="Redshift-103"><a href="#Redshift-103"><span class="linenos">103</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="Redshift-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="Redshift-106"><a href="#Redshift-106"><span class="linenos">106</span></a> <span class="p">):</span>
+</span><span id="Redshift-107"><a href="#Redshift-107"><span class="linenos">107</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
</span><span id="Redshift-108"><a href="#Redshift-108"><span class="linenos">108</span></a>
-</span><span id="Redshift-109"><a href="#Redshift-109"><span class="linenos">109</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Redshift-110"><a href="#Redshift-110"><span class="linenos">110</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Redshift-111"><a href="#Redshift-111"><span class="linenos">111</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="Redshift-112"><a href="#Redshift-112"><span class="linenos">112</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_types</span><span class="p">(</span>
-</span><span id="Redshift-113"><a href="#Redshift-113"><span class="linenos">113</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Redshift-114"><a href="#Redshift-114"><span class="linenos">114</span></a> <span class="p">)</span>
-</span><span id="Redshift-115"><a href="#Redshift-115"><span class="linenos">115</span></a>
-</span><span id="Redshift-116"><a href="#Redshift-116"><span class="linenos">116</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Redshift-117"><a href="#Redshift-117"><span class="linenos">117</span></a> <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">DataType</span><span class="p">)</span>
-</span><span id="Redshift-118"><a href="#Redshift-118"><span class="linenos">118</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="Redshift-119"><a href="#Redshift-119"><span class="linenos">119</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Redshift-120"><a href="#Redshift-120"><span class="linenos">120</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="Redshift-121"><a href="#Redshift-121"><span class="linenos">121</span></a> <span class="p">):</span>
-</span><span id="Redshift-122"><a href="#Redshift-122"><span class="linenos">122</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
-</span><span id="Redshift-123"><a href="#Redshift-123"><span class="linenos">123</span></a>
-</span><span id="Redshift-124"><a href="#Redshift-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Redshift-125"><a href="#Redshift-125"><span class="linenos">125</span></a>
-</span><span id="Redshift-126"><a href="#Redshift-126"><span class="linenos">126</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
-</span><span id="Redshift-127"><a href="#Redshift-127"><span class="linenos">127</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Redshift-128"><a href="#Redshift-128"><span class="linenos">128</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="Redshift-129"><a href="#Redshift-129"><span class="linenos">129</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="Redshift-130"><a href="#Redshift-130"><span class="linenos">130</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="Redshift-131"><a href="#Redshift-131"><span class="linenos">131</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="Redshift-132"><a href="#Redshift-132"><span class="linenos">132</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">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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
-</span><span id="Redshift-133"><a href="#Redshift-133"><span class="linenos">133</span></a>
-</span><span id="Redshift-134"><a href="#Redshift-134"><span class="linenos">134</span></a> <span class="k">def</span> <span class="nf">_parse_approximate_count</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">ApproxDistinct</span><span class="p">]:</span>
-</span><span id="Redshift-135"><a href="#Redshift-135"><span class="linenos">135</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Redshift-136"><a href="#Redshift-136"><span class="linenos">136</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="Redshift-137"><a href="#Redshift-137"><span class="linenos">137</span></a>
-</span><span id="Redshift-138"><a href="#Redshift-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
-</span><span id="Redshift-139"><a href="#Redshift-139"><span class="linenos">139</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">ApproxDistinct</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">func</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Redshift-140"><a href="#Redshift-140"><span class="linenos">140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Redshift-141"><a href="#Redshift-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Redshift-142"><a href="#Redshift-142"><span class="linenos">142</span></a>
-</span><span id="Redshift-143"><a href="#Redshift-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="Redshift-144"><a href="#Redshift-144"><span class="linenos">144</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Redshift-145"><a href="#Redshift-145"><span class="linenos">145</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="Redshift-146"><a href="#Redshift-146"><span class="linenos">146</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_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Redshift-147"><a href="#Redshift-147"><span class="linenos">147</span></a>
-</span><span id="Redshift-148"><a href="#Redshift-148"><span class="linenos">148</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Redshift-149"><a href="#Redshift-149"><span class="linenos">149</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Redshift-150"><a href="#Redshift-150"><span class="linenos">150</span></a>
-</span><span id="Redshift-151"><a href="#Redshift-151"><span class="linenos">151</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">,</span> <span class="p">[])):</span>
-</span><span id="Redshift-152"><a href="#Redshift-152"><span class="linenos">152</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
-</span><span id="Redshift-153"><a href="#Redshift-153"><span class="linenos">153</span></a> <span class="p">(</span>
-</span><span id="Redshift-154"><a href="#Redshift-154"><span class="linenos">154</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;joins&quot;</span><span class="p">][</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Redshift-155"><a href="#Redshift-155"><span class="linenos">155</span></a> <span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Redshift-156"><a href="#Redshift-156"><span class="linenos">156</span></a> <span class="p">)</span>
-</span><span id="Redshift-157"><a href="#Redshift-157"><span class="linenos">157</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Redshift-158"><a href="#Redshift-158"><span class="linenos">158</span></a>
-</span><span id="Redshift-159"><a href="#Redshift-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="Redshift-160"><a href="#Redshift-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
-</span><span id="Redshift-161"><a href="#Redshift-161"><span class="linenos">161</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">())</span>
-</span><span id="Redshift-162"><a href="#Redshift-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Redshift-163"><a href="#Redshift-163"><span class="linenos">163</span></a>
-</span><span id="Redshift-164"><a href="#Redshift-164"><span class="linenos">164</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Redshift-165"><a href="#Redshift-165"><span class="linenos">165</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift-166"><a href="#Redshift-166"><span class="linenos">166</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift-167"><a href="#Redshift-167"><span class="linenos">167</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="Redshift-168"><a href="#Redshift-168"><span class="linenos">168</span></a>
-</span><span id="Redshift-169"><a href="#Redshift-169"><span class="linenos">169</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-170"><a href="#Redshift-170"><span class="linenos">170</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift-171"><a href="#Redshift-171"><span class="linenos">171</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="Redshift-172"><a href="#Redshift-172"><span class="linenos">172</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="Redshift-173"><a href="#Redshift-173"><span class="linenos">173</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="Redshift-174"><a href="#Redshift-174"><span class="linenos">174</span></a> <span class="s2">&quot;UNLOAD&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="Redshift-175"><a href="#Redshift-175"><span class="linenos">175</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Redshift-176"><a href="#Redshift-176"><span class="linenos">176</span></a> <span class="p">}</span>
-</span><span id="Redshift-177"><a href="#Redshift-177"><span class="linenos">177</span></a>
-</span><span id="Redshift-178"><a href="#Redshift-178"><span class="linenos">178</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
-</span><span id="Redshift-179"><a href="#Redshift-179"><span class="linenos">179</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</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="Redshift-180"><a href="#Redshift-180"><span class="linenos">180</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="Redshift-181"><a href="#Redshift-181"><span class="linenos">181</span></a>
-</span><span id="Redshift-182"><a href="#Redshift-182"><span class="linenos">182</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Redshift-183"><a href="#Redshift-183"><span class="linenos">183</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-184"><a href="#Redshift-184"><span class="linenos">184</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-185"><a href="#Redshift-185"><span class="linenos">185</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-186"><a href="#Redshift-186"><span class="linenos">186</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Redshift-187"><a href="#Redshift-187"><span class="linenos">187</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Redshift-188"><a href="#Redshift-188"><span class="linenos">188</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift-189"><a href="#Redshift-189"><span class="linenos">189</span></a>
-</span><span id="Redshift-190"><a href="#Redshift-190"><span class="linenos">190</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-191"><a href="#Redshift-191"><span class="linenos">191</span></a> <span class="o">**</span><span class="n">Postgres</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><span id="Redshift-192"><a href="#Redshift-192"><span class="linenos">192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift-193"><a href="#Redshift-193"><span class="linenos">193</span></a> <span class="n">exp</span><span 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="Redshift-194"><a href="#Redshift-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
-</span><span id="Redshift-195"><a href="#Redshift-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Redshift-196"><a href="#Redshift-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift-197"><a href="#Redshift-197"><span class="linenos">197</span></a> <span class="p">}</span>
-</span><span id="Redshift-198"><a href="#Redshift-198"><span class="linenos">198</span></a>
-</span><span id="Redshift-199"><a href="#Redshift-199"><span class="linenos">199</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift-200"><a href="#Redshift-200"><span class="linenos">200</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Redshift-201"><a href="#Redshift-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift-202"><a href="#Redshift-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">:</span> <span class="n">concat_ws_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift-203"><a href="#Redshift-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Redshift-204"><a href="#Redshift-204"><span class="linenos">204</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;APPROXIMATE COUNT(DISTINCT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Redshift-205"><a href="#Redshift-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="Redshift-206"><a href="#Redshift-206"><span class="linenos">206</span></a> <span class="s2">&quot;SYSDATE&quot;</span> <span class="k">if</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;transaction&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;GETDATE()&quot;</span>
-</span><span id="Redshift-207"><a href="#Redshift-207"><span class="linenos">207</span></a> <span class="p">),</span>
-</span><span id="Redshift-208"><a href="#Redshift-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
-</span><span id="Redshift-209"><a href="#Redshift-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="Redshift-210"><a href="#Redshift-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Redshift-211"><a href="#Redshift-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Redshift-212"><a href="#Redshift-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
-</span><span id="Redshift-213"><a href="#Redshift-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span> <span class="n">generatedasidentitycolumnconstraint_sql</span><span class="p">,</span>
-</span><span id="Redshift-214"><a href="#Redshift-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Redshift-215"><a href="#Redshift-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Redshift-216"><a href="#Redshift-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LISTAGG&quot;</span><span class="p">),</span>
-</span><span id="Redshift-217"><a href="#Redshift-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
-</span><span id="Redshift-218"><a href="#Redshift-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Redshift-219"><a href="#Redshift-219"><span class="linenos">219</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">]</span>
-</span><span id="Redshift-220"><a href="#Redshift-220"><span class="linenos">220</span></a> <span class="p">),</span>
-</span><span id="Redshift-221"><a href="#Redshift-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Redshift-222"><a href="#Redshift-222"><span class="linenos">222</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</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="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Redshift-223"><a href="#Redshift-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="Redshift-224"><a href="#Redshift-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
-</span><span id="Redshift-225"><a href="#Redshift-225"><span class="linenos">225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="Redshift-226"><a href="#Redshift-226"><span class="linenos">226</span></a> <span class="p">}</span>
-</span><span id="Redshift-227"><a href="#Redshift-227"><span class="linenos">227</span></a>
-</span><span id="Redshift-228"><a href="#Redshift-228"><span class="linenos">228</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
-</span><span id="Redshift-229"><a href="#Redshift-229"><span class="linenos">229</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">Pivot</span><span class="p">)</span>
-</span><span id="Redshift-230"><a href="#Redshift-230"><span class="linenos">230</span></a>
-</span><span id="Redshift-231"><a href="#Redshift-231"><span class="linenos">231</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
-</span><span id="Redshift-232"><a href="#Redshift-232"><span class="linenos">232</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">Pow</span><span class="p">)</span>
-</span><span id="Redshift-233"><a href="#Redshift-233"><span class="linenos">233</span></a>
-</span><span id="Redshift-234"><a href="#Redshift-234"><span class="linenos">234</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
-</span><span id="Redshift-235"><a href="#Redshift-235"><span class="linenos">235</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">AnyValue</span><span class="p">)</span>
+</span><span id="Redshift-109"><a href="#Redshift-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Redshift-110"><a href="#Redshift-110"><span class="linenos">110</span></a>
+</span><span id="Redshift-111"><a href="#Redshift-111"><span class="linenos">111</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
+</span><span id="Redshift-112"><a href="#Redshift-112"><span class="linenos">112</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Redshift-113"><a href="#Redshift-113"><span class="linenos">113</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="Redshift-114"><a href="#Redshift-114"><span class="linenos">114</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="Redshift-115"><a href="#Redshift-115"><span class="linenos">115</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="Redshift-116"><a href="#Redshift-116"><span class="linenos">116</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="Redshift-117"><a href="#Redshift-117"><span class="linenos">117</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">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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
+</span><span id="Redshift-118"><a href="#Redshift-118"><span class="linenos">118</span></a>
+</span><span id="Redshift-119"><a href="#Redshift-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">_parse_approximate_count</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">ApproxDistinct</span><span class="p">]:</span>
+</span><span id="Redshift-120"><a href="#Redshift-120"><span class="linenos">120</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Redshift-121"><a href="#Redshift-121"><span class="linenos">121</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="Redshift-122"><a href="#Redshift-122"><span class="linenos">122</span></a>
+</span><span id="Redshift-123"><a href="#Redshift-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
+</span><span id="Redshift-124"><a href="#Redshift-124"><span class="linenos">124</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">ApproxDistinct</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">func</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Redshift-125"><a href="#Redshift-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Redshift-126"><a href="#Redshift-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Redshift-127"><a href="#Redshift-127"><span class="linenos">127</span></a>
+</span><span id="Redshift-128"><a href="#Redshift-128"><span class="linenos">128</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="Redshift-129"><a href="#Redshift-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Redshift-130"><a href="#Redshift-130"><span class="linenos">130</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="Redshift-131"><a href="#Redshift-131"><span class="linenos">131</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_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Redshift-132"><a href="#Redshift-132"><span class="linenos">132</span></a>
+</span><span id="Redshift-133"><a href="#Redshift-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Redshift-134"><a href="#Redshift-134"><span class="linenos">134</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Redshift-135"><a href="#Redshift-135"><span class="linenos">135</span></a>
+</span><span id="Redshift-136"><a href="#Redshift-136"><span class="linenos">136</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">,</span> <span class="p">[])):</span>
+</span><span id="Redshift-137"><a href="#Redshift-137"><span class="linenos">137</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
+</span><span id="Redshift-138"><a href="#Redshift-138"><span class="linenos">138</span></a> <span class="p">(</span>
+</span><span id="Redshift-139"><a href="#Redshift-139"><span class="linenos">139</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;joins&quot;</span><span class="p">][</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Redshift-140"><a href="#Redshift-140"><span class="linenos">140</span></a> <span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Redshift-141"><a href="#Redshift-141"><span class="linenos">141</span></a> <span class="p">)</span>
+</span><span id="Redshift-142"><a href="#Redshift-142"><span class="linenos">142</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Redshift-143"><a href="#Redshift-143"><span class="linenos">143</span></a>
+</span><span id="Redshift-144"><a href="#Redshift-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="Redshift-145"><a href="#Redshift-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
+</span><span id="Redshift-146"><a href="#Redshift-146"><span class="linenos">146</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">())</span>
+</span><span id="Redshift-147"><a href="#Redshift-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Redshift-148"><a href="#Redshift-148"><span class="linenos">148</span></a>
+</span><span id="Redshift-149"><a href="#Redshift-149"><span class="linenos">149</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Redshift-150"><a href="#Redshift-150"><span class="linenos">150</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift-151"><a href="#Redshift-151"><span class="linenos">151</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift-152"><a href="#Redshift-152"><span class="linenos">152</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="Redshift-153"><a href="#Redshift-153"><span class="linenos">153</span></a>
+</span><span id="Redshift-154"><a href="#Redshift-154"><span class="linenos">154</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-155"><a href="#Redshift-155"><span class="linenos">155</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift-156"><a href="#Redshift-156"><span class="linenos">156</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="Redshift-157"><a href="#Redshift-157"><span class="linenos">157</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="Redshift-158"><a href="#Redshift-158"><span class="linenos">158</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="Redshift-159"><a href="#Redshift-159"><span class="linenos">159</span></a> <span class="s2">&quot;UNLOAD&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="Redshift-160"><a href="#Redshift-160"><span class="linenos">160</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Redshift-161"><a href="#Redshift-161"><span class="linenos">161</span></a> <span class="p">}</span>
+</span><span id="Redshift-162"><a href="#Redshift-162"><span class="linenos">162</span></a>
+</span><span id="Redshift-163"><a href="#Redshift-163"><span class="linenos">163</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
+</span><span id="Redshift-164"><a href="#Redshift-164"><span class="linenos">164</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</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="Redshift-165"><a href="#Redshift-165"><span class="linenos">165</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="Redshift-166"><a href="#Redshift-166"><span class="linenos">166</span></a>
+</span><span id="Redshift-167"><a href="#Redshift-167"><span class="linenos">167</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Redshift-168"><a href="#Redshift-168"><span class="linenos">168</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-169"><a href="#Redshift-169"><span class="linenos">169</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-170"><a href="#Redshift-170"><span class="linenos">170</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-171"><a href="#Redshift-171"><span class="linenos">171</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift-172"><a href="#Redshift-172"><span class="linenos">172</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift-173"><a href="#Redshift-173"><span class="linenos">173</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift-174"><a href="#Redshift-174"><span class="linenos">174</span></a>
+</span><span id="Redshift-175"><a href="#Redshift-175"><span class="linenos">175</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-176"><a href="#Redshift-176"><span class="linenos">176</span></a> <span class="o">**</span><span class="n">Postgres</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><span id="Redshift-177"><a href="#Redshift-177"><span class="linenos">177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift-178"><a href="#Redshift-178"><span class="linenos">178</span></a> <span class="n">exp</span><span 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="Redshift-179"><a href="#Redshift-179"><span class="linenos">179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="Redshift-180"><a href="#Redshift-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Redshift-181"><a href="#Redshift-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift-182"><a href="#Redshift-182"><span class="linenos">182</span></a> <span class="p">}</span>
+</span><span id="Redshift-183"><a href="#Redshift-183"><span class="linenos">183</span></a>
+</span><span id="Redshift-184"><a href="#Redshift-184"><span class="linenos">184</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift-185"><a href="#Redshift-185"><span class="linenos">185</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Redshift-186"><a href="#Redshift-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift-187"><a href="#Redshift-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">:</span> <span class="n">concat_ws_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift-188"><a href="#Redshift-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Redshift-189"><a href="#Redshift-189"><span class="linenos">189</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;APPROXIMATE COUNT(DISTINCT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Redshift-190"><a href="#Redshift-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Redshift-191"><a href="#Redshift-191"><span class="linenos">191</span></a> <span class="s2">&quot;SYSDATE&quot;</span> <span class="k">if</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;transaction&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;GETDATE()&quot;</span>
+</span><span id="Redshift-192"><a href="#Redshift-192"><span class="linenos">192</span></a> <span class="p">),</span>
+</span><span id="Redshift-193"><a href="#Redshift-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
+</span><span id="Redshift-194"><a href="#Redshift-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
+</span><span id="Redshift-195"><a href="#Redshift-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Redshift-196"><a href="#Redshift-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Redshift-197"><a href="#Redshift-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
+</span><span id="Redshift-198"><a href="#Redshift-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span> <span class="n">generatedasidentitycolumnconstraint_sql</span><span class="p">,</span>
+</span><span id="Redshift-199"><a href="#Redshift-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">),</span>
+</span><span id="Redshift-200"><a href="#Redshift-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LISTAGG&quot;</span><span class="p">),</span>
+</span><span id="Redshift-201"><a href="#Redshift-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
+</span><span id="Redshift-202"><a href="#Redshift-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Redshift-203"><a href="#Redshift-203"><span class="linenos">203</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">]</span>
+</span><span id="Redshift-204"><a href="#Redshift-204"><span class="linenos">204</span></a> <span class="p">),</span>
+</span><span id="Redshift-205"><a href="#Redshift-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Redshift-206"><a href="#Redshift-206"><span class="linenos">206</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</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="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Redshift-207"><a href="#Redshift-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="Redshift-208"><a href="#Redshift-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
+</span><span id="Redshift-209"><a href="#Redshift-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
+</span><span id="Redshift-210"><a href="#Redshift-210"><span class="linenos">210</span></a> <span class="p">}</span>
+</span><span id="Redshift-211"><a href="#Redshift-211"><span class="linenos">211</span></a>
+</span><span id="Redshift-212"><a href="#Redshift-212"><span class="linenos">212</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
+</span><span id="Redshift-213"><a href="#Redshift-213"><span class="linenos">213</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">Pivot</span><span class="p">)</span>
+</span><span id="Redshift-214"><a href="#Redshift-214"><span class="linenos">214</span></a>
+</span><span id="Redshift-215"><a href="#Redshift-215"><span class="linenos">215</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
+</span><span id="Redshift-216"><a href="#Redshift-216"><span class="linenos">216</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">Pow</span><span class="p">)</span>
+</span><span id="Redshift-217"><a href="#Redshift-217"><span class="linenos">217</span></a>
+</span><span id="Redshift-218"><a href="#Redshift-218"><span class="linenos">218</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
+</span><span id="Redshift-219"><a href="#Redshift-219"><span class="linenos">219</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">AnyValue</span><span class="p">)</span>
+</span><span id="Redshift-220"><a href="#Redshift-220"><span class="linenos">220</span></a>
+</span><span id="Redshift-221"><a href="#Redshift-221"><span class="linenos">221</span></a> <span class="c1"># Redshift supports LAST_DAY(..)</span>
+</span><span id="Redshift-222"><a href="#Redshift-222"><span class="linenos">222</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">LastDay</span><span class="p">)</span>
+</span><span id="Redshift-223"><a href="#Redshift-223"><span class="linenos">223</span></a>
+</span><span id="Redshift-224"><a href="#Redshift-224"><span class="linenos">224</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
+</span><span id="Redshift-225"><a href="#Redshift-225"><span class="linenos">225</span></a>
+</span><span id="Redshift-226"><a href="#Redshift-226"><span class="linenos">226</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift-227"><a href="#Redshift-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="Redshift-228"><a href="#Redshift-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Redshift-229"><a href="#Redshift-229"><span class="linenos">229</span></a>
+</span><span id="Redshift-230"><a href="#Redshift-230"><span class="linenos">230</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift-231"><a href="#Redshift-231"><span class="linenos">231</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
+</span><span id="Redshift-232"><a href="#Redshift-232"><span class="linenos">232</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
+</span><span id="Redshift-233"><a href="#Redshift-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Redshift-234"><a href="#Redshift-234"><span class="linenos">234</span></a>
+</span><span id="Redshift-235"><a href="#Redshift-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
</span><span id="Redshift-236"><a href="#Redshift-236"><span class="linenos">236</span></a>
-</span><span id="Redshift-237"><a href="#Redshift-237"><span class="linenos">237</span></a> <span class="c1"># Redshift supports LAST_DAY(..)</span>
-</span><span id="Redshift-238"><a href="#Redshift-238"><span class="linenos">238</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">LastDay</span><span class="p">)</span>
-</span><span id="Redshift-239"><a href="#Redshift-239"><span class="linenos">239</span></a>
-</span><span id="Redshift-240"><a href="#Redshift-240"><span class="linenos">240</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
-</span><span id="Redshift-241"><a href="#Redshift-241"><span class="linenos">241</span></a>
-</span><span id="Redshift-242"><a href="#Redshift-242"><span class="linenos">242</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift-243"><a href="#Redshift-243"><span class="linenos">243</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="Redshift-244"><a href="#Redshift-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Redshift-245"><a href="#Redshift-245"><span class="linenos">245</span></a>
-</span><span id="Redshift-246"><a href="#Redshift-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift-247"><a href="#Redshift-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
-</span><span id="Redshift-248"><a href="#Redshift-248"><span class="linenos">248</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
-</span><span id="Redshift-249"><a href="#Redshift-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Redshift-237"><a href="#Redshift-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift-238"><a href="#Redshift-238"><span class="linenos">238</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Redshift-239"><a href="#Redshift-239"><span class="linenos">239</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="Redshift-240"><a href="#Redshift-240"><span class="linenos">240</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="Redshift-241"><a href="#Redshift-241"><span class="linenos">241</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="Redshift-242"><a href="#Redshift-242"><span class="linenos">242</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="Redshift-243"><a href="#Redshift-243"><span class="linenos">243</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Redshift-244"><a href="#Redshift-244"><span class="linenos">244</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="Redshift-245"><a href="#Redshift-245"><span class="linenos">245</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="Redshift-246"><a href="#Redshift-246"><span class="linenos">246</span></a> <span class="n">precision</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;expressions&quot;</span><span class="p">)</span>
+</span><span id="Redshift-247"><a href="#Redshift-247"><span class="linenos">247</span></a>
+</span><span id="Redshift-248"><a href="#Redshift-248"><span class="linenos">248</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="Redshift-249"><a href="#Redshift-249"><span class="linenos">249</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift-250"><a href="#Redshift-250"><span class="linenos">250</span></a>
-</span><span id="Redshift-251"><a href="#Redshift-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
-</span><span id="Redshift-252"><a href="#Redshift-252"><span class="linenos">252</span></a>
-</span><span id="Redshift-253"><a href="#Redshift-253"><span class="linenos">253</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift-254"><a href="#Redshift-254"><span class="linenos">254</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Redshift-255"><a href="#Redshift-255"><span class="linenos">255</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="Redshift-256"><a href="#Redshift-256"><span class="linenos">256</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="Redshift-257"><a href="#Redshift-257"><span class="linenos">257</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="Redshift-258"><a href="#Redshift-258"><span class="linenos">258</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="Redshift-259"><a href="#Redshift-259"><span class="linenos">259</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Redshift-260"><a href="#Redshift-260"><span class="linenos">260</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="Redshift-261"><a href="#Redshift-261"><span class="linenos">261</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="Redshift-262"><a href="#Redshift-262"><span class="linenos">262</span></a> <span class="n">precision</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;expressions&quot;</span><span class="p">)</span>
-</span><span id="Redshift-263"><a href="#Redshift-263"><span class="linenos">263</span></a>
-</span><span id="Redshift-264"><a href="#Redshift-264"><span class="linenos">264</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="Redshift-265"><a href="#Redshift-265"><span class="linenos">265</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="Redshift-266"><a href="#Redshift-266"><span class="linenos">266</span></a>
-</span><span id="Redshift-267"><a href="#Redshift-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Redshift-251"><a href="#Redshift-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1096,107 +1076,104 @@
</div>
<a class="headerlink" href="#Redshift.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Parser-62"><a href="#Redshift.Parser-62"><span class="linenos"> 62</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Redshift.Parser-63"><a href="#Redshift.Parser-63"><span class="linenos"> 63</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Parser-64"><a href="#Redshift.Parser-64"><span class="linenos"> 64</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
-</span><span id="Redshift.Parser-65"><a href="#Redshift.Parser-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;ADD_MONTHS&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">TsOrDsAdd</span><span class="p">(</span>
-</span><span id="Redshift.Parser-66"><a href="#Redshift.Parser-66"><span class="linenos"> 66</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="Redshift.Parser-67"><a href="#Redshift.Parser-67"><span class="linenos"> 67</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="Redshift.Parser-68"><a href="#Redshift.Parser-68"><span class="linenos"> 68</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Parser-69"><a href="#Redshift.Parser-69"><span class="linenos"> 69</span></a> <span class="n">return_type</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Parser-70"><a href="#Redshift.Parser-70"><span class="linenos"> 70</span></a> <span class="p">),</span>
-</span><span id="Redshift.Parser-71"><a href="#Redshift.Parser-71"><span class="linenos"> 71</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">TsOrDsAdd</span><span class="p">),</span>
-</span><span id="Redshift.Parser-72"><a href="#Redshift.Parser-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">),</span>
-</span><span id="Redshift.Parser-73"><a href="#Redshift.Parser-73"><span class="linenos"> 73</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">TsOrDsDiff</span><span class="p">),</span>
-</span><span id="Redshift.Parser-74"><a href="#Redshift.Parser-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;DATE_DIFF&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">TsOrDsDiff</span><span class="p">),</span>
-</span><span id="Redshift.Parser-75"><a href="#Redshift.Parser-75"><span class="linenos"> 75</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="Redshift.Parser-76"><a href="#Redshift.Parser-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">parse_json_extract_path</span><span class="p">(</span>
-</span><span id="Redshift.Parser-77"><a href="#Redshift.Parser-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span> <span class="n">supports_null_if_invalid</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="Redshift.Parser-78"><a href="#Redshift.Parser-78"><span class="linenos"> 78</span></a> <span class="p">),</span>
-</span><span id="Redshift.Parser-79"><a href="#Redshift.Parser-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;LISTAGG&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Redshift.Parser-80"><a href="#Redshift.Parser-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Redshift.Parser-81"><a href="#Redshift.Parser-81"><span class="linenos"> 81</span></a> <span class="p">}</span>
-</span><span id="Redshift.Parser-82"><a href="#Redshift.Parser-82"><span class="linenos"> 82</span></a>
-</span><span id="Redshift.Parser-83"><a href="#Redshift.Parser-83"><span class="linenos"> 83</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Parser-84"><a href="#Redshift.Parser-84"><span class="linenos"> 84</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Redshift.Parser-85"><a href="#Redshift.Parser-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;APPROXIMATE&quot;</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_approximate_count</span><span class="p">(),</span>
-</span><span id="Redshift.Parser-86"><a href="#Redshift.Parser-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;SYSDATE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span> <span class="n">transaction</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Redshift.Parser-87"><a href="#Redshift.Parser-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
-</span><span id="Redshift.Parser-88"><a href="#Redshift.Parser-88"><span class="linenos"> 88</span></a>
-</span><span id="Redshift.Parser-89"><a href="#Redshift.Parser-89"><span class="linenos"> 89</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="Redshift.Parser-90"><a href="#Redshift.Parser-90"><span class="linenos"> 90</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Redshift.Parser-91"><a href="#Redshift.Parser-91"><span class="linenos"> 91</span></a> <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><span id="Redshift.Parser-92"><a href="#Redshift.Parser-92"><span class="linenos"> 92</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Redshift.Parser-93"><a href="#Redshift.Parser-93"><span class="linenos"> 93</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Redshift.Parser-94"><a href="#Redshift.Parser-94"><span class="linenos"> 94</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Redshift.Parser-95"><a href="#Redshift.Parser-95"><span class="linenos"> 95</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Parser-50"><a href="#Redshift.Parser-50"><span class="linenos"> 50</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Redshift.Parser-51"><a href="#Redshift.Parser-51"><span class="linenos"> 51</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Parser-52"><a href="#Redshift.Parser-52"><span class="linenos"> 52</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
+</span><span id="Redshift.Parser-53"><a href="#Redshift.Parser-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;ADD_MONTHS&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">TsOrDsAdd</span><span class="p">(</span>
+</span><span id="Redshift.Parser-54"><a href="#Redshift.Parser-54"><span class="linenos"> 54</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Redshift.Parser-55"><a href="#Redshift.Parser-55"><span class="linenos"> 55</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="Redshift.Parser-56"><a href="#Redshift.Parser-56"><span class="linenos"> 56</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;month&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Parser-57"><a href="#Redshift.Parser-57"><span class="linenos"> 57</span></a> <span class="n">return_type</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="s2">&quot;TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Parser-58"><a href="#Redshift.Parser-58"><span class="linenos"> 58</span></a> <span class="p">),</span>
+</span><span id="Redshift.Parser-59"><a href="#Redshift.Parser-59"><span class="linenos"> 59</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">TsOrDsAdd</span><span class="p">),</span>
+</span><span id="Redshift.Parser-60"><a href="#Redshift.Parser-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">_parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">),</span>
+</span><span id="Redshift.Parser-61"><a href="#Redshift.Parser-61"><span class="linenos"> 61</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">TsOrDsDiff</span><span class="p">),</span>
+</span><span id="Redshift.Parser-62"><a href="#Redshift.Parser-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;DATE_DIFF&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">TsOrDsDiff</span><span class="p">),</span>
+</span><span id="Redshift.Parser-63"><a href="#Redshift.Parser-63"><span class="linenos"> 63</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="Redshift.Parser-64"><a href="#Redshift.Parser-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;LISTAGG&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Redshift.Parser-65"><a href="#Redshift.Parser-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;STRTOL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Redshift.Parser-66"><a href="#Redshift.Parser-66"><span class="linenos"> 66</span></a> <span class="p">}</span>
+</span><span id="Redshift.Parser-67"><a href="#Redshift.Parser-67"><span class="linenos"> 67</span></a>
+</span><span id="Redshift.Parser-68"><a href="#Redshift.Parser-68"><span class="linenos"> 68</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Parser-69"><a href="#Redshift.Parser-69"><span class="linenos"> 69</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Redshift.Parser-70"><a href="#Redshift.Parser-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;APPROXIMATE&quot;</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_approximate_count</span><span class="p">(),</span>
+</span><span id="Redshift.Parser-71"><a href="#Redshift.Parser-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;SYSDATE&quot;</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span> <span class="n">transaction</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Redshift.Parser-72"><a href="#Redshift.Parser-72"><span class="linenos"> 72</span></a> <span class="p">}</span>
+</span><span id="Redshift.Parser-73"><a href="#Redshift.Parser-73"><span class="linenos"> 73</span></a>
+</span><span id="Redshift.Parser-74"><a href="#Redshift.Parser-74"><span class="linenos"> 74</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="Redshift.Parser-75"><a href="#Redshift.Parser-75"><span class="linenos"> 75</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Redshift.Parser-76"><a href="#Redshift.Parser-76"><span class="linenos"> 76</span></a> <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><span id="Redshift.Parser-77"><a href="#Redshift.Parser-77"><span class="linenos"> 77</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Redshift.Parser-78"><a href="#Redshift.Parser-78"><span class="linenos"> 78</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Redshift.Parser-79"><a href="#Redshift.Parser-79"><span class="linenos"> 79</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Redshift.Parser-80"><a href="#Redshift.Parser-80"><span class="linenos"> 80</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Redshift.Parser-81"><a href="#Redshift.Parser-81"><span class="linenos"> 81</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="Redshift.Parser-82"><a href="#Redshift.Parser-82"><span class="linenos"> 82</span></a> <span class="c1"># Redshift supports UNPIVOTing SUPER objects, e.g. `UNPIVOT foo.obj[0] AS val AT attr`</span>
+</span><span id="Redshift.Parser-83"><a href="#Redshift.Parser-83"><span class="linenos"> 83</span></a> <span class="n">unpivot</span> <span class="o">=</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">UNPIVOT</span><span class="p">)</span>
+</span><span id="Redshift.Parser-84"><a href="#Redshift.Parser-84"><span class="linenos"> 84</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</span><span class="p">(</span>
+</span><span id="Redshift.Parser-85"><a href="#Redshift.Parser-85"><span class="linenos"> 85</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="Redshift.Parser-86"><a href="#Redshift.Parser-86"><span class="linenos"> 86</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
+</span><span id="Redshift.Parser-87"><a href="#Redshift.Parser-87"><span class="linenos"> 87</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
+</span><span id="Redshift.Parser-88"><a href="#Redshift.Parser-88"><span class="linenos"> 88</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
+</span><span id="Redshift.Parser-89"><a href="#Redshift.Parser-89"><span class="linenos"> 89</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
+</span><span id="Redshift.Parser-90"><a href="#Redshift.Parser-90"><span class="linenos"> 90</span></a> <span class="p">)</span>
+</span><span id="Redshift.Parser-91"><a href="#Redshift.Parser-91"><span class="linenos"> 91</span></a>
+</span><span id="Redshift.Parser-92"><a href="#Redshift.Parser-92"><span class="linenos"> 92</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">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">unpivot</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="Redshift.Parser-93"><a href="#Redshift.Parser-93"><span class="linenos"> 93</span></a>
+</span><span id="Redshift.Parser-94"><a href="#Redshift.Parser-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="Redshift.Parser-95"><a href="#Redshift.Parser-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Redshift.Parser-96"><a href="#Redshift.Parser-96"><span class="linenos"> 96</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="Redshift.Parser-97"><a href="#Redshift.Parser-97"><span class="linenos"> 97</span></a> <span class="c1"># Redshift supports UNPIVOTing SUPER objects, e.g. `UNPIVOT foo.obj[0] AS val AT attr`</span>
-</span><span id="Redshift.Parser-98"><a href="#Redshift.Parser-98"><span class="linenos"> 98</span></a> <span class="n">unpivot</span> <span class="o">=</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">UNPIVOT</span><span class="p">)</span>
-</span><span id="Redshift.Parser-99"><a href="#Redshift.Parser-99"><span class="linenos"> 99</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</span><span class="p">(</span>
-</span><span id="Redshift.Parser-100"><a href="#Redshift.Parser-100"><span class="linenos">100</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="Redshift.Parser-101"><a href="#Redshift.Parser-101"><span class="linenos">101</span></a> <span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">,</span>
-</span><span id="Redshift.Parser-102"><a href="#Redshift.Parser-102"><span class="linenos">102</span></a> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">,</span>
-</span><span id="Redshift.Parser-103"><a href="#Redshift.Parser-103"><span class="linenos">103</span></a> <span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">,</span>
-</span><span id="Redshift.Parser-104"><a href="#Redshift.Parser-104"><span class="linenos">104</span></a> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">,</span>
-</span><span id="Redshift.Parser-105"><a href="#Redshift.Parser-105"><span class="linenos">105</span></a> <span class="p">)</span>
-</span><span id="Redshift.Parser-106"><a href="#Redshift.Parser-106"><span class="linenos">106</span></a>
-</span><span id="Redshift.Parser-107"><a href="#Redshift.Parser-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">unpivot</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="Redshift.Parser-97"><a href="#Redshift.Parser-97"><span class="linenos"> 97</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_types</span><span class="p">(</span>
+</span><span id="Redshift.Parser-98"><a href="#Redshift.Parser-98"><span class="linenos"> 98</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Redshift.Parser-99"><a href="#Redshift.Parser-99"><span class="linenos"> 99</span></a> <span class="p">)</span>
+</span><span id="Redshift.Parser-100"><a href="#Redshift.Parser-100"><span class="linenos">100</span></a>
+</span><span id="Redshift.Parser-101"><a href="#Redshift.Parser-101"><span class="linenos">101</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Redshift.Parser-102"><a href="#Redshift.Parser-102"><span class="linenos">102</span></a> <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">DataType</span><span class="p">)</span>
+</span><span id="Redshift.Parser-103"><a href="#Redshift.Parser-103"><span class="linenos">103</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Parser-104"><a href="#Redshift.Parser-104"><span class="linenos">104</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Redshift.Parser-105"><a href="#Redshift.Parser-105"><span class="linenos">105</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Parser-106"><a href="#Redshift.Parser-106"><span class="linenos">106</span></a> <span class="p">):</span>
+</span><span id="Redshift.Parser-107"><a href="#Redshift.Parser-107"><span class="linenos">107</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
</span><span id="Redshift.Parser-108"><a href="#Redshift.Parser-108"><span class="linenos">108</span></a>
-</span><span id="Redshift.Parser-109"><a href="#Redshift.Parser-109"><span class="linenos">109</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Redshift.Parser-110"><a href="#Redshift.Parser-110"><span class="linenos">110</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Redshift.Parser-111"><a href="#Redshift.Parser-111"><span class="linenos">111</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="Redshift.Parser-112"><a href="#Redshift.Parser-112"><span class="linenos">112</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_types</span><span class="p">(</span>
-</span><span id="Redshift.Parser-113"><a href="#Redshift.Parser-113"><span class="linenos">113</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Redshift.Parser-114"><a href="#Redshift.Parser-114"><span class="linenos">114</span></a> <span class="p">)</span>
-</span><span id="Redshift.Parser-115"><a href="#Redshift.Parser-115"><span class="linenos">115</span></a>
-</span><span id="Redshift.Parser-116"><a href="#Redshift.Parser-116"><span class="linenos">116</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Redshift.Parser-117"><a href="#Redshift.Parser-117"><span class="linenos">117</span></a> <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">DataType</span><span class="p">)</span>
-</span><span id="Redshift.Parser-118"><a href="#Redshift.Parser-118"><span class="linenos">118</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Parser-119"><a href="#Redshift.Parser-119"><span class="linenos">119</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Redshift.Parser-120"><a href="#Redshift.Parser-120"><span class="linenos">120</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Parser-121"><a href="#Redshift.Parser-121"><span class="linenos">121</span></a> <span class="p">):</span>
-</span><span id="Redshift.Parser-122"><a href="#Redshift.Parser-122"><span class="linenos">122</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
-</span><span id="Redshift.Parser-123"><a href="#Redshift.Parser-123"><span class="linenos">123</span></a>
-</span><span id="Redshift.Parser-124"><a href="#Redshift.Parser-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Redshift.Parser-125"><a href="#Redshift.Parser-125"><span class="linenos">125</span></a>
-</span><span id="Redshift.Parser-126"><a href="#Redshift.Parser-126"><span class="linenos">126</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
-</span><span id="Redshift.Parser-127"><a href="#Redshift.Parser-127"><span class="linenos">127</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Redshift.Parser-128"><a href="#Redshift.Parser-128"><span class="linenos">128</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="Redshift.Parser-129"><a href="#Redshift.Parser-129"><span class="linenos">129</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="Redshift.Parser-130"><a href="#Redshift.Parser-130"><span class="linenos">130</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="Redshift.Parser-131"><a href="#Redshift.Parser-131"><span class="linenos">131</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="Redshift.Parser-132"><a href="#Redshift.Parser-132"><span class="linenos">132</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">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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
-</span><span id="Redshift.Parser-133"><a href="#Redshift.Parser-133"><span class="linenos">133</span></a>
-</span><span id="Redshift.Parser-134"><a href="#Redshift.Parser-134"><span class="linenos">134</span></a> <span class="k">def</span> <span class="nf">_parse_approximate_count</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">ApproxDistinct</span><span class="p">]:</span>
-</span><span id="Redshift.Parser-135"><a href="#Redshift.Parser-135"><span class="linenos">135</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Redshift.Parser-136"><a href="#Redshift.Parser-136"><span class="linenos">136</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="Redshift.Parser-137"><a href="#Redshift.Parser-137"><span class="linenos">137</span></a>
-</span><span id="Redshift.Parser-138"><a href="#Redshift.Parser-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
-</span><span id="Redshift.Parser-139"><a href="#Redshift.Parser-139"><span class="linenos">139</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">ApproxDistinct</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">func</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Redshift.Parser-140"><a href="#Redshift.Parser-140"><span class="linenos">140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Redshift.Parser-141"><a href="#Redshift.Parser-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Redshift.Parser-142"><a href="#Redshift.Parser-142"><span class="linenos">142</span></a>
-</span><span id="Redshift.Parser-143"><a href="#Redshift.Parser-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="Redshift.Parser-144"><a href="#Redshift.Parser-144"><span class="linenos">144</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Redshift.Parser-145"><a href="#Redshift.Parser-145"><span class="linenos">145</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="Redshift.Parser-146"><a href="#Redshift.Parser-146"><span class="linenos">146</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_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Redshift.Parser-147"><a href="#Redshift.Parser-147"><span class="linenos">147</span></a>
-</span><span id="Redshift.Parser-148"><a href="#Redshift.Parser-148"><span class="linenos">148</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Redshift.Parser-149"><a href="#Redshift.Parser-149"><span class="linenos">149</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Redshift.Parser-150"><a href="#Redshift.Parser-150"><span class="linenos">150</span></a>
-</span><span id="Redshift.Parser-151"><a href="#Redshift.Parser-151"><span class="linenos">151</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">,</span> <span class="p">[])):</span>
-</span><span id="Redshift.Parser-152"><a href="#Redshift.Parser-152"><span class="linenos">152</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
-</span><span id="Redshift.Parser-153"><a href="#Redshift.Parser-153"><span class="linenos">153</span></a> <span class="p">(</span>
-</span><span id="Redshift.Parser-154"><a href="#Redshift.Parser-154"><span class="linenos">154</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;joins&quot;</span><span class="p">][</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Redshift.Parser-155"><a href="#Redshift.Parser-155"><span class="linenos">155</span></a> <span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Redshift.Parser-156"><a href="#Redshift.Parser-156"><span class="linenos">156</span></a> <span class="p">)</span>
-</span><span id="Redshift.Parser-157"><a href="#Redshift.Parser-157"><span class="linenos">157</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Redshift.Parser-158"><a href="#Redshift.Parser-158"><span class="linenos">158</span></a>
-</span><span id="Redshift.Parser-159"><a href="#Redshift.Parser-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="Redshift.Parser-160"><a href="#Redshift.Parser-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
-</span><span id="Redshift.Parser-161"><a href="#Redshift.Parser-161"><span class="linenos">161</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">())</span>
-</span><span id="Redshift.Parser-162"><a href="#Redshift.Parser-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Redshift.Parser-109"><a href="#Redshift.Parser-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Redshift.Parser-110"><a href="#Redshift.Parser-110"><span class="linenos">110</span></a>
+</span><span id="Redshift.Parser-111"><a href="#Redshift.Parser-111"><span class="linenos">111</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
+</span><span id="Redshift.Parser-112"><a href="#Redshift.Parser-112"><span class="linenos">112</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Redshift.Parser-113"><a href="#Redshift.Parser-113"><span class="linenos">113</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="Redshift.Parser-114"><a href="#Redshift.Parser-114"><span class="linenos">114</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="Redshift.Parser-115"><a href="#Redshift.Parser-115"><span class="linenos">115</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="Redshift.Parser-116"><a href="#Redshift.Parser-116"><span class="linenos">116</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="Redshift.Parser-117"><a href="#Redshift.Parser-117"><span class="linenos">117</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">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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
+</span><span id="Redshift.Parser-118"><a href="#Redshift.Parser-118"><span class="linenos">118</span></a>
+</span><span id="Redshift.Parser-119"><a href="#Redshift.Parser-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">_parse_approximate_count</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">ApproxDistinct</span><span class="p">]:</span>
+</span><span id="Redshift.Parser-120"><a href="#Redshift.Parser-120"><span class="linenos">120</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Redshift.Parser-121"><a href="#Redshift.Parser-121"><span class="linenos">121</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="Redshift.Parser-122"><a href="#Redshift.Parser-122"><span class="linenos">122</span></a>
+</span><span id="Redshift.Parser-123"><a href="#Redshift.Parser-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
+</span><span id="Redshift.Parser-124"><a href="#Redshift.Parser-124"><span class="linenos">124</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">ApproxDistinct</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">func</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Redshift.Parser-125"><a href="#Redshift.Parser-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Redshift.Parser-126"><a href="#Redshift.Parser-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Redshift.Parser-127"><a href="#Redshift.Parser-127"><span class="linenos">127</span></a>
+</span><span id="Redshift.Parser-128"><a href="#Redshift.Parser-128"><span class="linenos">128</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="Redshift.Parser-129"><a href="#Redshift.Parser-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Redshift.Parser-130"><a href="#Redshift.Parser-130"><span class="linenos">130</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="Redshift.Parser-131"><a href="#Redshift.Parser-131"><span class="linenos">131</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_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Redshift.Parser-132"><a href="#Redshift.Parser-132"><span class="linenos">132</span></a>
+</span><span id="Redshift.Parser-133"><a href="#Redshift.Parser-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Redshift.Parser-134"><a href="#Redshift.Parser-134"><span class="linenos">134</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Redshift.Parser-135"><a href="#Redshift.Parser-135"><span class="linenos">135</span></a>
+</span><span id="Redshift.Parser-136"><a href="#Redshift.Parser-136"><span class="linenos">136</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">,</span> <span class="p">[])):</span>
+</span><span id="Redshift.Parser-137"><a href="#Redshift.Parser-137"><span class="linenos">137</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
+</span><span id="Redshift.Parser-138"><a href="#Redshift.Parser-138"><span class="linenos">138</span></a> <span class="p">(</span>
+</span><span id="Redshift.Parser-139"><a href="#Redshift.Parser-139"><span class="linenos">139</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;joins&quot;</span><span class="p">][</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Redshift.Parser-140"><a href="#Redshift.Parser-140"><span class="linenos">140</span></a> <span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Redshift.Parser-141"><a href="#Redshift.Parser-141"><span class="linenos">141</span></a> <span class="p">)</span>
+</span><span id="Redshift.Parser-142"><a href="#Redshift.Parser-142"><span class="linenos">142</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Redshift.Parser-143"><a href="#Redshift.Parser-143"><span class="linenos">143</span></a>
+</span><span id="Redshift.Parser-144"><a href="#Redshift.Parser-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="Redshift.Parser-145"><a href="#Redshift.Parser-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
+</span><span id="Redshift.Parser-146"><a href="#Redshift.Parser-146"><span class="linenos">146</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">())</span>
+</span><span id="Redshift.Parser-147"><a href="#Redshift.Parser-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">this</span>
</span></pre></div>
@@ -1387,23 +1364,23 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Redshift.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Tokenizer-164"><a href="#Redshift.Tokenizer-164"><span class="linenos">164</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Redshift.Tokenizer-165"><a href="#Redshift.Tokenizer-165"><span class="linenos">165</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift.Tokenizer-166"><a href="#Redshift.Tokenizer-166"><span class="linenos">166</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Redshift.Tokenizer-167"><a href="#Redshift.Tokenizer-167"><span class="linenos">167</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="Redshift.Tokenizer-168"><a href="#Redshift.Tokenizer-168"><span class="linenos">168</span></a>
-</span><span id="Redshift.Tokenizer-169"><a href="#Redshift.Tokenizer-169"><span class="linenos">169</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Tokenizer-170"><a href="#Redshift.Tokenizer-170"><span class="linenos">170</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift.Tokenizer-171"><a href="#Redshift.Tokenizer-171"><span class="linenos">171</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-172"><a href="#Redshift.Tokenizer-172"><span class="linenos">172</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-173"><a href="#Redshift.Tokenizer-173"><span class="linenos">173</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="Redshift.Tokenizer-174"><a href="#Redshift.Tokenizer-174"><span class="linenos">174</span></a> <span class="s2">&quot;UNLOAD&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="Redshift.Tokenizer-175"><a href="#Redshift.Tokenizer-175"><span class="linenos">175</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Redshift.Tokenizer-176"><a href="#Redshift.Tokenizer-176"><span class="linenos">176</span></a> <span class="p">}</span>
-</span><span id="Redshift.Tokenizer-177"><a href="#Redshift.Tokenizer-177"><span class="linenos">177</span></a>
-</span><span id="Redshift.Tokenizer-178"><a href="#Redshift.Tokenizer-178"><span class="linenos">178</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
-</span><span id="Redshift.Tokenizer-179"><a href="#Redshift.Tokenizer-179"><span class="linenos">179</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</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="Redshift.Tokenizer-180"><a href="#Redshift.Tokenizer-180"><span class="linenos">180</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="Redshift.Tokenizer-149"><a href="#Redshift.Tokenizer-149"><span class="linenos">149</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Redshift.Tokenizer-150"><a href="#Redshift.Tokenizer-150"><span class="linenos">150</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift.Tokenizer-151"><a href="#Redshift.Tokenizer-151"><span class="linenos">151</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Redshift.Tokenizer-152"><a href="#Redshift.Tokenizer-152"><span class="linenos">152</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="Redshift.Tokenizer-153"><a href="#Redshift.Tokenizer-153"><span class="linenos">153</span></a>
+</span><span id="Redshift.Tokenizer-154"><a href="#Redshift.Tokenizer-154"><span class="linenos">154</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Tokenizer-155"><a href="#Redshift.Tokenizer-155"><span class="linenos">155</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift.Tokenizer-156"><a href="#Redshift.Tokenizer-156"><span class="linenos">156</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-157"><a href="#Redshift.Tokenizer-157"><span class="linenos">157</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-158"><a href="#Redshift.Tokenizer-158"><span class="linenos">158</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="Redshift.Tokenizer-159"><a href="#Redshift.Tokenizer-159"><span class="linenos">159</span></a> <span class="s2">&quot;UNLOAD&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="Redshift.Tokenizer-160"><a href="#Redshift.Tokenizer-160"><span class="linenos">160</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Redshift.Tokenizer-161"><a href="#Redshift.Tokenizer-161"><span class="linenos">161</span></a> <span class="p">}</span>
+</span><span id="Redshift.Tokenizer-162"><a href="#Redshift.Tokenizer-162"><span class="linenos">162</span></a>
+</span><span id="Redshift.Tokenizer-163"><a href="#Redshift.Tokenizer-163"><span class="linenos">163</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
+</span><span id="Redshift.Tokenizer-164"><a href="#Redshift.Tokenizer-164"><span class="linenos">164</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</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="Redshift.Tokenizer-165"><a href="#Redshift.Tokenizer-165"><span class="linenos">165</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>
@@ -1499,6 +1476,8 @@ Default: 3</li>
<div><dt><a href="postgres.html#Postgres.Tokenizer">sqlglot.dialects.postgres.Postgres.Tokenizer</a></dt>
<dd id="Redshift.Tokenizer.BYTE_STRINGS" class="variable"><a href="postgres.html#Postgres.Tokenizer.BYTE_STRINGS">BYTE_STRINGS</a></dd>
<dd id="Redshift.Tokenizer.HEREDOC_STRINGS" class="variable"><a href="postgres.html#Postgres.Tokenizer.HEREDOC_STRINGS">HEREDOC_STRINGS</a></dd>
+ <dd id="Redshift.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="postgres.html#Postgres.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Redshift.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="postgres.html#Postgres.Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Redshift.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="postgres.html#Postgres.Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
</div>
@@ -1516,92 +1495,91 @@ Default: 3</li>
</div>
<a class="headerlink" href="#Redshift.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator-182"><a href="#Redshift.Generator-182"><span class="linenos">182</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Redshift.Generator-183"><a href="#Redshift.Generator-183"><span class="linenos">183</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-184"><a href="#Redshift.Generator-184"><span class="linenos">184</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-185"><a href="#Redshift.Generator-185"><span class="linenos">185</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-186"><a href="#Redshift.Generator-186"><span class="linenos">186</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Redshift.Generator-187"><a href="#Redshift.Generator-187"><span class="linenos">187</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Redshift.Generator-188"><a href="#Redshift.Generator-188"><span class="linenos">188</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Redshift.Generator-189"><a href="#Redshift.Generator-189"><span class="linenos">189</span></a>
-</span><span id="Redshift.Generator-190"><a href="#Redshift.Generator-190"><span class="linenos">190</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Generator-191"><a href="#Redshift.Generator-191"><span class="linenos">191</span></a> <span class="o">**</span><span class="n">Postgres</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><span id="Redshift.Generator-192"><a href="#Redshift.Generator-192"><span class="linenos">192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-193"><a href="#Redshift.Generator-193"><span class="linenos">193</span></a> <span class="n">exp</span><span 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="Redshift.Generator-194"><a href="#Redshift.Generator-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-195"><a href="#Redshift.Generator-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-196"><a href="#Redshift.Generator-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-197"><a href="#Redshift.Generator-197"><span class="linenos">197</span></a> <span class="p">}</span>
-</span><span id="Redshift.Generator-198"><a href="#Redshift.Generator-198"><span class="linenos">198</span></a>
-</span><span id="Redshift.Generator-199"><a href="#Redshift.Generator-199"><span class="linenos">199</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Redshift.Generator-200"><a href="#Redshift.Generator-200"><span class="linenos">200</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
-</span><span id="Redshift.Generator-201"><a href="#Redshift.Generator-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-202"><a href="#Redshift.Generator-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">:</span> <span class="n">concat_ws_to_dpipe_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-203"><a href="#Redshift.Generator-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Redshift.Generator-204"><a href="#Redshift.Generator-204"><span class="linenos">204</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;APPROXIMATE COUNT(DISTINCT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-205"><a href="#Redshift.Generator-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="Redshift.Generator-206"><a href="#Redshift.Generator-206"><span class="linenos">206</span></a> <span class="s2">&quot;SYSDATE&quot;</span> <span class="k">if</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;transaction&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;GETDATE()&quot;</span>
-</span><span id="Redshift.Generator-207"><a href="#Redshift.Generator-207"><span class="linenos">207</span></a> <span class="p">),</span>
-</span><span id="Redshift.Generator-208"><a href="#Redshift.Generator-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-209"><a href="#Redshift.Generator-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-210"><a href="#Redshift.Generator-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-211"><a href="#Redshift.Generator-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Redshift.Generator-212"><a href="#Redshift.Generator-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-213"><a href="#Redshift.Generator-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span> <span class="n">generatedasidentitycolumnconstraint_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-214"><a href="#Redshift.Generator-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-215"><a href="#Redshift.Generator-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_extract_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-216"><a href="#Redshift.Generator-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LISTAGG&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-217"><a href="#Redshift.Generator-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-218"><a href="#Redshift.Generator-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Redshift.Generator-219"><a href="#Redshift.Generator-219"><span class="linenos">219</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">]</span>
-</span><span id="Redshift.Generator-220"><a href="#Redshift.Generator-220"><span class="linenos">220</span></a> <span class="p">),</span>
-</span><span id="Redshift.Generator-221"><a href="#Redshift.Generator-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Redshift.Generator-222"><a href="#Redshift.Generator-222"><span class="linenos">222</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</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="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-223"><a href="#Redshift.Generator-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-224"><a href="#Redshift.Generator-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-225"><a href="#Redshift.Generator-225"><span class="linenos">225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="Redshift.Generator-226"><a href="#Redshift.Generator-226"><span class="linenos">226</span></a> <span class="p">}</span>
-</span><span id="Redshift.Generator-227"><a href="#Redshift.Generator-227"><span class="linenos">227</span></a>
-</span><span id="Redshift.Generator-228"><a href="#Redshift.Generator-228"><span class="linenos">228</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
-</span><span id="Redshift.Generator-229"><a href="#Redshift.Generator-229"><span class="linenos">229</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">Pivot</span><span class="p">)</span>
-</span><span id="Redshift.Generator-230"><a href="#Redshift.Generator-230"><span class="linenos">230</span></a>
-</span><span id="Redshift.Generator-231"><a href="#Redshift.Generator-231"><span class="linenos">231</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
-</span><span id="Redshift.Generator-232"><a href="#Redshift.Generator-232"><span class="linenos">232</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">Pow</span><span class="p">)</span>
-</span><span id="Redshift.Generator-233"><a href="#Redshift.Generator-233"><span class="linenos">233</span></a>
-</span><span id="Redshift.Generator-234"><a href="#Redshift.Generator-234"><span class="linenos">234</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
-</span><span id="Redshift.Generator-235"><a href="#Redshift.Generator-235"><span class="linenos">235</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">AnyValue</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator-167"><a href="#Redshift.Generator-167"><span class="linenos">167</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Redshift.Generator-168"><a href="#Redshift.Generator-168"><span class="linenos">168</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-169"><a href="#Redshift.Generator-169"><span class="linenos">169</span></a> <span class="n">QUERY_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-170"><a href="#Redshift.Generator-170"><span class="linenos">170</span></a> <span class="n">VALUES_AS_TABLE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-171"><a href="#Redshift.Generator-171"><span class="linenos">171</span></a> <span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift.Generator-172"><a href="#Redshift.Generator-172"><span class="linenos">172</span></a> <span class="n">NVL2_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Redshift.Generator-173"><a href="#Redshift.Generator-173"><span class="linenos">173</span></a> <span class="n">LAST_DAY_SUPPORTS_DATE_PART</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Redshift.Generator-174"><a href="#Redshift.Generator-174"><span class="linenos">174</span></a>
+</span><span id="Redshift.Generator-175"><a href="#Redshift.Generator-175"><span class="linenos">175</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Generator-176"><a href="#Redshift.Generator-176"><span class="linenos">176</span></a> <span class="o">**</span><span class="n">Postgres</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><span id="Redshift.Generator-177"><a href="#Redshift.Generator-177"><span class="linenos">177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-178"><a href="#Redshift.Generator-178"><span class="linenos">178</span></a> <span class="n">exp</span><span 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="Redshift.Generator-179"><a href="#Redshift.Generator-179"><span class="linenos">179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">:</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-180"><a href="#Redshift.Generator-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-181"><a href="#Redshift.Generator-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-182"><a href="#Redshift.Generator-182"><span class="linenos">182</span></a> <span class="p">}</span>
+</span><span id="Redshift.Generator-183"><a href="#Redshift.Generator-183"><span class="linenos">183</span></a>
+</span><span id="Redshift.Generator-184"><a href="#Redshift.Generator-184"><span class="linenos">184</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Redshift.Generator-185"><a href="#Redshift.Generator-185"><span class="linenos">185</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
+</span><span id="Redshift.Generator-186"><a href="#Redshift.Generator-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">:</span> <span class="n">concat_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-187"><a href="#Redshift.Generator-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">:</span> <span class="n">concat_ws_to_dpipe_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-188"><a href="#Redshift.Generator-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Redshift.Generator-189"><a href="#Redshift.Generator-189"><span class="linenos">189</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;APPROXIMATE COUNT(DISTINCT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-190"><a href="#Redshift.Generator-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Redshift.Generator-191"><a href="#Redshift.Generator-191"><span class="linenos">191</span></a> <span class="s2">&quot;SYSDATE&quot;</span> <span class="k">if</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;transaction&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;GETDATE()&quot;</span>
+</span><span id="Redshift.Generator-192"><a href="#Redshift.Generator-192"><span class="linenos">192</span></a> <span class="p">),</span>
+</span><span id="Redshift.Generator-193"><a href="#Redshift.Generator-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-194"><a href="#Redshift.Generator-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-195"><a href="#Redshift.Generator-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-196"><a href="#Redshift.Generator-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</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">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Redshift.Generator-197"><a href="#Redshift.Generator-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FromBase</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;STRTOL&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-198"><a href="#Redshift.Generator-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">:</span> <span class="n">generatedasidentitycolumnconstraint_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-199"><a href="#Redshift.Generator-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">json_extract_segments</span><span class="p">(</span><span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-200"><a href="#Redshift.Generator-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LISTAGG&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-201"><a href="#Redshift.Generator-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;JSON_PARSE&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-202"><a href="#Redshift.Generator-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
+</span><span id="Redshift.Generator-203"><a href="#Redshift.Generator-203"><span class="linenos">203</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_semi_and_anti_joins</span><span class="p">]</span>
+</span><span id="Redshift.Generator-204"><a href="#Redshift.Generator-204"><span class="linenos">204</span></a> <span class="p">),</span>
+</span><span id="Redshift.Generator-205"><a href="#Redshift.Generator-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Redshift.Generator-206"><a href="#Redshift.Generator-206"><span class="linenos">206</span></a> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</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="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-207"><a href="#Redshift.Generator-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-208"><a href="#Redshift.Generator-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEADD&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-209"><a href="#Redshift.Generator-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsDiff</span><span class="p">:</span> <span class="n">date_delta_sql</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
+</span><span id="Redshift.Generator-210"><a href="#Redshift.Generator-210"><span class="linenos">210</span></a> <span class="p">}</span>
+</span><span id="Redshift.Generator-211"><a href="#Redshift.Generator-211"><span class="linenos">211</span></a>
+</span><span id="Redshift.Generator-212"><a href="#Redshift.Generator-212"><span class="linenos">212</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
+</span><span id="Redshift.Generator-213"><a href="#Redshift.Generator-213"><span class="linenos">213</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">Pivot</span><span class="p">)</span>
+</span><span id="Redshift.Generator-214"><a href="#Redshift.Generator-214"><span class="linenos">214</span></a>
+</span><span id="Redshift.Generator-215"><a href="#Redshift.Generator-215"><span class="linenos">215</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
+</span><span id="Redshift.Generator-216"><a href="#Redshift.Generator-216"><span class="linenos">216</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">Pow</span><span class="p">)</span>
+</span><span id="Redshift.Generator-217"><a href="#Redshift.Generator-217"><span class="linenos">217</span></a>
+</span><span id="Redshift.Generator-218"><a href="#Redshift.Generator-218"><span class="linenos">218</span></a> <span class="c1"># Redshift supports ANY_VALUE(..)</span>
+</span><span id="Redshift.Generator-219"><a href="#Redshift.Generator-219"><span class="linenos">219</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">AnyValue</span><span class="p">)</span>
+</span><span id="Redshift.Generator-220"><a href="#Redshift.Generator-220"><span class="linenos">220</span></a>
+</span><span id="Redshift.Generator-221"><a href="#Redshift.Generator-221"><span class="linenos">221</span></a> <span class="c1"># Redshift supports LAST_DAY(..)</span>
+</span><span id="Redshift.Generator-222"><a href="#Redshift.Generator-222"><span class="linenos">222</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">LastDay</span><span class="p">)</span>
+</span><span id="Redshift.Generator-223"><a href="#Redshift.Generator-223"><span class="linenos">223</span></a>
+</span><span id="Redshift.Generator-224"><a href="#Redshift.Generator-224"><span class="linenos">224</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
+</span><span id="Redshift.Generator-225"><a href="#Redshift.Generator-225"><span class="linenos">225</span></a>
+</span><span id="Redshift.Generator-226"><a href="#Redshift.Generator-226"><span class="linenos">226</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator-227"><a href="#Redshift.Generator-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator-228"><a href="#Redshift.Generator-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator-229"><a href="#Redshift.Generator-229"><span class="linenos">229</span></a>
+</span><span id="Redshift.Generator-230"><a href="#Redshift.Generator-230"><span class="linenos">230</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator-231"><a href="#Redshift.Generator-231"><span class="linenos">231</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
+</span><span id="Redshift.Generator-232"><a href="#Redshift.Generator-232"><span class="linenos">232</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
+</span><span id="Redshift.Generator-233"><a href="#Redshift.Generator-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator-234"><a href="#Redshift.Generator-234"><span class="linenos">234</span></a>
+</span><span id="Redshift.Generator-235"><a href="#Redshift.Generator-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
</span><span id="Redshift.Generator-236"><a href="#Redshift.Generator-236"><span class="linenos">236</span></a>
-</span><span id="Redshift.Generator-237"><a href="#Redshift.Generator-237"><span class="linenos">237</span></a> <span class="c1"># Redshift supports LAST_DAY(..)</span>
-</span><span id="Redshift.Generator-238"><a href="#Redshift.Generator-238"><span class="linenos">238</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">LastDay</span><span class="p">)</span>
-</span><span id="Redshift.Generator-239"><a href="#Redshift.Generator-239"><span class="linenos">239</span></a>
-</span><span id="Redshift.Generator-240"><a href="#Redshift.Generator-240"><span class="linenos">240</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
-</span><span id="Redshift.Generator-241"><a href="#Redshift.Generator-241"><span class="linenos">241</span></a>
-</span><span id="Redshift.Generator-242"><a href="#Redshift.Generator-242"><span class="linenos">242</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator-243"><a href="#Redshift.Generator-243"><span class="linenos">243</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator-244"><a href="#Redshift.Generator-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Generator-245"><a href="#Redshift.Generator-245"><span class="linenos">245</span></a>
-</span><span id="Redshift.Generator-246"><a href="#Redshift.Generator-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator-247"><a href="#Redshift.Generator-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
-</span><span id="Redshift.Generator-248"><a href="#Redshift.Generator-248"><span class="linenos">248</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
-</span><span id="Redshift.Generator-249"><a href="#Redshift.Generator-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator-237"><a href="#Redshift.Generator-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator-238"><a href="#Redshift.Generator-238"><span class="linenos">238</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator-239"><a href="#Redshift.Generator-239"><span class="linenos">239</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="Redshift.Generator-240"><a href="#Redshift.Generator-240"><span class="linenos">240</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="Redshift.Generator-241"><a href="#Redshift.Generator-241"><span class="linenos">241</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="Redshift.Generator-242"><a href="#Redshift.Generator-242"><span class="linenos">242</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="Redshift.Generator-243"><a href="#Redshift.Generator-243"><span class="linenos">243</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator-244"><a href="#Redshift.Generator-244"><span class="linenos">244</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="Redshift.Generator-245"><a href="#Redshift.Generator-245"><span class="linenos">245</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="Redshift.Generator-246"><a href="#Redshift.Generator-246"><span class="linenos">246</span></a> <span class="n">precision</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;expressions&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator-247"><a href="#Redshift.Generator-247"><span class="linenos">247</span></a>
+</span><span id="Redshift.Generator-248"><a href="#Redshift.Generator-248"><span class="linenos">248</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="Redshift.Generator-249"><a href="#Redshift.Generator-249"><span class="linenos">249</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift.Generator-250"><a href="#Redshift.Generator-250"><span class="linenos">250</span></a>
-</span><span id="Redshift.Generator-251"><a href="#Redshift.Generator-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
-</span><span id="Redshift.Generator-252"><a href="#Redshift.Generator-252"><span class="linenos">252</span></a>
-</span><span id="Redshift.Generator-253"><a href="#Redshift.Generator-253"><span class="linenos">253</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator-254"><a href="#Redshift.Generator-254"><span class="linenos">254</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator-255"><a href="#Redshift.Generator-255"><span class="linenos">255</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="Redshift.Generator-256"><a href="#Redshift.Generator-256"><span class="linenos">256</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="Redshift.Generator-257"><a href="#Redshift.Generator-257"><span class="linenos">257</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="Redshift.Generator-258"><a href="#Redshift.Generator-258"><span class="linenos">258</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="Redshift.Generator-259"><a href="#Redshift.Generator-259"><span class="linenos">259</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator-260"><a href="#Redshift.Generator-260"><span class="linenos">260</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="Redshift.Generator-261"><a href="#Redshift.Generator-261"><span class="linenos">261</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="Redshift.Generator-262"><a href="#Redshift.Generator-262"><span class="linenos">262</span></a> <span class="n">precision</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;expressions&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Generator-263"><a href="#Redshift.Generator-263"><span class="linenos">263</span></a>
-</span><span id="Redshift.Generator-264"><a href="#Redshift.Generator-264"><span class="linenos">264</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="Redshift.Generator-265"><a href="#Redshift.Generator-265"><span class="linenos">265</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="Redshift.Generator-266"><a href="#Redshift.Generator-266"><span class="linenos">266</span></a>
-</span><span id="Redshift.Generator-267"><a href="#Redshift.Generator-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Redshift.Generator-251"><a href="#Redshift.Generator-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1733,7 +1711,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">TRANSFORMS</span> =
<input id="Redshift.Generator.TRANSFORMS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Redshift.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;: &lt;function &lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AutoRefreshProperty">sqlglot.expressions.AutoRefreshProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InheritsProperty">sqlglot.expressions.InheritsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InputModelProperty">sqlglot.expressions.InputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalSpan">sqlglot.expressions.IntervalSpan</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OutputModelProperty">sqlglot.expressions.OutputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RemoteWithConnectionModelProperty">sqlglot.expressions.RemoteWithConnectionModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SampleProperty">sqlglot.expressions.SampleProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetConfigProperty">sqlglot.expressions.SetConfigProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlReadWriteProperty">sqlglot.expressions.SqlReadWriteProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransformModelProperty">sqlglot.expressions.TransformModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function _json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function _json_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function merge_without_target_sql&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function bool_xor_sql&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function concat_ws_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GeneratedAsIdentityColumnConstraint">sqlglot.expressions.GeneratedAsIdentityColumnConstraint</a>&#39;&gt;: &lt;function generatedasidentitycolumnconstraint_sql&gt;, &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Redshift.Generator.TRANSFORMS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;: &lt;function json_path_key_only_name&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#AutoRefreshProperty">sqlglot.expressions.AutoRefreshProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CaseSpecificColumnConstraint">sqlglot.expressions.CaseSpecificColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetColumnConstraint">sqlglot.expressions.CharacterSetColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CharacterSetProperty">sqlglot.expressions.CharacterSetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CheckColumnConstraint">sqlglot.expressions.CheckColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ClusteredColumnConstraint">sqlglot.expressions.ClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CollateColumnConstraint">sqlglot.expressions.CollateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CopyGrantsProperty">sqlglot.expressions.CopyGrantsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateFormatColumnConstraint">sqlglot.expressions.DateFormatColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DefaultColumnConstraint">sqlglot.expressions.DefaultColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EncodeColumnConstraint">sqlglot.expressions.EncodeColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExecuteAsProperty">sqlglot.expressions.ExecuteAsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ExternalProperty">sqlglot.expressions.ExternalProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#HeapProperty">sqlglot.expressions.HeapProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InheritsProperty">sqlglot.expressions.InheritsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InlineLengthColumnConstraint">sqlglot.expressions.InlineLengthColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#InputModelProperty">sqlglot.expressions.InputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntervalSpan">sqlglot.expressions.IntervalSpan</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LanguageProperty">sqlglot.expressions.LanguageProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LocationProperty">sqlglot.expressions.LocationProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogProperty">sqlglot.expressions.LogProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#MaterializedProperty">sqlglot.expressions.MaterializedProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NonClusteredColumnConstraint">sqlglot.expressions.NonClusteredColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NoPrimaryIndexProperty">sqlglot.expressions.NoPrimaryIndexProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NotForReplicationColumnConstraint">sqlglot.expressions.NotForReplicationColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnCommitProperty">sqlglot.expressions.OnCommitProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnProperty">sqlglot.expressions.OnProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OnUpdateColumnConstraint">sqlglot.expressions.OnUpdateColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#OutputModelProperty">sqlglot.expressions.OutputModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PathColumnConstraint">sqlglot.expressions.PathColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RemoteWithConnectionModelProperty">sqlglot.expressions.RemoteWithConnectionModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ReturnsProperty">sqlglot.expressions.ReturnsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SampleProperty">sqlglot.expressions.SampleProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetConfigProperty">sqlglot.expressions.SetConfigProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SetProperty">sqlglot.expressions.SetProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SettingsProperty">sqlglot.expressions.SettingsProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlReadWriteProperty">sqlglot.expressions.SqlReadWriteProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SqlSecurityProperty">sqlglot.expressions.SqlSecurityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StabilityProperty">sqlglot.expressions.StabilityProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TemporaryProperty">sqlglot.expressions.TemporaryProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TitleColumnConstraint">sqlglot.expressions.TitleColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToTableProperty">sqlglot.expressions.ToTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransformModelProperty">sqlglot.expressions.TransformModelProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TransientProperty">sqlglot.expressions.TransientProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UppercaseColumnConstraint">sqlglot.expressions.UppercaseColumnConstraint</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VolatileProperty">sqlglot.expressions.VolatileProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#WithJournalTableProperty">sqlglot.expressions.WithJournalTableProperty</a>&#39;&gt;: &lt;function Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ColumnDef">sqlglot.expressions.ColumnDef</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function no_paren_current_date_sql&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function datestrtodate_sql&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function _datatype_sql&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function _date_add_sql.&lt;locals&gt;.func&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function json_extract_segments.&lt;locals&gt;._json_extract_segments&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function json_extract_segments.&lt;locals&gt;._json_extract_segments&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function max_or_greatest&gt;, &lt;class &#39;<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;: &lt;function no_map_from_entries_sql&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function min_or_least&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;: &lt;function merge_without_target_sql&gt;, &lt;class &#39;<a href="../expressions.html#PartitionedByProperty">sqlglot.expressions.PartitionedByProperty</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function preprocess.&lt;locals&gt;._to_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function str_position_sql&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;: &lt;function struct_extract_sql&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _substring_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;: &lt;function timestamptrunc_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function timestrtotime_sql&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function trim_sql&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function no_trycast_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;: &lt;function date_delta_sql.&lt;locals&gt;._delta_sql&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function Postgres.Generator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function bool_xor_sql&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function concat_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function concat_ws_to_dpipe_sql&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DistKeyProperty">sqlglot.expressions.DistKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DistStyleProperty">sqlglot.expressions.DistStyleProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GeneratedAsIdentityColumnConstraint">sqlglot.expressions.GeneratedAsIdentityColumnConstraint</a>&#39;&gt;: &lt;function generatedasidentitycolumnconstraint_sql&gt;, &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;: &lt;function rename_func.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SortKeyProperty">sqlglot.expressions.SortKeyProperty</a>&#39;&gt;: &lt;function <a href="#Redshift.Generator">Redshift.Generator</a>.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a>&#39;&gt;: &lt;function no_tablesample_sql&gt;}</span>
</div>
@@ -1765,9 +1743,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Redshift.Generator.with_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.with_properties-242"><a href="#Redshift.Generator.with_properties-242"><span class="linenos">242</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator.with_properties-243"><a href="#Redshift.Generator.with_properties-243"><span class="linenos">243</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator.with_properties-244"><a href="#Redshift.Generator.with_properties-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.with_properties-226"><a href="#Redshift.Generator.with_properties-226"><span class="linenos">226</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator.with_properties-227"><a href="#Redshift.Generator.with_properties-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator.with_properties-228"><a href="#Redshift.Generator.with_properties-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -1787,12 +1765,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Redshift.Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.cast_sql-246"><a href="#Redshift.Generator.cast_sql-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator.cast_sql-247"><a href="#Redshift.Generator.cast_sql-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
-</span><span id="Redshift.Generator.cast_sql-248"><a href="#Redshift.Generator.cast_sql-248"><span class="linenos">248</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
-</span><span id="Redshift.Generator.cast_sql-249"><a href="#Redshift.Generator.cast_sql-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Generator.cast_sql-250"><a href="#Redshift.Generator.cast_sql-250"><span class="linenos">250</span></a>
-</span><span id="Redshift.Generator.cast_sql-251"><a href="#Redshift.Generator.cast_sql-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.cast_sql-230"><a href="#Redshift.Generator.cast_sql-230"><span class="linenos">230</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator.cast_sql-231"><a href="#Redshift.Generator.cast_sql-231"><span class="linenos">231</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
+</span><span id="Redshift.Generator.cast_sql-232"><a href="#Redshift.Generator.cast_sql-232"><span class="linenos">232</span></a> <span class="c1"># Redshift doesn&#39;t support a JSON type, so casting to it is treated as a noop</span>
+</span><span id="Redshift.Generator.cast_sql-233"><a href="#Redshift.Generator.cast_sql-233"><span class="linenos">233</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator.cast_sql-234"><a href="#Redshift.Generator.cast_sql-234"><span class="linenos">234</span></a>
+</span><span id="Redshift.Generator.cast_sql-235"><a href="#Redshift.Generator.cast_sql-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="n">safe_prefix</span><span class="p">)</span>
</span></pre></div>
@@ -1810,21 +1788,21 @@ Default: True</li>
</div>
<a class="headerlink" href="#Redshift.Generator.datatype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.datatype_sql-253"><a href="#Redshift.Generator.datatype_sql-253"><span class="linenos">253</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Redshift.Generator.datatype_sql-254"><a href="#Redshift.Generator.datatype_sql-254"><span class="linenos">254</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator.datatype_sql-255"><a href="#Redshift.Generator.datatype_sql-255"><span class="linenos">255</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
-</span><span id="Redshift.Generator.datatype_sql-256"><a href="#Redshift.Generator.datatype_sql-256"><span class="linenos">256</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
-</span><span id="Redshift.Generator.datatype_sql-257"><a href="#Redshift.Generator.datatype_sql-257"><span class="linenos">257</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
-</span><span id="Redshift.Generator.datatype_sql-258"><a href="#Redshift.Generator.datatype_sql-258"><span class="linenos">258</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
-</span><span id="Redshift.Generator.datatype_sql-259"><a href="#Redshift.Generator.datatype_sql-259"><span class="linenos">259</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Redshift.Generator.datatype_sql-260"><a href="#Redshift.Generator.datatype_sql-260"><span class="linenos">260</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
-</span><span id="Redshift.Generator.datatype_sql-261"><a href="#Redshift.Generator.datatype_sql-261"><span class="linenos">261</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
-</span><span id="Redshift.Generator.datatype_sql-262"><a href="#Redshift.Generator.datatype_sql-262"><span class="linenos">262</span></a> <span class="n">precision</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;expressions&quot;</span><span class="p">)</span>
-</span><span id="Redshift.Generator.datatype_sql-263"><a href="#Redshift.Generator.datatype_sql-263"><span class="linenos">263</span></a>
-</span><span id="Redshift.Generator.datatype_sql-264"><a href="#Redshift.Generator.datatype_sql-264"><span class="linenos">264</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
-</span><span id="Redshift.Generator.datatype_sql-265"><a href="#Redshift.Generator.datatype_sql-265"><span class="linenos">265</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
-</span><span id="Redshift.Generator.datatype_sql-266"><a href="#Redshift.Generator.datatype_sql-266"><span class="linenos">266</span></a>
-</span><span id="Redshift.Generator.datatype_sql-267"><a href="#Redshift.Generator.datatype_sql-267"><span class="linenos">267</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.datatype_sql-237"><a href="#Redshift.Generator.datatype_sql-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Redshift.Generator.datatype_sql-238"><a href="#Redshift.Generator.datatype_sql-238"><span class="linenos">238</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator.datatype_sql-239"><a href="#Redshift.Generator.datatype_sql-239"><span class="linenos">239</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
+</span><span id="Redshift.Generator.datatype_sql-240"><a href="#Redshift.Generator.datatype_sql-240"><span class="linenos">240</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
+</span><span id="Redshift.Generator.datatype_sql-241"><a href="#Redshift.Generator.datatype_sql-241"><span class="linenos">241</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
+</span><span id="Redshift.Generator.datatype_sql-242"><a href="#Redshift.Generator.datatype_sql-242"><span class="linenos">242</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
+</span><span id="Redshift.Generator.datatype_sql-243"><a href="#Redshift.Generator.datatype_sql-243"><span class="linenos">243</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Redshift.Generator.datatype_sql-244"><a href="#Redshift.Generator.datatype_sql-244"><span class="linenos">244</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
+</span><span id="Redshift.Generator.datatype_sql-245"><a href="#Redshift.Generator.datatype_sql-245"><span class="linenos">245</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
+</span><span id="Redshift.Generator.datatype_sql-246"><a href="#Redshift.Generator.datatype_sql-246"><span class="linenos">246</span></a> <span class="n">precision</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;expressions&quot;</span><span class="p">)</span>
+</span><span id="Redshift.Generator.datatype_sql-247"><a href="#Redshift.Generator.datatype_sql-247"><span class="linenos">247</span></a>
+</span><span id="Redshift.Generator.datatype_sql-248"><a href="#Redshift.Generator.datatype_sql-248"><span class="linenos">248</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
+</span><span id="Redshift.Generator.datatype_sql-249"><a href="#Redshift.Generator.datatype_sql-249"><span class="linenos">249</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
+</span><span id="Redshift.Generator.datatype_sql-250"><a href="#Redshift.Generator.datatype_sql-250"><span class="linenos">250</span></a>
+</span><span id="Redshift.Generator.datatype_sql-251"><a href="#Redshift.Generator.datatype_sql-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2220,6 +2198,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="postgres.html#Postgres.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Redshift.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="postgres.html#Postgres.Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Redshift.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="postgres.html#Postgres.Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Redshift.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="postgres.html#Postgres.Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Redshift.Generator.SUPPORTED_JSON_PATH_PARTS" class="variable"><a href="postgres.html#Postgres.Generator.SUPPORTED_JSON_PATH_PARTS">SUPPORTED_JSON_PATH_PARTS</a></dd>
<dd id="Redshift.Generator.PROPERTIES_LOCATION" class="variable"><a href="postgres.html#Postgres.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
<dd id="Redshift.Generator.bracket_sql" class="function"><a href="postgres.html#Postgres.Generator.bracket_sql">bracket_sql</a></dd>
diff --git a/docs/sqlglot/dialects/snowflake.html b/docs/sqlglot/dialects/snowflake.html
index f3918d0..30b22bd 100644
--- a/docs/sqlglot/dialects/snowflake.html
+++ b/docs/sqlglot/dialects/snowflake.html
@@ -2668,7 +2668,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Snowflake.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -2707,7 +2707,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIMESTAMPS</span> =
<input id="Snowflake.Parser.TIMESTAMPS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Snowflake.Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Snowflake.Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;}</span>
</div>
@@ -3072,7 +3072,7 @@ Default: 3</li>
<div id="Snowflake.Tokenizer.COMMANDS" class="classattr">
<div class="attr variable">
<span class="name">COMMANDS</span> =
-<span class="default_value">{&lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;}</span>
</div>
@@ -3093,6 +3093,8 @@ Default: 3</li>
<dd id="Snowflake.Tokenizer.IDENTIFIERS" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIERS">IDENTIFIERS</a></dd>
<dd id="Snowflake.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Snowflake.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
+ <dd id="Snowflake.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Snowflake.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Snowflake.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Snowflake.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
<dd id="Snowflake.Tokenizer.NUMERIC_LITERALS" class="variable"><a href="../tokens.html#Tokenizer.NUMERIC_LITERALS">NUMERIC_LITERALS</a></dd>
@@ -4025,6 +4027,7 @@ Default: True</li>
<dd id="Snowflake.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Snowflake.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Snowflake.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Snowflake.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Snowflake.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Snowflake.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Snowflake.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
diff --git a/docs/sqlglot/dialects/spark.html b/docs/sqlglot/dialects/spark.html
index 9042d96..70adbe0 100644
--- a/docs/sqlglot/dialects/spark.html
+++ b/docs/sqlglot/dialects/spark.html
@@ -703,6 +703,8 @@
<dd id="Spark.Tokenizer.UNICODE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.UNICODE_STRINGS">UNICODE_STRINGS</a></dd>
<dd id="Spark.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Spark.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Spark.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Spark.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Spark.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Spark.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Spark.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -1185,6 +1187,7 @@ Default: True</li>
<dd id="Spark.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Spark.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Spark.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Spark.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Spark.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Spark.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Spark.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/spark2.html b/docs/sqlglot/dialects/spark2.html
index a73b4f8..487ff0b 100644
--- a/docs/sqlglot/dialects/spark2.html
+++ b/docs/sqlglot/dialects/spark2.html
@@ -1642,6 +1642,7 @@ Default: True</li>
<dd id="Spark2.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Spark2.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Spark2.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Spark2.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Spark2.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Spark2.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Spark2.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
@@ -2025,6 +2026,8 @@ Default: True</li>
<dd id="Spark2.Tokenizer.UNICODE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.UNICODE_STRINGS">UNICODE_STRINGS</a></dd>
<dd id="Spark2.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Spark2.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Spark2.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Spark2.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Spark2.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Spark2.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Spark2.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
diff --git a/docs/sqlglot/dialects/sqlite.html b/docs/sqlglot/dialects/sqlite.html
index 1fd5de8..bd96410 100644
--- a/docs/sqlglot/dialects/sqlite.html
+++ b/docs/sqlglot/dialects/sqlite.html
@@ -1037,6 +1037,8 @@ True means <code>a / b</code> is integer division if both <code>a</code> and <co
<dd id="SQLite.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="SQLite.Tokenizer.STRING_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a></dd>
<dd id="SQLite.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="SQLite.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="SQLite.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="SQLite.Tokenizer.KEYWORDS" class="variable"><a href="../tokens.html#Tokenizer.KEYWORDS">KEYWORDS</a></dd>
<dd id="SQLite.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="SQLite.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
@@ -1122,7 +1124,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="SQLite.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="SQLite.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="SQLite.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -1809,6 +1811,7 @@ Default: True</li>
<dd id="SQLite.Generator.SUPPORTS_SELECT_INTO" class="variable"><a href="../generator.html#Generator.SUPPORTS_SELECT_INTO">SUPPORTS_SELECT_INTO</a></dd>
<dd id="SQLite.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="SQLite.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="SQLite.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="SQLite.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="SQLite.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
<dd id="SQLite.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/starrocks.html b/docs/sqlglot/dialects/starrocks.html
index 7f651d1..73647c4 100644
--- a/docs/sqlglot/dialects/starrocks.html
+++ b/docs/sqlglot/dialects/starrocks.html
@@ -636,7 +636,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="StarRocks.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="StarRocks.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="StarRocks.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -960,6 +960,7 @@ Default: True</li>
<dd id="StarRocks.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="StarRocks.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="StarRocks.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="StarRocks.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="StarRocks.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
<dd id="StarRocks.Generator.SUPPORTED_JSON_PATH_PARTS" class="variable"><a href="../generator.html#Generator.SUPPORTED_JSON_PATH_PARTS">SUPPORTED_JSON_PATH_PARTS</a></dd>
<dd id="StarRocks.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/dialects/tableau.html b/docs/sqlglot/dialects/tableau.html
index ce0fc25..282617b 100644
--- a/docs/sqlglot/dialects/tableau.html
+++ b/docs/sqlglot/dialects/tableau.html
@@ -805,6 +805,7 @@ Default: True</li>
<dd id="Tableau.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Tableau.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Tableau.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Tableau.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Tableau.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Tableau.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Tableau.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
diff --git a/docs/sqlglot/dialects/teradata.html b/docs/sqlglot/dialects/teradata.html
index 86961de..1ab1387 100644
--- a/docs/sqlglot/dialects/teradata.html
+++ b/docs/sqlglot/dialects/teradata.html
@@ -1208,6 +1208,8 @@ True means <code>a / b</code> is integer division if both <code>a</code> and <co
<dd id="Teradata.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Teradata.Tokenizer.STRING_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a></dd>
<dd id="Teradata.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Teradata.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Teradata.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Teradata.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Teradata.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Teradata.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -1370,7 +1372,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CHARSET_TRANSLATORS</span> =
<input id="Teradata.Parser.CHARSET_TRANSLATORS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Parser.CHARSET_TRANSLATORS-view-value"></label><span class="default_value">{&#39;UNICODE_TO_LATIN&#39;, &#39;GRAPHIC_TO_UNICODE_PadSpace&#39;, &#39;KANJISJIS_TO_UNICODE&#39;, &#39;UNICODE_TO_UNICODE_Fullwidth&#39;, &#39;KANJI1_SBC_TO_UNICODE&#39;, &#39;UNICODE_TO_KANJI1_KanjiEBCDIC&#39;, &#39;UNICODE_TO_LOCALE&#39;, &#39;UNICODE_TO_GRAPHIC&#39;, &#39;KANJISJIS_TO_LATIN&#39;, &#39;LATIN_TO_KANJISJIS&#39;, &#39;UNICODE_TO_KANJI1_KANJISJIS&#39;, &#39;LOCALE_TO_UNICODE&#39;, &#39;UNICODE_TO_KANJISJIS&#39;, &#39;KANJI1_KanjiEBCDIC_TO_UNICODE&#39;, &#39;UNICODE_TO_UNICODE_FoldSpace&#39;, &#39;LATIN_TO_UNICODE&#39;, &#39;UNICODE_TO_GRAPHIC_PadGraphic&#39;, &#39;KANJI1_KANJISJIS_TO_UNICODE&#39;, &#39;UNICODE_TO_GRAPHIC_VarGraphic&#39;, &#39;UNICODE_TO_UNICODE_NFKD&#39;, &#39;LATIN_TO_GRAPHIC&#39;, &#39;UNICODE_TO_KANJI1_KanjiEUC&#39;, &#39;UNICODE_TO_UNICODE_NFC&#39;, &#39;UNICODE_TO_KANJI1_SBC&#39;, &#39;GRAPHIC_TO_KANJISJIS&#39;, &#39;UNICODE_TO_UNICODE_NFD&#39;, &#39;GRAPHIC_TO_LATIN&#39;, &#39;UNICODE_TO_UNICODE_Halfwidth&#39;, &#39;UNICODE_TO_UNICODE_NFKC&#39;, &#39;GRAPHIC_TO_UNICODE&#39;, &#39;KANJISJIS_TO_GRAPHIC&#39;, &#39;KANJI1_KanjiEUC_TO_UNICODE&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Parser.CHARSET_TRANSLATORS-view-value"></label><span class="default_value">{&#39;UNICODE_TO_UNICODE_Halfwidth&#39;, &#39;GRAPHIC_TO_LATIN&#39;, &#39;UNICODE_TO_GRAPHIC&#39;, &#39;UNICODE_TO_KANJI1_KANJISJIS&#39;, &#39;UNICODE_TO_LOCALE&#39;, &#39;UNICODE_TO_KANJI1_SBC&#39;, &#39;KANJISJIS_TO_LATIN&#39;, &#39;KANJI1_KanjiEUC_TO_UNICODE&#39;, &#39;UNICODE_TO_UNICODE_NFD&#39;, &#39;UNICODE_TO_KANJI1_KanjiEUC&#39;, &#39;LATIN_TO_KANJISJIS&#39;, &#39;KANJISJIS_TO_UNICODE&#39;, &#39;UNICODE_TO_LATIN&#39;, &#39;GRAPHIC_TO_UNICODE_PadSpace&#39;, &#39;UNICODE_TO_UNICODE_NFKC&#39;, &#39;LOCALE_TO_UNICODE&#39;, &#39;KANJI1_SBC_TO_UNICODE&#39;, &#39;GRAPHIC_TO_UNICODE&#39;, &#39;GRAPHIC_TO_KANJISJIS&#39;, &#39;KANJISJIS_TO_GRAPHIC&#39;, &#39;UNICODE_TO_KANJI1_KanjiEBCDIC&#39;, &#39;UNICODE_TO_UNICODE_Fullwidth&#39;, &#39;LATIN_TO_UNICODE&#39;, &#39;UNICODE_TO_KANJISJIS&#39;, &#39;UNICODE_TO_UNICODE_FoldSpace&#39;, &#39;LATIN_TO_GRAPHIC&#39;, &#39;UNICODE_TO_GRAPHIC_PadGraphic&#39;, &#39;KANJI1_KANJISJIS_TO_UNICODE&#39;, &#39;UNICODE_TO_GRAPHIC_VarGraphic&#39;, &#39;KANJI1_KanjiEBCDIC_TO_UNICODE&#39;, &#39;UNICODE_TO_UNICODE_NFC&#39;, &#39;UNICODE_TO_UNICODE_NFKD&#39;}</span>
</div>
@@ -1383,7 +1385,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="Teradata.Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -1434,7 +1436,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Teradata.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Teradata.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Teradata.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -2095,6 +2097,7 @@ Default: True</li>
<dd id="Teradata.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Teradata.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Teradata.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Teradata.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Teradata.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Teradata.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Teradata.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
diff --git a/docs/sqlglot/dialects/trino.html b/docs/sqlglot/dialects/trino.html
index 1e390dd..22818e3 100644
--- a/docs/sqlglot/dialects/trino.html
+++ b/docs/sqlglot/dialects/trino.html
@@ -1005,6 +1005,7 @@ Default: True</li>
<dd id="Trino.Generator.LIMIT_ONLY_LITERALS" class="variable"><a href="presto.html#Presto.Generator.LIMIT_ONLY_LITERALS">LIMIT_ONLY_LITERALS</a></dd>
<dd id="Trino.Generator.SUPPORTS_SINGLE_ARG_CONCAT" class="variable"><a href="presto.html#Presto.Generator.SUPPORTS_SINGLE_ARG_CONCAT">SUPPORTS_SINGLE_ARG_CONCAT</a></dd>
<dd id="Trino.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="presto.html#Presto.Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Trino.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="presto.html#Presto.Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Trino.Generator.PROPERTIES_LOCATION" class="variable"><a href="presto.html#Presto.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
<dd id="Trino.Generator.TYPE_MAPPING" class="variable"><a href="presto.html#Presto.Generator.TYPE_MAPPING">TYPE_MAPPING</a></dd>
<dd id="Trino.Generator.bracket_sql" class="function"><a href="presto.html#Presto.Generator.bracket_sql">bracket_sql</a></dd>
@@ -1064,6 +1065,8 @@ Default: True</li>
<dd id="Trino.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Trino.Tokenizer.STRING_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a></dd>
<dd id="Trino.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Trino.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Trino.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Trino.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Trino.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="Trino.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
diff --git a/docs/sqlglot/dialects/tsql.html b/docs/sqlglot/dialects/tsql.html
index 21330ef..fdc28c9 100644
--- a/docs/sqlglot/dialects/tsql.html
+++ b/docs/sqlglot/dialects/tsql.html
@@ -1402,7 +1402,7 @@
<section id="TRANSPILE_SAFE_NUMBER_FMT">
<div class="attr variable">
<span class="name">TRANSPILE_SAFE_NUMBER_FMT</span> =
-<span class="default_value">{&#39;N&#39;, &#39;C&#39;}</span>
+<span class="default_value">{&#39;C&#39;, &#39;N&#39;}</span>
</div>
@@ -1427,7 +1427,7 @@
<div class="attr variable">
<span class="name">BIT_TYPES</span> =
<input id="BIT_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="BIT_TYPES-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="BIT_TYPES-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;}</span>
</div>
@@ -1439,7 +1439,7 @@
<section id="DATEPART_ONLY_FORMATS">
<div class="attr variable">
<span class="name">DATEPART_ONLY_FORMATS</span> =
-<span class="default_value">{&#39;HOUR&#39;, &#39;QUARTER&#39;, &#39;DW&#39;}</span>
+<span class="default_value">{&#39;QUARTER&#39;, &#39;DW&#39;, &#39;HOUR&#39;}</span>
</div>
@@ -2712,7 +2712,7 @@ True means <code>a / b</code> is integer division if both <code>a</code> and <co
<div id="TSQL.Tokenizer.VAR_SINGLE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">VAR_SINGLE_TOKENS</span> =
-<span class="default_value">{&#39;@&#39;, &#39;#&#39;, &#39;$&#39;}</span>
+<span class="default_value">{&#39;#&#39;, &#39;@&#39;, &#39;$&#39;}</span>
</div>
@@ -2747,6 +2747,8 @@ True means <code>a / b</code> is integer division if both <code>a</code> and <co
<dd id="TSQL.Tokenizer.UNICODE_STRINGS" class="variable"><a href="../tokens.html#Tokenizer.UNICODE_STRINGS">UNICODE_STRINGS</a></dd>
<dd id="TSQL.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="TSQL.Tokenizer.STRING_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.STRING_ESCAPES">STRING_ESCAPES</a></dd>
+ <dd id="TSQL.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="TSQL.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="TSQL.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="TSQL.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="TSQL.Tokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -3069,7 +3071,7 @@ Default: 3</li>
<div id="TSQL.Parser.JOIN_HINTS" class="classattr">
<div class="attr variable">
<span class="name">JOIN_HINTS</span> =
-<span class="default_value">{&#39;REMOTE&#39;, &#39;HASH&#39;, &#39;LOOP&#39;, &#39;MERGE&#39;}</span>
+<span class="default_value">{&#39;HASH&#39;, &#39;LOOP&#39;, &#39;MERGE&#39;, &#39;REMOTE&#39;}</span>
</div>
@@ -3081,7 +3083,7 @@ Default: 3</li>
<div id="TSQL.Parser.VAR_LENGTH_DATATYPES" class="classattr">
<div class="attr variable">
<span class="name">VAR_LENGTH_DATATYPES</span> =
-<span class="default_value">{&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;}</span>
+<span class="default_value">{&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}</span>
</div>
@@ -3094,7 +3096,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RETURNS_TABLE_TOKENS</span> =
<input id="TSQL.Parser.RETURNS_TABLE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Parser.RETURNS_TABLE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Parser.RETURNS_TABLE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;}</span>
</div>
@@ -3168,7 +3170,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="TSQL.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -3832,7 +3834,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">EXPRESSIONS_WITHOUT_NESTED_CTES</span> =
<input id="TSQL.Generator.EXPRESSIONS_WITHOUT_NESTED_CTES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TSQL.Generator.EXPRESSIONS_WITHOUT_NESTED_CTES-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Union">sqlglot.expressions.Union</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Subquery">sqlglot.expressions.Subquery</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Update">sqlglot.expressions.Update</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Delete">sqlglot.expressions.Delete</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TSQL.Generator.EXPRESSIONS_WITHOUT_NESTED_CTES-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Update">sqlglot.expressions.Update</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Merge">sqlglot.expressions.Merge</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Union">sqlglot.expressions.Union</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Insert">sqlglot.expressions.Insert</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Delete">sqlglot.expressions.Delete</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Subquery">sqlglot.expressions.Subquery</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;}</span>
</div>
@@ -4491,6 +4493,7 @@ Default: True</li>
<dd id="TSQL.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="TSQL.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="TSQL.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="TSQL.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="TSQL.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="TSQL.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
<dd id="TSQL.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
diff --git a/docs/sqlglot/executor/python.html b/docs/sqlglot/executor/python.html
index dd4ee1e..f3da983 100644
--- a/docs/sqlglot/executor/python.html
+++ b/docs/sqlglot/executor/python.html
@@ -214,7 +214,7 @@
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.executor.context</span> <span class="kn">import</span> <span class="n">Context</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">from</span> <span class="nn">sqlglot.executor.env</span> <span class="kn">import</span> <span class="n">ENV</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">from</span> <span class="nn">sqlglot.executor.table</span> <span class="kn">import</span> <span class="n">RowReader</span><span class="p">,</span> <span class="n">Table</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">csv_reader</span><span class="p">,</span> <span class="n">subclasses</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">csv_reader</span><span class="p">,</span> <span class="n">ensure_list</span><span class="p">,</span> <span class="n">subclasses</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="k">class</span> <span class="nc">PythonExecutor</span><span class="p">:</span>
@@ -573,7 +573,7 @@
</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</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">Func</span><span class="p">)</span> <span class="ow">and</span> <span class="n">e</span><span class="o">.</span><span class="n">is_var_len_args</span><span class="p">:</span>
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="o">*</span><span class="n">head</span><span class="p">,</span> <span class="n">tail</span> <span class="o">=</span> <span class="n">values</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</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">e</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">head</span><span class="p">,</span> <span class="o">*</span><span class="n">tail</span><span class="p">)</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</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">e</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">head</span><span class="p">,</span> <span class="o">*</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">tail</span><span class="p">))</span>
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</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">e</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">)</span>
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
@@ -2015,6 +2015,8 @@
<dd id="Python.Tokenizer.IDENTIFIER_ESCAPES" class="variable"><a href="../tokens.html#Tokenizer.IDENTIFIER_ESCAPES">IDENTIFIER_ESCAPES</a></dd>
<dd id="Python.Tokenizer.QUOTES" class="variable"><a href="../tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="Python.Tokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="../tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="Python.Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="Python.Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="../tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="Python.Tokenizer.KEYWORDS" class="variable"><a href="../tokens.html#Tokenizer.KEYWORDS">KEYWORDS</a></dd>
<dd id="Python.Tokenizer.WHITE_SPACE" class="variable"><a href="../tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="Python.Tokenizer.COMMANDS" class="variable"><a href="../tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
@@ -2205,6 +2207,7 @@ Default: True</li>
<dd id="Python.Generator.SUPPORTS_UNLOGGED_TABLES" class="variable"><a href="../generator.html#Generator.SUPPORTS_UNLOGGED_TABLES">SUPPORTS_UNLOGGED_TABLES</a></dd>
<dd id="Python.Generator.SUPPORTS_CREATE_TABLE_LIKE" class="variable"><a href="../generator.html#Generator.SUPPORTS_CREATE_TABLE_LIKE">SUPPORTS_CREATE_TABLE_LIKE</a></dd>
<dd id="Python.Generator.LIKE_PROPERTY_INSIDE_SCHEMA" class="variable"><a href="../generator.html#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a></dd>
+ <dd id="Python.Generator.MULTI_ARG_DISTINCT" class="variable"><a href="../generator.html#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a></dd>
<dd id="Python.Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="variable"><a href="../generator.html#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a></dd>
<dd id="Python.Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED" class="variable"><a href="../generator.html#Generator.JSON_PATH_BRACKETED_KEY_SUPPORTED">JSON_PATH_BRACKETED_KEY_SUPPORTED</a></dd>
<dd id="Python.Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE" class="variable"><a href="../generator.html#Generator.JSON_PATH_SINGLE_QUOTE_ESCAPE">JSON_PATH_SINGLE_QUOTE_ESCAPE</a></dd>
diff --git a/docs/sqlglot/expressions.html b/docs/sqlglot/expressions.html
index a1e3fc8..814c3e5 100644
--- a/docs/sqlglot/expressions.html
+++ b/docs/sqlglot/expressions.html
@@ -5739,6 +5739,9 @@
<a class="variable" href="#JSONExtract.arg_types">arg_types</a>
</li>
<li>
+ <a class="variable" href="#JSONExtract.is_var_len_args">is_var_len_args</a>
+ </li>
+ <li>
<a class="variable" href="#JSONExtract.output_name">output_name</a>
</li>
<li>
@@ -5754,6 +5757,9 @@
<a class="variable" href="#JSONExtractScalar.arg_types">arg_types</a>
</li>
<li>
+ <a class="variable" href="#JSONExtractScalar.is_var_len_args">is_var_len_args</a>
+ </li>
+ <li>
<a class="variable" href="#JSONExtractScalar.output_name">output_name</a>
</li>
<li>
@@ -8878,7 +8884,7 @@ SQL expressions, such as <code><a href="#select">select</a></code>.</p>
</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a>
</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</span></a>
</span><span id="L-1798"><a href="#L-1798"><span class="linenos">1798</span></a><span class="k">class</span> <span class="nc">Limit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</span></a>
</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</span></a>
</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</span></a><span class="k">class</span> <span class="nc">Literal</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
@@ -9051,7 +9057,7 @@ SQL expressions, such as <code><a href="#select">select</a></code>.</p>
</span><span id="L-1969"><a href="#L-1969"><span class="linenos">1969</span></a>
</span><span id="L-1970"><a href="#L-1970"><span class="linenos">1970</span></a>
</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</span></a><span class="k">class</span> <span class="nc">Offset</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</span></a>
</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a>
</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</span></a><span class="k">class</span> <span class="nc">Order</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
@@ -12099,19 +12105,19 @@ SQL expressions, such as <code><a href="#select">select</a></code>.</p>
</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a>
</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a>
</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a><span class="k">class</span> <span class="nc">JSONExtract</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="c1"># MySQL and SQLite support a variant of JSON_EXTRACT where you can have multiple JSON</span>
-</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="c1"># paths and you get back a list of values. These paths will be stored in `expressions`</span>
-</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT&quot;</span><span class="p">]</span>
-</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a>
-</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="nd">@property</span>
-</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">output_name</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT&quot;</span><span class="p">]</span>
+</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a>
+</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a> <span class="nd">@property</span>
+</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">output_name</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a>
</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a>
-</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a>
-</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;null_if_invalid&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT_SCALAR&quot;</span><span class="p">]</span>
+</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
+</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT_SCALAR&quot;</span><span class="p">]</span>
+</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-5033"><a href="#L-5033"><span class="linenos">5033</span></a>
</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="nd">@property</span>
</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
@@ -29837,7 +29843,7 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Limit"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Limit-1799"><a href="#Limit-1799"><span class="linenos">1799</span></a><span class="k">class</span> <span class="nc">Limit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Limit-1800"><a href="#Limit-1800"><span class="linenos">1800</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Limit-1800"><a href="#Limit-1800"><span class="linenos">1800</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -29846,7 +29852,7 @@ Otherwise, this resets the expressions.</li>
<div id="Limit.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: False, &#39;expression&#39;: True, &#39;offset&#39;: False}</span>
+<span class="default_value">{&#39;this&#39;: False, &#39;expression&#39;: True, &#39;offset&#39;: False, &#39;expressions&#39;: False}</span>
</div>
@@ -31051,7 +31057,7 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Offset"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Offset-1972"><a href="#Offset-1972"><span class="linenos">1972</span></a><span class="k">class</span> <span class="nc">Offset</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Offset-1973"><a href="#Offset-1973"><span class="linenos">1973</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="Offset-1973"><a href="#Offset-1973"><span class="linenos">1973</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -31060,7 +31066,7 @@ Otherwise, this resets the expression.</li>
<div id="Offset.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: False, &#39;expression&#39;: True}</span>
+<span class="default_value">{&#39;this&#39;: False, &#39;expression&#39;: True, &#39;expressions&#39;: False}</span>
</div>
@@ -47900,7 +47906,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">TEXT_TYPES</span> =
<input id="DataType.TEXT_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.TEXT_TYPES-view-value"></label><span class="default_value">{&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.TEXT_TYPES-view-value"></label><span class="default_value">{&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}</span>
</div>
@@ -47913,7 +47919,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">INTEGER_TYPES</span> =
<input id="DataType.INTEGER_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.INTEGER_TYPES-view-value"></label><span class="default_value">{&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.INTEGER_TYPES-view-value"></label><span class="default_value">{&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;}</span>
</div>
@@ -47938,7 +47944,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">NUMERIC_TYPES</span> =
<input id="DataType.NUMERIC_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.NUMERIC_TYPES-view-value"></label><span class="default_value">{&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.NUMERIC_TYPES-view-value"></label><span class="default_value">{&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;}</span>
</div>
@@ -47951,7 +47957,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr variable">
<span class="name">TEMPORAL_TYPES</span> =
<input id="DataType.TEMPORAL_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DataType.TEMPORAL_TYPES-view-value"></label><span class="default_value">{&lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.TIME: &#39;TIME&#39;&gt;, &lt;Type.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;Type.DATE: &#39;DATE&#39;&gt;, &lt;Type.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;Type.DATE32: &#39;DATE32&#39;&gt;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;, &lt;Type.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DataType.TEMPORAL_TYPES-view-value"></label><span class="default_value">{&lt;Type.DATE: &#39;DATE&#39;&gt;, &lt;Type.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;Type.DATE32: &#39;DATE32&#39;&gt;, &lt;Type.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;Type.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;, &lt;Type.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;Type.TIME: &#39;TIME&#39;&gt;}</span>
</div>
@@ -75298,14 +75304,13 @@ array<int> != array<float>.</p>
</div>
<a class="headerlink" href="#JSONExtract"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtract-5020"><a href="#JSONExtract-5020"><span class="linenos">5020</span></a><span class="k">class</span> <span class="nc">JSONExtract</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="JSONExtract-5021"><a href="#JSONExtract-5021"><span class="linenos">5021</span></a> <span class="c1"># MySQL and SQLite support a variant of JSON_EXTRACT where you can have multiple JSON</span>
-</span><span id="JSONExtract-5022"><a href="#JSONExtract-5022"><span class="linenos">5022</span></a> <span class="c1"># paths and you get back a list of values. These paths will be stored in `expressions`</span>
-</span><span id="JSONExtract-5023"><a href="#JSONExtract-5023"><span class="linenos">5023</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="JSONExtract-5024"><a href="#JSONExtract-5024"><span class="linenos">5024</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT&quot;</span><span class="p">]</span>
-</span><span id="JSONExtract-5025"><a href="#JSONExtract-5025"><span class="linenos">5025</span></a>
-</span><span id="JSONExtract-5026"><a href="#JSONExtract-5026"><span class="linenos">5026</span></a> <span class="nd">@property</span>
-</span><span id="JSONExtract-5027"><a href="#JSONExtract-5027"><span class="linenos">5027</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="JSONExtract-5028"><a href="#JSONExtract-5028"><span class="linenos">5028</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">output_name</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="JSONExtract-5021"><a href="#JSONExtract-5021"><span class="linenos">5021</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="JSONExtract-5022"><a href="#JSONExtract-5022"><span class="linenos">5022</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT&quot;</span><span class="p">]</span>
+</span><span id="JSONExtract-5023"><a href="#JSONExtract-5023"><span class="linenos">5023</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="JSONExtract-5024"><a href="#JSONExtract-5024"><span class="linenos">5024</span></a>
+</span><span id="JSONExtract-5025"><a href="#JSONExtract-5025"><span class="linenos">5025</span></a> <span class="nd">@property</span>
+</span><span id="JSONExtract-5026"><a href="#JSONExtract-5026"><span class="linenos">5026</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="JSONExtract-5027"><a href="#JSONExtract-5027"><span class="linenos">5027</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">output_name</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -75323,6 +75328,18 @@ array<int> != array<float>.</p>
</div>
+ <div id="JSONExtract.is_var_len_args" class="classattr">
+ <div class="attr variable">
+ <span class="name">is_var_len_args</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#JSONExtract.is_var_len_args"></a>
+
+
+
+ </div>
<div id="JSONExtract.output_name" class="classattr">
<input id="JSONExtract.output_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr variable">
@@ -75332,9 +75349,9 @@ array<int> != array<float>.</p>
</div>
<a class="headerlink" href="#JSONExtract.output_name"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtract.output_name-5026"><a href="#JSONExtract.output_name-5026"><span class="linenos">5026</span></a> <span class="nd">@property</span>
-</span><span id="JSONExtract.output_name-5027"><a href="#JSONExtract.output_name-5027"><span class="linenos">5027</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="JSONExtract.output_name-5028"><a href="#JSONExtract.output_name-5028"><span class="linenos">5028</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">output_name</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtract.output_name-5025"><a href="#JSONExtract.output_name-5025"><span class="linenos">5025</span></a> <span class="nd">@property</span>
+</span><span id="JSONExtract.output_name-5026"><a href="#JSONExtract.output_name-5026"><span class="linenos">5026</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="JSONExtract.output_name-5027"><a href="#JSONExtract.output_name-5027"><span class="linenos">5027</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">output_name</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -75448,8 +75465,7 @@ array<int> != array<float>.</p>
</div>
<div><dt><a href="#Func">Func</a></dt>
- <dd id="JSONExtract.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
- <dd id="JSONExtract.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="JSONExtract.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
<dd id="JSONExtract.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
<dd id="JSONExtract.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
<dd id="JSONExtract.default_parser_mappings" class="function"><a href="#Func.default_parser_mappings">default_parser_mappings</a></dd>
@@ -75469,9 +75485,10 @@ array<int> != array<float>.</p>
</div>
<a class="headerlink" href="#JSONExtractScalar"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtractScalar-5031"><a href="#JSONExtractScalar-5031"><span class="linenos">5031</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
-</span><span id="JSONExtractScalar-5032"><a href="#JSONExtractScalar-5032"><span class="linenos">5032</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;null_if_invalid&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="JSONExtractScalar-5033"><a href="#JSONExtractScalar-5033"><span class="linenos">5033</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT_SCALAR&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtractScalar-5030"><a href="#JSONExtractScalar-5030"><span class="linenos">5030</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Func</span><span class="p">):</span>
+</span><span id="JSONExtractScalar-5031"><a href="#JSONExtractScalar-5031"><span class="linenos">5031</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="JSONExtractScalar-5032"><a href="#JSONExtractScalar-5032"><span class="linenos">5032</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_EXTRACT_SCALAR&quot;</span><span class="p">]</span>
+</span><span id="JSONExtractScalar-5033"><a href="#JSONExtractScalar-5033"><span class="linenos">5033</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="JSONExtractScalar-5034"><a href="#JSONExtractScalar-5034"><span class="linenos">5034</span></a>
</span><span id="JSONExtractScalar-5035"><a href="#JSONExtractScalar-5035"><span class="linenos">5035</span></a> <span class="nd">@property</span>
</span><span id="JSONExtractScalar-5036"><a href="#JSONExtractScalar-5036"><span class="linenos">5036</span></a> <span class="k">def</span> <span class="nf">output_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
@@ -75484,7 +75501,7 @@ array<int> != array<float>.</p>
<div id="JSONExtractScalar.arg_types" class="classattr">
<div class="attr variable">
<span class="name">arg_types</span> =
-<span class="default_value">{&#39;this&#39;: True, &#39;expression&#39;: True, &#39;null_if_invalid&#39;: False}</span>
+<span class="default_value">{&#39;this&#39;: True, &#39;expression&#39;: True, &#39;expressions&#39;: False}</span>
</div>
@@ -75493,6 +75510,18 @@ array<int> != array<float>.</p>
</div>
+ <div id="JSONExtractScalar.is_var_len_args" class="classattr">
+ <div class="attr variable">
+ <span class="name">is_var_len_args</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#JSONExtractScalar.is_var_len_args"></a>
+
+
+
+ </div>
<div id="JSONExtractScalar.output_name" class="classattr">
<input id="JSONExtractScalar.output_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr variable">
@@ -75618,8 +75647,7 @@ array<int> != array<float>.</p>
</div>
<div><dt><a href="#Func">Func</a></dt>
- <dd id="JSONExtractScalar.is_var_len_args" class="variable"><a href="#Func.is_var_len_args">is_var_len_args</a></dd>
- <dd id="JSONExtractScalar.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="JSONExtractScalar.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
<dd id="JSONExtractScalar.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
<dd id="JSONExtractScalar.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
<dd id="JSONExtractScalar.default_parser_mappings" class="function"><a href="#Func.default_parser_mappings">default_parser_mappings</a></dd>
diff --git a/docs/sqlglot/generator.html b/docs/sqlglot/generator.html
index 5270ff7..a015dcf 100644
--- a/docs/sqlglot/generator.html
+++ b/docs/sqlglot/generator.html
@@ -205,6 +205,9 @@
<a class="variable" href="#Generator.LIKE_PROPERTY_INSIDE_SCHEMA">LIKE_PROPERTY_INSIDE_SCHEMA</a>
</li>
<li>
+ <a class="variable" href="#Generator.MULTI_ARG_DISTINCT">MULTI_ARG_DISTINCT</a>
+ </li>
+ <li>
<a class="variable" href="#Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION">JSON_TYPE_REQUIRED_FOR_EXTRACTION</a>
</li>
<li>
@@ -1509,3109 +1512,3123 @@
</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a> <span class="c1"># Whether or not the LikeProperty needs to be specified inside of the schema clause</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">False</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="c1"># Whether or not the JSON extraction operators expect a value of type JSON</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a>
-</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="c1"># Whether or not bracketed keys like [&quot;foo&quot;] are supported in JSON paths</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a>
-</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a> <span class="c1"># Whether or not to escape keys using single quotes in JSON paths</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a>
-</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="c1"># The JSONPathPart expressions supported by this dialect</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="n">ALL_JSON_PATH_PARTS</span><span class="o">.</span><span class="n">copy</span><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">TYPE_MAPPING</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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="p">}</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="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&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;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&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">TIME_PART_SINGULARS</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="s2">&quot;MICROSECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">,</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="s2">&quot;SECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">,</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="s2">&quot;MINUTES&quot;</span><span class="p">:</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">,</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="s2">&quot;HOURS&quot;</span><span class="p">:</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">,</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a> <span class="s2">&quot;DAYS&quot;</span><span class="p">:</span> <span class="s2">&quot;DAY&quot;</span><span class="p">,</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="s2">&quot;WEEKS&quot;</span><span class="p">:</span> <span class="s2">&quot;WEEK&quot;</span><span class="p">,</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="s2">&quot;MONTHS&quot;</span><span class="p">:</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">,</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="s2">&quot;QUARTERS&quot;</span><span class="p">:</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="s2">&quot;YEARS&quot;</span><span class="p">:</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">,</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">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</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><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="c1"># Whether or not DISTINCT can be followed by multiple args in an AggFunc. If not, it will be</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="c1"># transpiled into a series of CASE-WHEN-ELSE, ultimately using a tuple conseisting of the args</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a>
+</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="c1"># Whether or not the JSON extraction operators expect a value of type JSON</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">False</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="c1"># Whether or not bracketed keys like [&quot;foo&quot;] are supported in JSON paths</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a>
+</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="c1"># Whether or not to escape keys using single quotes in JSON paths</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a>
+</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="c1"># The JSONPathPart expressions supported by this dialect</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="n">ALL_JSON_PATH_PARTS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a>
+</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="p">}</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a>
+</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="p">}</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a>
+</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="n">TIME_PART_SINGULARS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a> <span class="s2">&quot;MICROSECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">,</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="s2">&quot;SECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">,</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="s2">&quot;MINUTES&quot;</span><span class="p">:</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">,</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="s2">&quot;HOURS&quot;</span><span class="p">:</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">,</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="s2">&quot;DAYS&quot;</span><span class="p">:</span> <span class="s2">&quot;DAY&quot;</span><span class="p">,</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a> <span class="s2">&quot;WEEKS&quot;</span><span class="p">:</span> <span class="s2">&quot;WEEK&quot;</span><span class="p">,</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="s2">&quot;MONTHS&quot;</span><span class="p">:</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">,</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a> <span class="s2">&quot;QUARTERS&quot;</span><span class="p">:</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">,</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a> <span class="s2">&quot;YEARS&quot;</span><span class="p">:</span> <span class="s2">&quot;YEAR&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><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="n">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a>
-</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</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">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InheritsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OutputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SampleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransformModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</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">POST_CREATE</span><span class="p">,</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a> <span class="p">}</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="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</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="c1"># Expressions whose comments are separated from them for better formatting</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</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">Drop</span><span class="p">,</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">From</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">Insert</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">Join</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">Select</span><span class="p">,</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">,</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a> <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="c1"># Expressions that should not have their comments generated in maybe_comment</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="n">EXCLUDE_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</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">Binary</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">Union</span><span class="p">,</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="p">)</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a>
-</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</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">Column</span><span class="p">,</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="p">)</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a>
-</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="c1"># Expressions that need to have all CTEs under them bubbled up to them</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a>
-</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="n">KEY_VALUE_DEFINITIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">)</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a>
-</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="n">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</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="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a>
+</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</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">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InheritsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OutputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SampleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransformModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</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">POST_CREATE</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="p">}</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a>
+</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a>
+</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="c1"># Expressions whose comments are separated from them for better formatting</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</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">Create</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">Delete</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">Drop</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</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">Update</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">Where</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">With</span><span class="p">,</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a> <span class="p">)</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a>
+</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="c1"># Expressions that should not have their comments generated in maybe_comment</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="n">EXCLUDE_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</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">Binary</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">Union</span><span class="p">,</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a> <span class="p">)</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a>
+</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="p">)</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="c1"># Expressions that need to have all CTEs under them bubbled up to them</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a>
-</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="s2">&quot;max_unsupported&quot;</span><span class="p">,</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a> <span class="s2">&quot;leading_comma&quot;</span><span class="p">,</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="s2">&quot;max_text_width&quot;</span><span class="p">,</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="p">)</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a>
-</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="p">):</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</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="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a>
-</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a> <span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="p">)</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="p">)</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a>
-</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="n">KEY_VALUE_DEFINITIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">)</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">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a>
+</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="s2">&quot;max_unsupported&quot;</span><span class="p">,</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;leading_comma&quot;</span><span class="p">,</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="s2">&quot;max_text_width&quot;</span><span class="p">,</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="p">)</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a>
+</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a> <span class="p">):</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a>
+</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a>
+</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="p">)</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a>
+</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="p">)</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="p">)</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a>
-</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a><span class="sd"> Args:</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a><span class="sd"> expression: The syntax tree.</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a><span class="sd"> copy: Whether or not to copy the expression. The generator performs mutations so</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a><span class="sd"> it is safer to copy.</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a>
-</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a><span class="sd"> Returns:</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a>
-</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a>
-</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="n">sql</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="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a>
-</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a>
-</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a>
-</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a>
-</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a>
-</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Apply generic preprocessing transformations to a given expression.&quot;&quot;&quot;</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">expression</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">))</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="p">):</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">move_ctes_to_top_level</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a>
-</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">move_ctes_to_top_level</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a>
-</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENSURE_BOOLS</span><span class="p">:</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">ensure_bools</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a>
-</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ensure_bools</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a>
-</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a>
+</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a><span class="sd"> Args:</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a><span class="sd"> expression: The syntax tree.</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a><span class="sd"> copy: Whether or not to copy the expression. The generator performs mutations so</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a><span class="sd"> it is safer to copy.</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a>
+</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a><span class="sd"> Returns:</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a>
+</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a>
+</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a> <span class="n">sql</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="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a>
+</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a>
+</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a>
+</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a>
+</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a>
+</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Apply generic preprocessing transformations to a given expression.&quot;&quot;&quot;</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">expression</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">))</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="p">):</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">move_ctes_to_top_level</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a>
+</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">move_ctes_to_top_level</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a>
+</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENSURE_BOOLS</span><span class="p">:</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">ensure_bools</span>
</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a>
-</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a>
-</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a>
-</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a>
-</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="k">return</span> <span class="n">comment</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a>
-</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="p">)</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a>
-</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXCLUDE_COMMENTS</span><span class="p">):</span>
-</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a>
-</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
-</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="p">)</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ensure_bools</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a>
+</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a>
+</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a>
+</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a>
+</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a>
+</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="k">return</span> <span class="n">comment</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a>
+</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="p">)</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a>
+</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXCLUDE_COMMENTS</span><span class="p">):</span>
+</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a>
-</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
-</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a>
-</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
-</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="p">)</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a>
-</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a>
-</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
-</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="p">(</span>
-</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a> <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><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
-</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="p">),</span>
-</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
-</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="p">)</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a>
-</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
-</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="k">return</span> <span class="n">result</span>
-</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a>
-</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="k">return</span> <span class="n">name</span>
-</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a>
-</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
-</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
-</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a>
-</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a>
-</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="p">(</span>
-</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="n">line</span>
-</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="p">)</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="p">)</span>
-</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a>
-</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
-</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
-</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a>
-</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a>
-</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a> <span class="n">value</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="n">key</span><span class="p">)</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a>
-</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a>
-</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a>
-</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
-</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Func</span><span class="p">):</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Property</span><span class="p">):</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a>
-</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a>
-</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="k">def</span> <span class="nf">uncache_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">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="n">table</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-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a>
-</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="k">def</span> <span class="nf">cache_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">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="n">table</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-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="n">options</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;options&quot;</span><span class="p">)</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</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">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</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="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="n">sql</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-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a>
-</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="k">def</span> <span class="nf">characterset_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">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </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-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</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-722"><a href="#L-722"><span class="linenos"> 722</span></a>
-</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a>
-</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
-</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="p">)</span>
+</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a>
+</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a>
+</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="p">)</span>
+</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a>
+</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a>
+</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
+</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="p">(</span>
+</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <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><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
+</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="p">),</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="p">)</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a>
+</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
+</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a>
+</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="k">return</span> <span class="n">name</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a>
+</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
+</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a>
+</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a>
+</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="p">(</span>
+</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="n">line</span>
+</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="p">)</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="p">)</span>
+</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a>
+</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
+</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a>
+</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a>
+</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
+</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="n">value</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="n">key</span><span class="p">)</span>
+</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a>
+</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a>
+</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
+</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a>
+</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Func</span><span class="p">):</span>
+</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Property</span><span class="p">):</span>
+</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a>
+</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a>
+</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="k">def</span> <span class="nf">uncache_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">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="n">table</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-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a>
+</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="k">def</span> <span class="nf">cache_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">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="n">table</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-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="n">options</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;options&quot;</span><span class="p">)</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</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">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</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="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="n">sql</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-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="k">def</span> <span class="nf">characterset_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">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </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-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</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-726"><a href="#L-726"><span class="linenos"> 726</span></a>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a>
-</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <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;catalog&quot;</span><span class="p">),</span>
-</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <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;db&quot;</span><span class="p">),</span>
-</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <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-736"><a href="#L-736"><span class="linenos"> 736</span></a> <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;this&quot;</span><span class="p">),</span>
-</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="p">)</span>
-</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="p">)</span>
-</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a>
-</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="k">def</span> <span class="nf">columnposition_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">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="n">column</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-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPUTED_COLUMN_WITH_TYPE</span><span class="p">:</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a>
-</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a>
-</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="k">def</span> <span class="nf">columnconstraint_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">ColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="n">kind_sql</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">kind_sql</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_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">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="k">elif</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;persisted&quot;</span><span class="p">):</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
-</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a>
-</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_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">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a>
-</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a>
-</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <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">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a>
-</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">start</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;start&quot;</span><span class="p">)</span>
-</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="n">increment</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;increment&quot;</span><span class="p">)</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="n">minvalue</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;minvalue&quot;</span><span class="p">)</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="n">maxvalue</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;maxvalue&quot;</span><span class="p">)</span>
-</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="n">cycle</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;cycle&quot;</span><span class="p">)</span>
-</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a>
-</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
-</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
+</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a>
+</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <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;catalog&quot;</span><span class="p">),</span>
+</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <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;db&quot;</span><span class="p">),</span>
+</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <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-740"><a href="#L-740"><span class="linenos"> 740</span></a> <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;this&quot;</span><span class="p">),</span>
+</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="p">)</span>
+</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="p">)</span>
+</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a>
+</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a>
+</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="k">def</span> <span class="nf">columnposition_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">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a>
+</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="n">column</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-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a>
+</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPUTED_COLUMN_WITH_TYPE</span><span class="p">:</span>
+</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a>
+</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="k">def</span> <span class="nf">columnconstraint_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">ColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">kind_sql</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">kind_sql</span>
+</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a>
+</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_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">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
+</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
+</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="k">elif</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;persisted&quot;</span><span class="p">):</span>
+</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a>
+</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
+</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a>
+</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_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">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a>
+</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a>
+</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <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">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a>
+</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="n">start</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;start&quot;</span><span class="p">)</span>
+</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="n">increment</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;increment&quot;</span><span class="p">)</span>
+</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="n">minvalue</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;minvalue&quot;</span><span class="p">)</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="n">maxvalue</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;maxvalue&quot;</span><span class="p">)</span>
+</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="n">cycle</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;cycle&quot;</span><span class="p">)</span>
+</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a>
-</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
-</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a>
-</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="n">expr</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-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a>
-</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="k">def</span> <span class="nf">generatedasrowcolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <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">GeneratedAsRowColumnConstraint</span>
-</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="n">start</span> <span class="o">=</span> <span class="s2">&quot;START&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;END&quot;</span>
-</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="s2">&quot; HIDDEN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hidden&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED ALWAYS AS ROW </span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">hidden</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a>
-</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="k">def</span> <span class="nf">periodforsystemtimeconstraint_sql</span><span class="p">(</span>
-</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <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">PeriodForSystemTimeConstraint</span>
-</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PERIOD FOR SYSTEM_TIME (</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a>
-</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_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">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
-</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a>
-</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="k">def</span> <span class="nf">transformcolumnconstraint_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">TransformColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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-840"><a href="#L-840"><span class="linenos"> 840</span></a>
-</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_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">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
-</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="k">return</span> <span class="s2">&quot;PRIMARY KEY&quot;</span>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a>
-</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_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">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="n">index_type</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;index_type&quot;</span><span class="p">)</span>
-</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a>
-</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a>
-</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="n">properties</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;properties&quot;</span><span class="p">)</span>
-</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
-</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a>
-</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
-</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
-</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
-</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="p">):</span>
-</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
-</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
-</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="p">]</span>
-</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="p">)</span>
-</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="p">)</span>
-</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a>
-</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="n">end</span> <span class="o">=</span> <span class="s2">&quot; END&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;end&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="n">expression_sql</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-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
-</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
+</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a>
+</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
+</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a>
+</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="n">expr</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-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
+</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a>
+</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a>
+</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="k">def</span> <span class="nf">generatedasrowcolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <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">GeneratedAsRowColumnConstraint</span>
+</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="n">start</span> <span class="o">=</span> <span class="s2">&quot;START&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;END&quot;</span>
+</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="s2">&quot; HIDDEN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hidden&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED ALWAYS AS ROW </span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">hidden</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a>
+</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="k">def</span> <span class="nf">periodforsystemtimeconstraint_sql</span><span class="p">(</span>
+</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <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">PeriodForSystemTimeConstraint</span>
+</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PERIOD FOR SYSTEM_TIME (</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a>
+</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_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">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
+</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a>
+</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="k">def</span> <span class="nf">transformcolumnconstraint_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">TransformColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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-844"><a href="#L-844"><span class="linenos"> 844</span></a>
+</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_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">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="k">return</span> <span class="s2">&quot;PRIMARY KEY&quot;</span>
+</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a>
+</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_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">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="n">index_type</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;index_type&quot;</span><span class="p">)</span>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a>
+</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a>
+</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="n">properties</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;properties&quot;</span><span class="p">)</span>
+</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a>
+</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="p">):</span>
+</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
+</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="p">]</span>
+</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="p">)</span>
+</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="p">)</span>
+</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="n">end</span> <span class="o">=</span> <span class="s2">&quot; END&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;end&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a>
-</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
-</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
-</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
-</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="p">),</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="p">)</span>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a>
-</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
-</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="p">)</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a>
-</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="n">expression_sql</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-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
+</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
+</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="p">),</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="p">)</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a>
+</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
+</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
+</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="p">)</span>
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a>
-</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a>
-</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
-</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="p">)</span>
-</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a>
-</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
-</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a>
-</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
-</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="p">),</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="p">)</span>
-</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a>
-</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="p">)</span>
-</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a>
-</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">clone</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;clone&quot;</span><span class="p">)</span>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a>
-</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="k">def</span> <span class="nf">clone_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">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="n">keyword</span> <span class="o">=</span> <span class="s2">&quot;COPY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_COPY</span> <span class="k">else</span> <span class="s2">&quot;CLONE&quot;</span>
-</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">shallow</span><span class="si">}{</span><span class="n">keyword</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a>
-</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="k">def</span> <span class="nf">describe_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">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="n">extended</span> <span class="o">=</span> <span class="s2">&quot; EXTENDED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;extended&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE</span><span class="si">{</span><span class="n">extended</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a>
+</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="p">)</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
+</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a>
+</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
+</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
+</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="p">),</span>
+</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="p">)</span>
+</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a>
+</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="p">)</span>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a>
+</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="n">clone</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;clone&quot;</span><span class="p">)</span>
+</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a>
+</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="k">def</span> <span class="nf">clone_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">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="n">keyword</span> <span class="o">=</span> <span class="s2">&quot;COPY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_COPY</span> <span class="k">else</span> <span class="s2">&quot;CLONE&quot;</span>
+</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">shallow</span><span class="si">}{</span><span class="n">keyword</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a>
-</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="k">def</span> <span class="nf">heredoc_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">Heredoc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">tag</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;tag&quot;</span><span class="p">)</span>
-</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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">$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$&quot;</span>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="k">def</span> <span class="nf">describe_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">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">extended</span> <span class="o">=</span> <span class="s2">&quot; EXTENDED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;extended&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE</span><span class="si">{</span><span class="n">extended</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-957"><a href="#L-957"><span class="linenos"> 957</span></a>
-</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a>
-</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="k">def</span> <span class="nf">with_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="s2">&quot;RECURSIVE &quot;</span>
-</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CTE_RECURSIVE_KEYWORD_REQUIRED</span> <span class="ow">and</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;recursive&quot;</span><span class="p">)</span>
-</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="p">)</span>
-</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a>
-</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a>
-</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="k">def</span> <span class="nf">heredoc_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">Heredoc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">tag</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;tag&quot;</span><span class="p">)</span>
+</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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">$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$&quot;</span>
+</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a>
+</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
+</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a>
+</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="k">def</span> <span class="nf">with_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="s2">&quot;RECURSIVE &quot;</span>
+</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CTE_RECURSIVE_KEYWORD_REQUIRED</span> <span class="ow">and</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;recursive&quot;</span><span class="p">)</span>
+</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="p">)</span>
+</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a>
-</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="k">def</span> <span class="nf">tablealias_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">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="n">alias</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-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a>
-</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_ALIAS_COLUMNS</span><span class="p">:</span>
-</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Named columns are not supported in table alias.&quot;</span><span class="p">)</span>
+</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a>
+</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="k">def</span> <span class="nf">tablealias_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">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="n">alias</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-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a>
-</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;_t&quot;</span>
-</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a>
-</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="k">def</span> <span class="nf">bitstring_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">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
-</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a>
-</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="k">def</span> <span class="nf">hexstring_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">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
-</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="k">def</span> <span class="nf">bytestring_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">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
-</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a>
-</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="k">def</span> <span class="nf">unicodestring_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">UnicodeString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="n">escape</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;escape&quot;</span><span class="p">)</span>
+</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_ALIAS_COLUMNS</span><span class="p">:</span>
+</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Named columns are not supported in table alias.&quot;</span><span class="p">)</span>
+</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a>
+</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;_t&quot;</span>
+</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a>
+</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a>
+</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="k">def</span> <span class="nf">bitstring_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">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
+</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a>
+</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="k">def</span> <span class="nf">hexstring_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">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
+</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a>
+</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="k">def</span> <span class="nf">bytestring_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">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
+</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a>
-</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">:</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; UESCAPE </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">escape</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escape</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_END</span><span class="si">}{</span><span class="n">escape</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="k">def</span> <span class="nf">unicodestring_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">UnicodeString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="n">escape</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;escape&quot;</span><span class="p">)</span>
</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="k">if</span> <span class="n">escape</span><span class="p">:</span>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rf</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">escape</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(\d+)&quot;</span><span class="p">)</span>
-</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">ESCAPED_UNICODE_RE</span>
-</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a>
-</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">u\1&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a>
-</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="k">def</span> <span class="nf">rawstring_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">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">string</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">:</span>
+</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; UESCAPE </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">escape</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escape</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_END</span><span class="si">}{</span><span class="n">escape</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a>
+</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="k">if</span> <span class="n">escape</span><span class="p">:</span>
+</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rf</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">escape</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(\d+)&quot;</span><span class="p">)</span>
+</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">ESCAPED_UNICODE_RE</span>
+</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a>
+</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">u\1&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="k">def</span> <span class="nf">datatypeparam_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">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="n">specifier</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-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DATA_TYPE_SPECIFIERS_ALLOWED</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a>
-</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="n">type_sql</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
-</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">else</span> <span class="n">type_value</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="p">)</span>
-</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a>
-</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="k">def</span> <span class="nf">rawstring_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">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">string</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="k">def</span> <span class="nf">datatypeparam_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">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="n">specifier</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-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DATA_TYPE_SPECIFIERS_ALLOWED</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a>
+</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a>
+</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="n">type_sql</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
+</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="k">else</span> <span class="n">type_value</span>
+</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="p">)</span>
</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
-</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
-</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</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-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
-</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
-</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="p">):</span>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
-</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a>
-</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="k">return</span> <span class="n">type_sql</span>
-</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a>
-</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="k">def</span> <span class="nf">directory_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">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="n">row_format</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;row_format&quot;</span><span class="p">)</span>
-</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </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="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="k">def</span> <span class="nf">delete_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">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
-</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="k">def</span> <span class="nf">drop_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">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</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-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="p">)</span>
-</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a>
-</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">def</span> <span class="nf">except_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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="p">)</span>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a>
-</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="k">def</span> <span class="nf">except_op</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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="k">def</span> <span class="nf">fetch_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">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="n">direction</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;direction&quot;</span><span class="p">)</span>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="n">count</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;count&quot;</span><span class="p">)</span>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
-</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a>
-</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="k">def</span> <span class="nf">filter_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">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_FILTER_SUPPORTED</span><span class="p">:</span>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="n">where</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 class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="n">agg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="n">agg_arg</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="n">agg_arg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">true</span><span class="o">=</span><span class="n">agg_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()))</span>
-</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">agg</span><span class="p">)</span>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="k">def</span> <span class="nf">hint_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">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
-</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
-</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a>
-</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">def</span> <span class="nf">index_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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="n">name</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-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</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="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </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-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;include&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="k">if</span> <span class="n">include</span><span class="p">:</span>
-</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="n">include</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCLUDE (</span><span class="si">{</span><span class="n">include</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">include</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a>
-</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="k">def</span> <span class="nf">identifier_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">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
-</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
-</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
-</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
-</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a> <span class="p">):</span>
-</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a>
-</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_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">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
-</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">output_format</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;output_format&quot;</span><span class="p">)</span>
-</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="k">def</span> <span class="nf">national_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">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
+</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
+</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</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-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a>
+</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="p">):</span>
+</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
+</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a>
+</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="k">return</span> <span class="n">type_sql</span>
+</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a>
+</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="k">def</span> <span class="nf">directory_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">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="n">row_format</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;row_format&quot;</span><span class="p">)</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </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="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a>
+</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="k">def</span> <span class="nf">delete_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">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
+</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a>
+</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="k">def</span> <span class="nf">drop_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">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</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-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="p">)</span>
+</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a>
+</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="k">def</span> <span class="nf">except_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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="p">)</span>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a>
+</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="k">def</span> <span class="nf">except_op</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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="k">def</span> <span class="nf">fetch_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">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="n">direction</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;direction&quot;</span><span class="p">)</span>
+</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="n">count</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;count&quot;</span><span class="p">)</span>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a>
+</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="k">def</span> <span class="nf">filter_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">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_FILTER_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="n">where</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 class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="n">agg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="n">agg_arg</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="n">agg_arg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">true</span><span class="o">=</span><span class="n">agg_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()))</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">agg</span><span class="p">)</span>
+</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="k">def</span> <span class="nf">hint_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">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
+</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
+</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a>
+</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
+</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a>
+</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="k">def</span> <span class="nf">index_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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="n">name</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-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
+</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</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="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </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-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;include&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="k">if</span> <span class="n">include</span><span class="p">:</span>
+</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="n">include</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCLUDE (</span><span class="si">{</span><span class="n">include</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">include</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a>
+</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">def</span> <span class="nf">identifier_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">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
+</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
+</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
+</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
+</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="p">):</span>
+</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a>
+</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_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">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
+</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">output_format</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;output_format&quot;</span><span class="p">)</span>
+</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a>
-</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="k">def</span> <span class="nf">partition_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">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a>
-</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a> <span class="k">def</span> <span class="nf">properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="k">def</span> <span class="nf">national_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">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a>
+</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="k">def</span> <span class="nf">partition_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">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a>
-</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
-</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a>
-</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
-</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
-</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="k">def</span> <span class="nf">properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a>
+</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
+</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
+</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a>
-</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a>
-</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
-</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
-</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
-</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a>
-</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
-</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a>
-</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
-</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</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-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a>
-</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
-</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a>
-</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="k">def</span> <span class="nf">property_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">string_key</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="nb">str</span><span class="p">:</span>
-</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">string_key</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a>
-</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="k">def</span> <span class="nf">property_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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
-</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">property_name</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a>
-</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
-</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
-</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
+</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
+</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a>
+</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a>
+</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
+</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
+</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
+</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a>
+</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
+</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a>
+</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
+</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</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-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
+</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a>
+</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="k">def</span> <span class="nf">property_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">string_key</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="nb">str</span><span class="p">:</span>
+</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">string_key</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a>
+</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="k">def</span> <span class="nf">property_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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
+</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">property_name</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a>
-</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1259"><a href="#L-1259"><span class="linenos">1259</span></a>
-</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_CREATE_TABLE_LIKE</span><span class="p">:</span>
-</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a>
-</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;LIKE </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="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">like</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
+</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
+</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a>
+</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1263"><a href="#L-1263"><span class="linenos">1263</span></a>
+</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_CREATE_TABLE_LIKE</span><span class="p">:</span>
+</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a>
-</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="k">return</span> <span class="n">like</span>
-</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a>
-</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Transpilation of LIKE property options is unsupported&quot;</span><span class="p">)</span>
-</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a>
-</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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">select</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a>
-</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_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">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a>
-</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="k">def</span> <span class="nf">journalproperty_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">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="n">local</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;local&quot;</span><span class="p">)</span>
-</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
-</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a>
-</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_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">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="n">freespace</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-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a>
-</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="k">def</span> <span class="nf">checksumproperty_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">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="k">elif</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;on&quot;</span><span class="p">):</span>
-</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
-</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
-</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a>
-</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_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">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
-</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
-</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
-</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a>
-</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</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="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a>
-</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_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">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a> <span class="n">minimum</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;minimum&quot;</span><span class="p">)</span>
-</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a> <span class="n">maximum</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;maximum&quot;</span><span class="p">)</span>
-</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
-</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
-</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
-</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
-</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
-</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a> <span class="n">units</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;units&quot;</span><span class="p">)</span>
-</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</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;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a>
-</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_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">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="n">autotemp</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;autotemp&quot;</span><span class="p">)</span>
-</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="n">always</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;always&quot;</span><span class="p">)</span>
-</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="n">manual</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;manual&quot;</span><span class="p">)</span>
-</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a> <span class="n">never</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;never&quot;</span><span class="p">)</span>
-</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a>
-</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
-</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
-</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
-</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
-</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
-</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a>
-</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_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">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a> <span class="n">no</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;no&quot;</span><span class="p">)</span>
-</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a> <span class="n">concurrent</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;concurrent&quot;</span><span class="p">)</span>
-</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a>
-</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
-</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
-</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a> <span class="k">elif</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;for_insert&quot;</span><span class="p">):</span>
-</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
-</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="k">elif</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;for_none&quot;</span><span class="p">):</span>
-</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
-</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a>
-</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="k">def</span> <span class="nf">partitionboundspec_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">PartitionBoundSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IN (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="n">modulus</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-1369"><a href="#L-1369"><span class="linenos">1369</span></a> <span class="n">remainder</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-1370"><a href="#L-1370"><span class="linenos">1370</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (MODULUS </span><span class="si">{</span><span class="n">modulus</span><span class="si">}</span><span class="s2">, REMAINDER </span><span class="si">{</span><span class="n">remainder</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a>
-</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;from_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;to_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FROM (</span><span class="si">{</span><span class="n">from_expressions</span><span class="si">}</span><span class="s2">) TO (</span><span class="si">{</span><span class="n">to_expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;LIKE </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="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">like</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a>
+</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="k">return</span> <span class="n">like</span>
+</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a>
+</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Transpilation of LIKE property options is unsupported&quot;</span><span class="p">)</span>
+</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a>
+</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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">select</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a>
+</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_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">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a>
+</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="k">def</span> <span class="nf">journalproperty_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">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="n">local</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;local&quot;</span><span class="p">)</span>
+</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
+</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a>
+</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_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">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="n">freespace</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-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a>
+</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="k">def</span> <span class="nf">checksumproperty_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">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="k">elif</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;on&quot;</span><span class="p">):</span>
+</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
+</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a>
+</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_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">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
+</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
+</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a>
+</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</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="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a>
+</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_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">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="n">minimum</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;minimum&quot;</span><span class="p">)</span>
+</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="n">maximum</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;maximum&quot;</span><span class="p">)</span>
+</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
+</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
+</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
+</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
+</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
+</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="n">units</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;units&quot;</span><span class="p">)</span>
+</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</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;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a>
+</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_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">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a> <span class="n">autotemp</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;autotemp&quot;</span><span class="p">)</span>
+</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="n">always</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;always&quot;</span><span class="p">)</span>
+</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="n">manual</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;manual&quot;</span><span class="p">)</span>
+</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="n">never</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;never&quot;</span><span class="p">)</span>
+</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
+</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
+</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
+</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
+</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
+</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
+</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a>
+</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_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">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a> <span class="n">no</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;no&quot;</span><span class="p">)</span>
+</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a> <span class="n">concurrent</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;concurrent&quot;</span><span class="p">)</span>
+</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a>
+</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
+</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
+</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="k">elif</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;for_insert&quot;</span><span class="p">):</span>
+</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
+</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="k">elif</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;for_none&quot;</span><span class="p">):</span>
+</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a>
+</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="k">def</span> <span class="nf">partitionboundspec_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">PartitionBoundSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IN (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a> <span class="n">modulus</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-1373"><a href="#L-1373"><span class="linenos">1373</span></a> <span class="n">remainder</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-1374"><a href="#L-1374"><span class="linenos">1374</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (MODULUS </span><span class="si">{</span><span class="n">modulus</span><span class="si">}</span><span class="s2">, REMAINDER </span><span class="si">{</span><span class="n">remainder</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a>
-</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="k">def</span> <span class="nf">partitionedofproperty_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">PartitionedOfProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a>
-</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">for_values_or_default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">):</span>
-</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR VALUES </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">for_values_or_default</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="s2">&quot; DEFAULT&quot;</span>
-</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</span></a>
-</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION OF </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_values_or_default</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a>
-</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="k">def</span> <span class="nf">lockingproperty_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">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="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 class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a> <span class="n">for_or_in</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;for_or_in&quot;</span><span class="p">)</span>
-</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">for_or_in</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="n">lock_type</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;lock_type&quot;</span><span class="p">)</span>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a>
-</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a> <span class="k">def</span> <span class="nf">withdataproperty_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">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
-</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a> <span class="n">statistics</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;statistics&quot;</span><span class="p">)</span>
-</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
-</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a> <span class="k">def</span> <span class="nf">withsystemversioningproperty_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">WithSystemVersioningProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;WITH(SYSTEM_VERSIONING=ON&quot;</span>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="n">history_table</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-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">(HISTORY_TABLE=</span><span class="si">{</span><span class="n">history_table</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;from_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;to_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FROM (</span><span class="si">{</span><span class="n">from_expressions</span><span class="si">}</span><span class="s2">) TO (</span><span class="si">{</span><span class="n">to_expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a>
+</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <span class="k">def</span> <span class="nf">partitionedofproperty_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">PartitionedOfProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a>
+</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">for_values_or_default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">):</span>
+</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR VALUES </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">for_values_or_default</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="s2">&quot; DEFAULT&quot;</span>
+</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a>
+</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION OF </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_values_or_default</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a>
+</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="k">def</span> <span class="nf">lockingproperty_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">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="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 class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="n">for_or_in</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;for_or_in&quot;</span><span class="p">)</span>
+</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">for_or_in</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a> <span class="n">lock_type</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;lock_type&quot;</span><span class="p">)</span>
+</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a>
+</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a> <span class="k">def</span> <span class="nf">withdataproperty_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">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
+</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="n">statistics</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;statistics&quot;</span><span class="p">)</span>
+</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
+</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a>
+</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="k">def</span> <span class="nf">withsystemversioningproperty_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">WithSystemVersioningProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;WITH(SYSTEM_VERSIONING=ON&quot;</span>
</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a> <span class="n">data_consistency_check</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-1413"><a href="#L-1413"><span class="linenos">1413</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">, DATA_CONSISTENCY_CHECK=</span><span class="si">{</span><span class="n">data_consistency_check</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a> <span class="n">history_table</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-1413"><a href="#L-1413"><span class="linenos">1413</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">(HISTORY_TABLE=</span><span class="si">{</span><span class="n">history_table</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a>
-</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a>
-</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
+</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <span class="n">data_consistency_check</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-1417"><a href="#L-1417"><span class="linenos">1417</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">, DATA_CONSISTENCY_CHECK=</span><span class="si">{</span><span class="n">data_consistency_check</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a>
-</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a> <span class="k">def</span> <span class="nf">insert_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">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a> <span class="n">overwrite</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;overwrite&quot;</span><span class="p">)</span>
-</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
-</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">INSERT_OVERWRITE</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a>
-</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="n">alternative</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;alternative&quot;</span><span class="p">)</span>
-</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a>
+</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a>
+</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a> <span class="k">def</span> <span class="nf">insert_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">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <span class="n">overwrite</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;overwrite&quot;</span><span class="p">)</span>
+</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a>
+</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
+</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">INSERT_OVERWRITE</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a>
-</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </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-1432"><a href="#L-1432"><span class="linenos">1432</span></a>
-</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</span></a> <span class="p">)</span>
-</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="n">conflict</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;conflict&quot;</span><span class="p">)</span>
-</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a>
-</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a>
-</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</span></a>
-</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a> <span class="k">def</span> <span class="nf">intersect_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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="p">)</span>
-</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</span></a>
-</span><span id="L-1458"><a href="#L-1458"><span class="linenos">1458</span></a> <span class="k">def</span> <span class="nf">intersect_op</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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</span></a>
-</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</span></a> <span class="k">def</span> <span class="nf">introducer_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">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a>
-</span><span id="L-1464"><a href="#L-1464"><span class="linenos">1464</span></a> <span class="k">def</span> <span class="nf">kill_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">Kill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KILL</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a>
-</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</span></a> <span class="k">def</span> <span class="nf">pseudotype_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">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</span></a>
-</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></a> <span class="k">def</span> <span class="nf">objectidentifier_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">ObjectIdentifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a>
-</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="k">def</span> <span class="nf">onconflict_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">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
-</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="n">constraint</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;constraint&quot;</span><span class="p">)</span>
-</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
-</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1490"><a href="#L-1490"><span class="linenos">1490</span></a>
-</span><span id="L-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="k">def</span> <span class="nf">returning_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">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</span></a>
-</span><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_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">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1495"><a href="#L-1495"><span class="linenos">1495</span></a> <span class="n">fields</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;fields&quot;</span><span class="p">)</span>
-</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</span></a> <span class="n">escaped</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;escaped&quot;</span><span class="p">)</span>
-</span><span id="L-1498"><a href="#L-1498"><span class="linenos">1498</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="n">items</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;collection_items&quot;</span><span class="p">)</span>
-</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
-</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="n">lines</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;lines&quot;</span><span class="p">)</span>
-</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <span class="n">null</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;null&quot;</span><span class="p">)</span>
-</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a>
-</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</span></a> <span class="k">def</span> <span class="nf">withtablehint_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">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</span></a>
-</span><span id="L-1512"><a href="#L-1512"><span class="linenos">1512</span></a> <span class="k">def</span> <span class="nf">indextablehint_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">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1513"><a href="#L-1513"><span class="linenos">1513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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"> INDEX&quot;</span>
-</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
-</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1517"><a href="#L-1517"><span class="linenos">1517</span></a>
-</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</span></a> <span class="k">def</span> <span class="nf">historicaldata_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">HistoricalData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-1521"><a href="#L-1521"><span class="linenos">1521</span></a> <span class="n">expr</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-1522"><a href="#L-1522"><span class="linenos">1522</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1523"><a href="#L-1523"><span class="linenos">1523</span></a>
-</span><span id="L-1524"><a href="#L-1524"><span class="linenos">1524</span></a> <span class="k">def</span> <span class="nf">table_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">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-1526"><a href="#L-1526"><span class="linenos">1526</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="L-1527"><a href="#L-1527"><span class="linenos">1527</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="L-1528"><a href="#L-1528"><span class="linenos">1528</span></a> <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;catalog&quot;</span><span class="p">),</span>
-</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <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;db&quot;</span><span class="p">),</span>
-</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <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;this&quot;</span><span class="p">),</span>
-</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a> <span class="p">)</span>
-</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="p">)</span>
-</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a>
-</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="n">version</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;version&quot;</span><span class="p">)</span>
-</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1539"><a href="#L-1539"><span class="linenos">1539</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1544"><a href="#L-1544"><span class="linenos">1544</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="L-1545"><a href="#L-1545"><span class="linenos">1545</span></a>
-</span><span id="L-1546"><a href="#L-1546"><span class="linenos">1546</span></a> <span class="n">file_format</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;format&quot;</span><span class="p">)</span>
-</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</span></a> <span class="k">if</span> <span class="n">file_format</span><span class="p">:</span>
-</span><span id="L-1548"><a href="#L-1548"><span class="linenos">1548</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
-</span><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, PATTERN =&gt; </span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</span></a> <span class="n">file_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (FILE_FORMAT =&gt; </span><span class="si">{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1551"><a href="#L-1551"><span class="linenos">1551</span></a>
-</span><span id="L-1552"><a href="#L-1552"><span class="linenos">1552</span></a> <span class="n">ordinality</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;ordinality&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a> <span class="k">if</span> <span class="n">ordinality</span><span class="p">:</span>
-</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1555"><a href="#L-1555"><span class="linenos">1555</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1556"><a href="#L-1556"><span class="linenos">1556</span></a>
-</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a> <span class="n">when</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;when&quot;</span><span class="p">)</span>
-</span><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
-</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</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"> </span><span class="si">{</span><span class="n">when</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a> <span class="n">alternative</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;alternative&quot;</span><span class="p">)</span>
+</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a>
+</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </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-1436"><a href="#L-1436"><span class="linenos">1436</span></a>
+</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="p">)</span>
+</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a> <span class="n">conflict</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;conflict&quot;</span><span class="p">)</span>
+</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a>
+</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a>
+</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a>
+</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="k">def</span> <span class="nf">intersect_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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="L-1458"><a href="#L-1458"><span class="linenos">1458</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</span></a> <span class="p">)</span>
+</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</span></a>
+</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</span></a> <span class="k">def</span> <span class="nf">intersect_op</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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1464"><a href="#L-1464"><span class="linenos">1464</span></a>
+</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a> <span class="k">def</span> <span class="nf">introducer_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">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a>
+</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="k">def</span> <span class="nf">kill_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">Kill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KILL</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></a>
+</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></a> <span class="k">def</span> <span class="nf">pseudotype_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">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a>
+</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a> <span class="k">def</span> <span class="nf">objectidentifier_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">ObjectIdentifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a>
+</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="k">def</span> <span class="nf">onconflict_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">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
+</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="n">constraint</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;constraint&quot;</span><span class="p">)</span>
+</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
+</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1490"><a href="#L-1490"><span class="linenos">1490</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</span></a>
+</span><span id="L-1495"><a href="#L-1495"><span class="linenos">1495</span></a> <span class="k">def</span> <span class="nf">returning_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">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</span></a>
+</span><span id="L-1498"><a href="#L-1498"><span class="linenos">1498</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_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">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="n">fields</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;fields&quot;</span><span class="p">)</span>
+</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="n">escaped</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;escaped&quot;</span><span class="p">)</span>
+</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="n">items</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;collection_items&quot;</span><span class="p">)</span>
+</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
+</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</span></a> <span class="n">lines</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;lines&quot;</span><span class="p">)</span>
+</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</span></a> <span class="n">null</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;null&quot;</span><span class="p">)</span>
+</span><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1512"><a href="#L-1512"><span class="linenos">1512</span></a>
+</span><span id="L-1513"><a href="#L-1513"><span class="linenos">1513</span></a> <span class="k">def</span> <span class="nf">withtablehint_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">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a>
+</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a> <span class="k">def</span> <span class="nf">indextablehint_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">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1517"><a href="#L-1517"><span class="linenos">1517</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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"> INDEX&quot;</span>
+</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
+</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1521"><a href="#L-1521"><span class="linenos">1521</span></a>
+</span><span id="L-1522"><a href="#L-1522"><span class="linenos">1522</span></a> <span class="k">def</span> <span class="nf">historicaldata_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">HistoricalData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1523"><a href="#L-1523"><span class="linenos">1523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1524"><a href="#L-1524"><span class="linenos">1524</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</span></a> <span class="n">expr</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-1526"><a href="#L-1526"><span class="linenos">1526</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1527"><a href="#L-1527"><span class="linenos">1527</span></a>
+</span><span id="L-1528"><a href="#L-1528"><span class="linenos">1528</span></a> <span class="k">def</span> <span class="nf">table_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">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <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;catalog&quot;</span><span class="p">),</span>
+</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <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;db&quot;</span><span class="p">),</span>
+</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a> <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;this&quot;</span><span class="p">),</span>
+</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="p">)</span>
+</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="p">)</span>
+</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a>
+</span><span id="L-1539"><a href="#L-1539"><span class="linenos">1539</span></a> <span class="n">version</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;version&quot;</span><span class="p">)</span>
+</span><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-1544"><a href="#L-1544"><span class="linenos">1544</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1545"><a href="#L-1545"><span class="linenos">1545</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1546"><a href="#L-1546"><span class="linenos">1546</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1548"><a href="#L-1548"><span class="linenos">1548</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</span></a>
+</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</span></a> <span class="n">file_format</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;format&quot;</span><span class="p">)</span>
+</span><span id="L-1551"><a href="#L-1551"><span class="linenos">1551</span></a> <span class="k">if</span> <span class="n">file_format</span><span class="p">:</span>
+</span><span id="L-1552"><a href="#L-1552"><span class="linenos">1552</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
+</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, PATTERN =&gt; </span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a> <span class="n">file_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (FILE_FORMAT =&gt; </span><span class="si">{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1555"><a href="#L-1555"><span class="linenos">1555</span></a>
+</span><span id="L-1556"><a href="#L-1556"><span class="linenos">1556</span></a> <span class="n">ordinality</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;ordinality&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a> <span class="k">if</span> <span class="n">ordinality</span><span class="p">:</span>
+</span><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-1560"><a href="#L-1560"><span class="linenos">1560</span></a>
-</span><span id="L-1561"><a href="#L-1561"><span class="linenos">1561</span></a> <span class="k">return</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="n">version</span><span class="si">}{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}{</span><span class="n">ordinality</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</span></a>
-</span><span id="L-1563"><a href="#L-1563"><span class="linenos">1563</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="L-1564"><a href="#L-1564"><span class="linenos">1564</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1565"><a href="#L-1565"><span class="linenos">1565</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="L-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1568"><a href="#L-1568"><span class="linenos">1568</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-1571"><a href="#L-1571"><span class="linenos">1571</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</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="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1574"><a href="#L-1574"><span class="linenos">1574</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1575"><a href="#L-1575"><span class="linenos">1575</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a>
-</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a> <span class="n">method</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;method&quot;</span><span class="p">)</span>
-</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a> <span class="n">method</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1580"><a href="#L-1580"><span class="linenos">1580</span></a> <span class="n">numerator</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;bucket_numerator&quot;</span><span class="p">)</span>
-</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</span></a> <span class="n">denominator</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;bucket_denominator&quot;</span><span class="p">)</span>
-</span><span id="L-1582"><a href="#L-1582"><span class="linenos">1582</span></a> <span class="n">field</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;bucket_field&quot;</span><span class="p">)</span>
-</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</span></a> <span class="n">field</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">field</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a> <span class="n">bucket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;BUCKET </span><span class="si">{</span><span class="n">numerator</span><span class="si">}</span><span class="s2"> OUT OF </span><span class="si">{</span><span class="n">denominator</span><span class="si">}{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">numerator</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</span></a> <span class="n">seed</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;seed&quot;</span><span class="p">)</span>
-</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SEED_KEYWORD</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">seed</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">seed</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</span></a>
-</span><span id="L-1588"><a href="#L-1588"><span class="linenos">1588</span></a> <span class="n">size</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;size&quot;</span><span class="p">)</span>
-</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</span></a> <span class="k">if</span> <span class="n">size</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_ROWS</span><span class="p">:</span>
-</span><span id="L-1590"><a href="#L-1590"><span class="linenos">1590</span></a> <span class="n">size</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">size</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="L-1561"><a href="#L-1561"><span class="linenos">1561</span></a> <span class="n">when</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;when&quot;</span><span class="p">)</span>
+</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
+</span><span id="L-1563"><a href="#L-1563"><span class="linenos">1563</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"> </span><span class="si">{</span><span class="n">when</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1564"><a href="#L-1564"><span class="linenos">1564</span></a>
+</span><span id="L-1565"><a href="#L-1565"><span class="linenos">1565</span></a> <span class="k">return</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="n">version</span><span class="si">}{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}{</span><span class="n">ordinality</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</span></a>
+</span><span id="L-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="L-1568"><a href="#L-1568"><span class="linenos">1568</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
+</span><span id="L-1571"><a href="#L-1571"><span class="linenos">1571</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="L-1574"><a href="#L-1574"><span class="linenos">1574</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-1575"><a href="#L-1575"><span class="linenos">1575</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</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="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1580"><a href="#L-1580"><span class="linenos">1580</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</span></a>
+</span><span id="L-1582"><a href="#L-1582"><span class="linenos">1582</span></a> <span class="n">method</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;method&quot;</span><span class="p">)</span>
+</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</span></a> <span class="n">method</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a> <span class="n">numerator</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;bucket_numerator&quot;</span><span class="p">)</span>
+</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</span></a> <span class="n">denominator</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;bucket_denominator&quot;</span><span class="p">)</span>
+</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</span></a> <span class="n">field</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;bucket_field&quot;</span><span class="p">)</span>
+</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="n">field</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">field</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1588"><a href="#L-1588"><span class="linenos">1588</span></a> <span class="n">bucket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;BUCKET </span><span class="si">{</span><span class="n">numerator</span><span class="si">}</span><span class="s2"> OUT OF </span><span class="si">{</span><span class="n">denominator</span><span class="si">}{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">numerator</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</span></a> <span class="n">seed</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;seed&quot;</span><span class="p">)</span>
+</span><span id="L-1590"><a href="#L-1590"><span class="linenos">1590</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SEED_KEYWORD</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">seed</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">seed</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</span></a>
-</span><span id="L-1592"><a href="#L-1592"><span class="linenos">1592</span></a> <span class="n">percent</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;percent&quot;</span><span class="p">)</span>
-</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="k">if</span> <span class="n">percent</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
-</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">percent</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="L-1592"><a href="#L-1592"><span class="linenos">1592</span></a> <span class="n">size</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;size&quot;</span><span class="p">)</span>
+</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="k">if</span> <span class="n">size</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_ROWS</span><span class="p">:</span>
+</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a> <span class="n">size</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">size</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span><span id="L-1595"><a href="#L-1595"><span class="linenos">1595</span></a>
-</span><span id="L-1596"><a href="#L-1596"><span class="linenos">1596</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">bucket</span><span class="si">}{</span><span class="n">percent</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_REQUIRES_PARENS</span><span class="p">:</span>
-</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1596"><a href="#L-1596"><span class="linenos">1596</span></a> <span class="n">percent</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;percent&quot;</span><span class="p">)</span>
+</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</span></a> <span class="k">if</span> <span class="n">percent</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
+</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">percent</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
</span><span id="L-1599"><a href="#L-1599"><span class="linenos">1599</span></a>
-</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">tablesample_keyword</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_KEYWORDS</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">method</span><span class="si">}{</span><span class="n">expr</span><span class="si">}{</span><span class="n">seed</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</span></a> <span class="p">)</span>
+</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">bucket</span><span class="si">}{</span><span class="n">percent</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_REQUIRES_PARENS</span><span class="p">:</span>
+</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-1603"><a href="#L-1603"><span class="linenos">1603</span></a>
-</span><span id="L-1604"><a href="#L-1604"><span class="linenos">1604</span></a> <span class="k">def</span> <span class="nf">pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</span></a>
-</span><span id="L-1607"><a href="#L-1607"><span class="linenos">1607</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="L-1608"><a href="#L-1608"><span class="linenos">1608</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1609"><a href="#L-1609"><span class="linenos">1609</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-1610"><a href="#L-1610"><span class="linenos">1610</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNPIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1611"><a href="#L-1611"><span class="linenos">1611</span></a>
-</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1615"><a href="#L-1615"><span class="linenos">1615</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
-</span><span id="L-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a>
-</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="s2">&quot;UNPIVOT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
-</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
-</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</span></a> <span class="n">include_nulls</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;include_nulls&quot;</span><span class="p">)</span>
-</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
-</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a>
-</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a> <span class="k">def</span> <span class="nf">version_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">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1631"><a href="#L-1631"><span class="linenos">1631</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</span></a> <span class="n">expr</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-1633"><a href="#L-1633"><span class="linenos">1633</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1634"><a href="#L-1634"><span class="linenos">1634</span></a>
-</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</span></a> <span class="k">def</span> <span class="nf">tuple_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">Tuple</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1636"><a href="#L-1636"><span class="linenos">1636</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</span></a>
-</span><span id="L-1638"><a href="#L-1638"><span class="linenos">1638</span></a> <span class="k">def</span> <span class="nf">update_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">Update</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</span></a> <span class="n">set_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
-</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</span></a> <span class="n">where_sql</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;where&quot;</span><span class="p">)</span>
-</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1651"><a href="#L-1651"><span class="linenos">1651</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</span></a>
-</span><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="k">def</span> <span class="nf">values_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">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
-</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
-</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1657"><a href="#L-1657"><span class="linenos">1657</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-1658"><a href="#L-1658"><span class="linenos">1658</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;VALUES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</span></a> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAP_DERIVED_VALUES</span> <span class="ow">and</span> <span class="p">(</span><span class="n">alias</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">))</span>
-</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</span></a> <span class="p">)</span>
-</span><span id="L-1664"><a href="#L-1664"><span class="linenos">1664</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
-</span><span id="L-1665"><a href="#L-1665"><span class="linenos">1665</span></a>
-</span><span id="L-1666"><a href="#L-1666"><span class="linenos">1666</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
-</span><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a> <span class="n">alias_node</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="L-1604"><a href="#L-1604"><span class="linenos">1604</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">tablesample_keyword</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_KEYWORDS</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">method</span><span class="si">}{</span><span class="n">expr</span><span class="si">}{</span><span class="n">seed</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</span></a> <span class="p">)</span>
+</span><span id="L-1607"><a href="#L-1607"><span class="linenos">1607</span></a>
+</span><span id="L-1608"><a href="#L-1608"><span class="linenos">1608</span></a> <span class="k">def</span> <span class="nf">pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1609"><a href="#L-1609"><span class="linenos">1609</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1610"><a href="#L-1610"><span class="linenos">1610</span></a>
+</span><span id="L-1611"><a href="#L-1611"><span class="linenos">1611</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNPIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1615"><a href="#L-1615"><span class="linenos">1615</span></a>
+</span><span id="L-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
+</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</span></a>
+</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="s2">&quot;UNPIVOT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
+</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
+</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a> <span class="n">include_nulls</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;include_nulls&quot;</span><span class="p">)</span>
+</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
+</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1631"><a href="#L-1631"><span class="linenos">1631</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</span></a>
+</span><span id="L-1633"><a href="#L-1633"><span class="linenos">1633</span></a> <span class="k">def</span> <span class="nf">version_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">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1634"><a href="#L-1634"><span class="linenos">1634</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="L-1636"><a href="#L-1636"><span class="linenos">1636</span></a> <span class="n">expr</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-1637"><a href="#L-1637"><span class="linenos">1637</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1638"><a href="#L-1638"><span class="linenos">1638</span></a>
+</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a> <span class="k">def</span> <span class="nf">tuple_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">Tuple</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</span></a>
+</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</span></a> <span class="k">def</span> <span class="nf">update_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">Update</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="n">set_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
+</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</span></a> <span class="n">where_sql</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;where&quot;</span><span class="p">)</span>
+</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="L-1651"><a href="#L-1651"><span class="linenos">1651</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</span></a>
+</span><span id="L-1657"><a href="#L-1657"><span class="linenos">1657</span></a> <span class="k">def</span> <span class="nf">values_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">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1658"><a href="#L-1658"><span class="linenos">1658</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
+</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
+</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;VALUES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1664"><a href="#L-1664"><span class="linenos">1664</span></a> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1665"><a href="#L-1665"><span class="linenos">1665</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAP_DERIVED_VALUES</span> <span class="ow">and</span> <span class="p">(</span><span class="n">alias</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">))</span>
+</span><span id="L-1666"><a href="#L-1666"><span class="linenos">1666</span></a> <span class="k">else</span> <span class="n">values</span>
+</span><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a> <span class="p">)</span>
+</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
</span><span id="L-1669"><a href="#L-1669"><span class="linenos">1669</span></a>
-</span><span id="L-1670"><a href="#L-1670"><span class="linenos">1670</span></a> <span class="n">selects</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1671"><a href="#L-1671"><span class="linenos">1671</span></a>
-</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-1674"><a href="#L-1674"><span class="linenos">1674</span></a>
-</span><span id="L-1675"><a href="#L-1675"><span class="linenos">1675</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
-</span><span id="L-1676"><a href="#L-1676"><span class="linenos">1676</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
-</span><span id="L-1678"><a href="#L-1678"><span class="linenos">1678</span></a> <span class="p">]</span>
-</span><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</span></a>
-</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
-</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</span></a>
-</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</span></a> <span class="c1"># This may result in poor performance for large-cardinality `VALUES` tables, due to</span>
-</span><span id="L-1684"><a href="#L-1684"><span class="linenos">1684</span></a> <span class="c1"># the deep nesting of the resulting exp.Unions. If this is a problem, either increase</span>
-</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a> <span class="c1"># `sys.setrecursionlimit` to avoid RecursionErrors, or don&#39;t set `pretty`.</span>
-</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="n">subqueryable</span> <span class="o">=</span> <span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">selects</span><span class="p">)</span>
-</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span>
-</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="n">subqueryable</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1689"><a href="#L-1689"><span class="linenos">1689</span></a> <span class="p">)</span>
-</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a>
-</span><span id="L-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">alias_node</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias_node</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <span class="n">unions</span> <span class="o">=</span> <span class="s2">&quot; UNION ALL &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">select</span><span class="p">)</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">)</span>
-</span><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">unions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1670"><a href="#L-1670"><span class="linenos">1670</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
+</span><span id="L-1671"><a href="#L-1671"><span class="linenos">1671</span></a> <span class="n">alias_node</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</span></a>
+</span><span id="L-1674"><a href="#L-1674"><span class="linenos">1674</span></a> <span class="n">selects</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1675"><a href="#L-1675"><span class="linenos">1675</span></a>
+</span><span id="L-1676"><a href="#L-1676"><span class="linenos">1676</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-1678"><a href="#L-1678"><span class="linenos">1678</span></a>
+</span><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
+</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
+</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="p">]</span>
+</span><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</span></a>
+</span><span id="L-1684"><a href="#L-1684"><span class="linenos">1684</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
+</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a>
+</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="c1"># This may result in poor performance for large-cardinality `VALUES` tables, due to</span>
+</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="c1"># the deep nesting of the resulting exp.Unions. If this is a problem, either increase</span>
+</span><span id="L-1689"><a href="#L-1689"><span class="linenos">1689</span></a> <span class="c1"># `sys.setrecursionlimit` to avoid RecursionErrors, or don&#39;t set `pretty`.</span>
+</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a> <span class="n">subqueryable</span> <span class="o">=</span> <span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">selects</span><span class="p">)</span>
+</span><span id="L-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span>
+</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <span class="n">subqueryable</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</span></a> <span class="p">)</span>
</span><span id="L-1694"><a href="#L-1694"><span class="linenos">1694</span></a>
-</span><span id="L-1695"><a href="#L-1695"><span class="linenos">1695</span></a> <span class="k">def</span> <span class="nf">var_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">Var</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a>
-</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</span></a> <span class="k">def</span> <span class="nf">into_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">Into</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unlogged&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;INTO&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">temporary</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">unlogged</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1702"><a href="#L-1702"><span class="linenos">1702</span></a>
-</span><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="k">def</span> <span class="nf">from_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">From</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1705"><a href="#L-1705"><span class="linenos">1705</span></a>
-</span><span id="L-1706"><a href="#L-1706"><span class="linenos">1706</span></a> <span class="k">def</span> <span class="nf">group_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">Group</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</span></a>
-</span><span id="L-1709"><a href="#L-1709"><span class="linenos">1709</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
-</span><span id="L-1710"><a href="#L-1710"><span class="linenos">1710</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
-</span><span id="L-1711"><a href="#L-1711"><span class="linenos">1711</span></a>
-</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;GROUPING SETS&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">grouping_sets</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1715"><a href="#L-1715"><span class="linenos">1715</span></a> <span class="p">)</span>
-</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</span></a>
-</span><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <span class="n">cube</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;cube&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">cube</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1719"><a href="#L-1719"><span class="linenos">1719</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1720"><a href="#L-1720"><span class="linenos">1720</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;cube&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">cube_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">cube_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1723"><a href="#L-1723"><span class="linenos">1723</span></a>
-</span><span id="L-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <span class="n">rollup</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;rollup&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">rollup</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1727"><a href="#L-1727"><span class="linenos">1727</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;rollup&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">rollup_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">rollup_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a>
-</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
-</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</span></a> <span class="n">cube_sql</span><span class="p">,</span>
-</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
-</span><span id="L-1735"><a href="#L-1735"><span class="linenos">1735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-1736"><a href="#L-1736"><span class="linenos">1736</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
-</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</span></a> <span class="p">)</span>
-</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</span></a>
-</span><span id="L-1739"><a href="#L-1739"><span class="linenos">1739</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">groupings</span><span class="p">:</span>
-</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</span></a>
-</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="n">groupings</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1743"><a href="#L-1743"><span class="linenos">1743</span></a>
-</span><span id="L-1744"><a href="#L-1744"><span class="linenos">1744</span></a> <span class="k">def</span> <span class="nf">having_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">Having</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="L-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;HAVING&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1695"><a href="#L-1695"><span class="linenos">1695</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">alias_node</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias_node</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</span></a> <span class="n">unions</span> <span class="o">=</span> <span class="s2">&quot; UNION ALL &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">select</span><span class="p">)</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">)</span>
+</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">unions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</span></a>
+</span><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a> <span class="k">def</span> <span class="nf">var_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">Var</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a>
+</span><span id="L-1702"><a href="#L-1702"><span class="linenos">1702</span></a> <span class="k">def</span> <span class="nf">into_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">Into</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unlogged&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1705"><a href="#L-1705"><span class="linenos">1705</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;INTO&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">temporary</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">unlogged</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1706"><a href="#L-1706"><span class="linenos">1706</span></a>
+</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a> <span class="k">def</span> <span class="nf">from_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">From</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1709"><a href="#L-1709"><span class="linenos">1709</span></a>
+</span><span id="L-1710"><a href="#L-1710"><span class="linenos">1710</span></a> <span class="k">def</span> <span class="nf">group_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">Group</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1711"><a href="#L-1711"><span class="linenos">1711</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</span></a>
+</span><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
+</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
+</span><span id="L-1715"><a href="#L-1715"><span class="linenos">1715</span></a>
+</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;GROUPING SETS&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">grouping_sets</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1719"><a href="#L-1719"><span class="linenos">1719</span></a> <span class="p">)</span>
+</span><span id="L-1720"><a href="#L-1720"><span class="linenos">1720</span></a>
+</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a> <span class="n">cube</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;cube&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">cube</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1723"><a href="#L-1723"><span class="linenos">1723</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;cube&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">cube_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">cube_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1727"><a href="#L-1727"><span class="linenos">1727</span></a>
+</span><span id="L-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="n">rollup</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;rollup&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">rollup</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;rollup&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">rollup_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">rollup_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</span></a>
+</span><span id="L-1735"><a href="#L-1735"><span class="linenos">1735</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="L-1736"><a href="#L-1736"><span class="linenos">1736</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
+</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</span></a> <span class="n">cube_sql</span><span class="p">,</span>
+</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
+</span><span id="L-1739"><a href="#L-1739"><span class="linenos">1739</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
+</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</span></a> <span class="p">)</span>
+</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</span></a>
+</span><span id="L-1743"><a href="#L-1743"><span class="linenos">1743</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">groupings</span><span class="p">:</span>
+</span><span id="L-1744"><a href="#L-1744"><span class="linenos">1744</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</span></a>
+</span><span id="L-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="n">groupings</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</span></a>
-</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a> <span class="k">def</span> <span class="nf">connect_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">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</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;start&quot;</span><span class="p">)</span>
-</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1751"><a href="#L-1751"><span class="linenos">1751</span></a> <span class="n">connect</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;connect&quot;</span><span class="p">)</span>
-</span><span id="L-1752"><a href="#L-1752"><span class="linenos">1752</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1753"><a href="#L-1753"><span class="linenos">1753</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
-</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</span></a>
-</span><span id="L-1755"><a href="#L-1755"><span class="linenos">1755</span></a> <span class="k">def</span> <span class="nf">prior_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">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIOR </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-1757"><a href="#L-1757"><span class="linenos">1757</span></a>
-</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</span></a> <span class="k">def</span> <span class="nf">join_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">Join</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SEMI_ANTI_JOIN_WITH_SIDE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SEMI&quot;</span><span class="p">,</span> <span class="s2">&quot;ANTI&quot;</span><span class="p">):</span>
-</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">side</span>
-</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a>
-</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</span></a> <span class="n">op</span>
-</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="k">for</span> <span class="n">op</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
-</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="n">side</span><span class="p">,</span>
-</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">hint</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1772"><a href="#L-1772"><span class="linenos">1772</span></a> <span class="p">)</span>
-</span><span id="L-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="k">if</span> <span class="n">op</span>
-</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a> <span class="p">)</span>
-</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="n">on_sql</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;on&quot;</span><span class="p">)</span>
-</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a>
-</span><span id="L-1778"><a href="#L-1778"><span class="linenos">1778</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">on_sql</span> <span class="ow">and</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">column</span><span class="p">)</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">using</span><span class="p">))</span>
-</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</span></a>
-</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-1782"><a href="#L-1782"><span class="linenos">1782</span></a> <span class="n">this_sql</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">this</span><span class="p">)</span>
-</span><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a>
-</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">on_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</span></a> <span class="n">space</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">USING (</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1789"><a href="#L-1789"><span class="linenos">1789</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
-</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</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;cross_apply&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1794"><a href="#L-1794"><span class="linenos">1794</span></a>
-</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a>
-</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
-</span><span id="L-1798"><a href="#L-1798"><span class="linenos">1798</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</span></a>
-</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</span></a> <span class="k">def</span> <span class="nf">lambda_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">Lambda</span><span class="p">,</span> <span class="n">arrow_sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">args</span>
-</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">arrow_sep</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1804"><a href="#L-1804"><span class="linenos">1804</span></a>
-</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a> <span class="k">def</span> <span class="nf">lateral_op</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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</span></a> <span class="n">cross_apply</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;cross_apply&quot;</span><span class="p">)</span>
-</span><span id="L-1807"><a href="#L-1807"><span class="linenos">1807</span></a>
-</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</span></a> <span class="c1"># https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/</span>
-</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;INNER JOIN &quot;</span>
-</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a> <span class="k">elif</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
-</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;LEFT JOIN &quot;</span>
-</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</span></a>
-</span><span id="L-1816"><a href="#L-1816"><span class="linenos">1816</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2">LATERAL&quot;</span>
-</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</span></a>
-</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="k">def</span> <span class="nf">lateral_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1819"><a href="#L-1819"><span class="linenos">1819</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1820"><a href="#L-1820"><span class="linenos">1820</span></a>
-</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;view&quot;</span><span class="p">):</span>
-</span><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
-</span><span id="L-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</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">alias</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;LATERAL VIEW</span><span class="si">{</span><span class="s1">&#39; OUTER&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;outer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1827"><a href="#L-1827"><span class="linenos">1827</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</span></a>
-</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lateral_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a> <span class="k">def</span> <span class="nf">having_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">Having</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;HAVING&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1751"><a href="#L-1751"><span class="linenos">1751</span></a>
+</span><span id="L-1752"><a href="#L-1752"><span class="linenos">1752</span></a> <span class="k">def</span> <span class="nf">connect_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">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1753"><a href="#L-1753"><span class="linenos">1753</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;start&quot;</span><span class="p">)</span>
+</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1755"><a href="#L-1755"><span class="linenos">1755</span></a> <span class="n">connect</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;connect&quot;</span><span class="p">)</span>
+</span><span id="L-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
+</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</span></a>
+</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="k">def</span> <span class="nf">prior_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">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIOR </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-1761"><a href="#L-1761"><span class="linenos">1761</span></a>
+</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="k">def</span> <span class="nf">join_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">Join</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SEMI_ANTI_JOIN_WITH_SIDE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SEMI&quot;</span><span class="p">,</span> <span class="s2">&quot;ANTI&quot;</span><span class="p">):</span>
+</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">side</span>
+</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a>
+</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="n">op</span>
+</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="k">for</span> <span class="n">op</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
+</span><span id="L-1772"><a href="#L-1772"><span class="linenos">1772</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="n">side</span><span class="p">,</span>
+</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">hint</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="p">)</span>
+</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="L-1778"><a href="#L-1778"><span class="linenos">1778</span></a> <span class="p">)</span>
+</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="n">on_sql</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;on&quot;</span><span class="p">)</span>
+</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a>
+</span><span id="L-1782"><a href="#L-1782"><span class="linenos">1782</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">on_sql</span> <span class="ow">and</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">column</span><span class="p">)</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">using</span><span class="p">))</span>
+</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a>
+</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</span></a> <span class="n">this_sql</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">this</span><span class="p">)</span>
+</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</span></a>
+</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="L-1789"><a href="#L-1789"><span class="linenos">1789</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">on_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="n">space</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">USING (</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1794"><a href="#L-1794"><span class="linenos">1794</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
+</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</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;cross_apply&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1798"><a href="#L-1798"><span class="linenos">1798</span></a>
+</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</span></a>
+</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
+</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</span></a>
+</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <span class="k">def</span> <span class="nf">lambda_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">Lambda</span><span class="p">,</span> <span class="n">arrow_sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">args</span>
+</span><span id="L-1807"><a href="#L-1807"><span class="linenos">1807</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">arrow_sep</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-1808"><a href="#L-1808"><span class="linenos">1808</span></a>
+</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="k">def</span> <span class="nf">lateral_op</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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="n">cross_apply</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;cross_apply&quot;</span><span class="p">)</span>
+</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a>
+</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="c1"># https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/</span>
+</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;INNER JOIN &quot;</span>
+</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</span></a> <span class="k">elif</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
+</span><span id="L-1816"><a href="#L-1816"><span class="linenos">1816</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;LEFT JOIN &quot;</span>
+</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1819"><a href="#L-1819"><span class="linenos">1819</span></a>
+</span><span id="L-1820"><a href="#L-1820"><span class="linenos">1820</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2">LATERAL&quot;</span>
+</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</span></a>
+</span><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a> <span class="k">def</span> <span class="nf">lateral_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</span></a>
+</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;view&quot;</span><span class="p">):</span>
+</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
+</span><span id="L-1827"><a href="#L-1827"><span class="linenos">1827</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</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">alias</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;LATERAL VIEW</span><span class="si">{</span><span class="s1">&#39; OUTER&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;outer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1832"><a href="#L-1832"><span class="linenos">1832</span></a>
-</span><span id="L-1833"><a href="#L-1833"><span class="linenos">1833</span></a> <span class="k">def</span> <span class="nf">limit_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">Limit</span><span class="p">,</span> <span class="n">top</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="nb">str</span><span class="p">:</span>
-</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</span></a>
-</span><span id="L-1836"><a href="#L-1836"><span class="linenos">1836</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">))</span>
-</span><span id="L-1839"><a href="#L-1839"><span class="linenos">1839</span></a> <span class="k">if</span> <span class="n">e</span>
-</span><span id="L-1840"><a href="#L-1840"><span class="linenos">1840</span></a> <span class="p">]</span>
-</span><span id="L-1841"><a href="#L-1841"><span class="linenos">1841</span></a>
-</span><span id="L-1842"><a href="#L-1842"><span class="linenos">1842</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">top</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">is_number</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span> <span class="k">else</span> <span class="n">args_sql</span>
-</span><span id="L-1844"><a href="#L-1844"><span class="linenos">1844</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1833"><a href="#L-1833"><span class="linenos">1833</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lateral_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1836"><a href="#L-1836"><span class="linenos">1836</span></a>
+</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="k">def</span> <span class="nf">limit_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">Limit</span><span class="p">,</span> <span class="n">top</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="nb">str</span><span class="p">:</span>
+</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1839"><a href="#L-1839"><span class="linenos">1839</span></a>
+</span><span id="L-1840"><a href="#L-1840"><span class="linenos">1840</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-1841"><a href="#L-1841"><span class="linenos">1841</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="L-1842"><a href="#L-1842"><span class="linenos">1842</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">))</span>
+</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</span></a> <span class="k">if</span> <span class="n">e</span>
+</span><span id="L-1844"><a href="#L-1844"><span class="linenos">1844</span></a> <span class="p">]</span>
</span><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</span></a>
-</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</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-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">expression</span>
-</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a> <span class="p">)</span>
-</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OFFSET&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1853"><a href="#L-1853"><span class="linenos">1853</span></a>
-</span><span id="L-1854"><a href="#L-1854"><span class="linenos">1854</span></a> <span class="k">def</span> <span class="nf">setitem_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">SetItem</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
-</span><span id="L-1860"><a href="#L-1860"><span class="linenos">1860</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</span></a> <span class="n">global_</span> <span class="o">=</span> <span class="s2">&quot;GLOBAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">global_</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1863"><a href="#L-1863"><span class="linenos">1863</span></a>
-</span><span id="L-1864"><a href="#L-1864"><span class="linenos">1864</span></a> <span class="k">def</span> <span class="nf">set_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">Set</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</span></a> <span class="p">)</span>
-</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">top</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">is_number</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span> <span class="k">else</span> <span class="n">args_sql</span>
+</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; BY </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1850"><a href="#L-1850"><span class="linenos">1850</span></a>
+</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args_sql</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a>
+</span><span id="L-1853"><a href="#L-1853"><span class="linenos">1853</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-1854"><a href="#L-1854"><span class="linenos">1854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">value</span>
+</span><span id="L-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; BY </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OFFSET&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1860"><a href="#L-1860"><span class="linenos">1860</span></a>
+</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</span></a> <span class="k">def</span> <span class="nf">setitem_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">SetItem</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-1863"><a href="#L-1863"><span class="linenos">1863</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1864"><a href="#L-1864"><span class="linenos">1864</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
+</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</span></a> <span class="n">global_</span> <span class="o">=</span> <span class="s2">&quot;GLOBAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">global_</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-1870"><a href="#L-1870"><span class="linenos">1870</span></a>
-</span><span id="L-1871"><a href="#L-1871"><span class="linenos">1871</span></a> <span class="k">def</span> <span class="nf">pragma_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">Pragma</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1872"><a href="#L-1872"><span class="linenos">1872</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRAGMA </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-1873"><a href="#L-1873"><span class="linenos">1873</span></a>
-</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a> <span class="k">def</span> <span class="nf">lock_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">Lock</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
-</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Locking reads using &#39;FOR UPDATE/SHARE&#39; are not supported&quot;</span><span class="p">)</span>
-</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</span></a>
-</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
-</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="n">wait</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;wait&quot;</span><span class="p">)</span>
-</span><span id="L-1883"><a href="#L-1883"><span class="linenos">1883</span></a>
-</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1885"><a href="#L-1885"><span class="linenos">1885</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-1886"><a href="#L-1886"><span class="linenos">1886</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </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">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
-</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</span></a>
-</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1891"><a href="#L-1891"><span class="linenos">1891</span></a>
-</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</span></a> <span class="k">def</span> <span class="nf">literal_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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-1895"><a href="#L-1895"><span class="linenos">1895</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1896"><a href="#L-1896"><span class="linenos">1896</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="L-1897"><a href="#L-1897"><span class="linenos">1897</span></a>
-</span><span id="L-1898"><a href="#L-1898"><span class="linenos">1898</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">)</span>
-</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span>
-</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span> <span class="n">ch</span><span class="p">)</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="L-1902"><a href="#L-1902"><span class="linenos">1902</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
-</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a>
-</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="k">def</span> <span class="nf">loaddata_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">LoadData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot; LOCAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPATH </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;inpath&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INTO 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-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="n">partition</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;partition&quot;</span><span class="p">)</span>
-</span><span id="L-1912"><a href="#L-1912"><span class="linenos">1912</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
-</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="n">serde</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;serde&quot;</span><span class="p">)</span>
-</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="n">serde</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SERDE </span><span class="si">{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOAD DATA</span><span class="si">{</span><span class="n">local</span><span class="si">}{</span><span class="n">inpath</span><span class="si">}{</span><span class="n">overwrite</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">partition</span><span class="si">}{</span><span class="n">input_format</span><span class="si">}{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a>
-</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="k">def</span> <span class="nf">null_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
-</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</span></a>
-</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="k">def</span> <span class="nf">boolean_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">Boolean</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</span></a> <span class="k">return</span> <span class="s2">&quot;TRUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;FALSE&quot;</span>
-</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</span></a>
-</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</span></a> <span class="k">def</span> <span class="nf">order_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">Order</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
-</span><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="s2">&quot;SIBLINGS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;siblings&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">ORDER </span><span class="si">{</span><span class="n">siblings</span><span class="si">}</span><span class="s2">BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">this</span> <span class="ow">or</span> <span class="n">flat</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</span></a> <span class="n">interpolated_values</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">named_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">named_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-1932"><a href="#L-1932"><span class="linenos">1932</span></a> <span class="k">for</span> <span class="n">named_expression</span> <span class="ow">in</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;interpolate&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-1933"><a href="#L-1933"><span class="linenos">1933</span></a> <span class="p">]</span>
-</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="n">interpolate</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="sa">f</span><span class="s2">&quot; INTERPOLATE (</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">interpolated_values</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">interpolated_values</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a> <span class="p">)</span>
-</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">interpolate</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</span></a>
-</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a> <span class="k">def</span> <span class="nf">withfill_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">WithFill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
-</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</span></a> <span class="n">from_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">from_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">from_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
-</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</span></a> <span class="n">step_sql</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;step&quot;</span><span class="p">)</span>
-</span><span id="L-1945"><a href="#L-1945"><span class="linenos">1945</span></a> <span class="n">step_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; STEP </span><span class="si">{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">step_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1946"><a href="#L-1946"><span class="linenos">1946</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH FILL</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</span></a>
-</span><span id="L-1948"><a href="#L-1948"><span class="linenos">1948</span></a> <span class="k">def</span> <span class="nf">cluster_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">Cluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1949"><a href="#L-1949"><span class="linenos">1949</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</span></a>
-</span><span id="L-1951"><a href="#L-1951"><span class="linenos">1951</span></a> <span class="k">def</span> <span class="nf">distribute_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">Distribute</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1953"><a href="#L-1953"><span class="linenos">1953</span></a>
-</span><span id="L-1954"><a href="#L-1954"><span class="linenos">1954</span></a> <span class="k">def</span> <span class="nf">sort_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">Sort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</span></a>
-</span><span id="L-1957"><a href="#L-1957"><span class="linenos">1957</span></a> <span class="k">def</span> <span class="nf">ordered_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">Ordered</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1958"><a href="#L-1958"><span class="linenos">1958</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
-</span><span id="L-1959"><a href="#L-1959"><span class="linenos">1959</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
+</span><span id="L-1871"><a href="#L-1871"><span class="linenos">1871</span></a> <span class="k">def</span> <span class="nf">set_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">Set</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1872"><a href="#L-1872"><span class="linenos">1872</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a> <span class="p">)</span>
+</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</span></a>
+</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</span></a> <span class="k">def</span> <span class="nf">pragma_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">Pragma</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRAGMA </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-1880"><a href="#L-1880"><span class="linenos">1880</span></a>
+</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="k">def</span> <span class="nf">lock_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">Lock</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-1883"><a href="#L-1883"><span class="linenos">1883</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Locking reads using &#39;FOR UPDATE/SHARE&#39; are not supported&quot;</span><span class="p">)</span>
+</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1885"><a href="#L-1885"><span class="linenos">1885</span></a>
+</span><span id="L-1886"><a href="#L-1886"><span class="linenos">1886</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
+</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</span></a> <span class="n">wait</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;wait&quot;</span><span class="p">)</span>
+</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</span></a>
+</span><span id="L-1891"><a href="#L-1891"><span class="linenos">1891</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </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">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1895"><a href="#L-1895"><span class="linenos">1895</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
+</span><span id="L-1896"><a href="#L-1896"><span class="linenos">1896</span></a>
+</span><span id="L-1897"><a href="#L-1897"><span class="linenos">1897</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1898"><a href="#L-1898"><span class="linenos">1898</span></a>
+</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="k">def</span> <span class="nf">literal_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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-1902"><a href="#L-1902"><span class="linenos">1902</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a>
+</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">)</span>
+</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span>
+</span><span id="L-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span> <span class="n">ch</span><span class="p">)</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
+</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-1912"><a href="#L-1912"><span class="linenos">1912</span></a>
+</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="k">def</span> <span class="nf">loaddata_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">LoadData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot; LOCAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPATH </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;inpath&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INTO 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-1918"><a href="#L-1918"><span class="linenos">1918</span></a> <span class="n">partition</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;partition&quot;</span><span class="p">)</span>
+</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
+</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="n">serde</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;serde&quot;</span><span class="p">)</span>
+</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</span></a> <span class="n">serde</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SERDE </span><span class="si">{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOAD DATA</span><span class="si">{</span><span class="n">local</span><span class="si">}{</span><span class="n">inpath</span><span class="si">}{</span><span class="n">overwrite</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">partition</span><span class="si">}{</span><span class="n">input_format</span><span class="si">}{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</span></a>
+</span><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a> <span class="k">def</span> <span class="nf">null_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</span></a>
+</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</span></a> <span class="k">def</span> <span class="nf">boolean_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">Boolean</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</span></a> <span class="k">return</span> <span class="s2">&quot;TRUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;FALSE&quot;</span>
+</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</span></a>
+</span><span id="L-1932"><a href="#L-1932"><span class="linenos">1932</span></a> <span class="k">def</span> <span class="nf">order_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">Order</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
+</span><span id="L-1933"><a href="#L-1933"><span class="linenos">1933</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="s2">&quot;SIBLINGS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;siblings&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">ORDER </span><span class="si">{</span><span class="n">siblings</span><span class="si">}</span><span class="s2">BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">this</span> <span class="ow">or</span> <span class="n">flat</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="n">interpolated_values</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">named_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">named_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-1939"><a href="#L-1939"><span class="linenos">1939</span></a> <span class="k">for</span> <span class="n">named_expression</span> <span class="ow">in</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;interpolate&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="p">]</span>
+</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</span></a> <span class="n">interpolate</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</span></a> <span class="sa">f</span><span class="s2">&quot; INTERPOLATE (</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">interpolated_values</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">interpolated_values</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</span></a> <span class="p">)</span>
+</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">interpolate</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1945"><a href="#L-1945"><span class="linenos">1945</span></a>
+</span><span id="L-1946"><a href="#L-1946"><span class="linenos">1946</span></a> <span class="k">def</span> <span class="nf">withfill_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">WithFill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
+</span><span id="L-1948"><a href="#L-1948"><span class="linenos">1948</span></a> <span class="n">from_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">from_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">from_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1949"><a href="#L-1949"><span class="linenos">1949</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
+</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1951"><a href="#L-1951"><span class="linenos">1951</span></a> <span class="n">step_sql</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;step&quot;</span><span class="p">)</span>
+</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</span></a> <span class="n">step_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; STEP </span><span class="si">{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">step_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1953"><a href="#L-1953"><span class="linenos">1953</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH FILL</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1954"><a href="#L-1954"><span class="linenos">1954</span></a>
+</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a> <span class="k">def</span> <span class="nf">cluster_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">Cluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1957"><a href="#L-1957"><span class="linenos">1957</span></a>
+</span><span id="L-1958"><a href="#L-1958"><span class="linenos">1958</span></a> <span class="k">def</span> <span class="nf">distribute_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">Distribute</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1959"><a href="#L-1959"><span class="linenos">1959</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-1960"><a href="#L-1960"><span class="linenos">1960</span></a>
-</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</span></a> <span class="n">nulls_first</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;nulls_first&quot;</span><span class="p">)</span>
-</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</span></a> <span class="n">nulls_last</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">nulls_first</span>
-</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</span></a> <span class="n">nulls_are_large</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="L-1964"><a href="#L-1964"><span class="linenos">1964</span></a> <span class="n">nulls_are_small</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a> <span class="n">nulls_are_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</span></a>
-</span><span id="L-1967"><a href="#L-1967"><span class="linenos">1967</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</span></a>
-</span><span id="L-1969"><a href="#L-1969"><span class="linenos">1969</span></a> <span class="n">sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot; ASC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="L-1970"><a href="#L-1970"><span class="linenos">1970</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</span></a> <span class="k">if</span> <span class="n">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="n">nulls_are_last</span>
-</span><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</span></a> <span class="p">):</span>
-</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
-</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</span></a> <span class="n">nulls_last</span>
-</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</span></a> <span class="ow">and</span> <span class="p">((</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">))</span>
-</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
-</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="p">):</span>
-</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS LAST&quot;</span>
-</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a>
-</span><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</span></a> <span class="c1"># If the NULLS FIRST/LAST clause is unsupported, we add another sort key to simulate it</span>
-</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</span></a> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span><span class="p">:</span>
-</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">)</span> <span class="ow">and</span> <span class="n">window</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;spec&quot;</span><span class="p">):</span>
-</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported in window functions&quot;</span>
-</span><span id="L-1988"><a href="#L-1988"><span class="linenos">1988</span></a> <span class="p">)</span>
-</span><span id="L-1989"><a href="#L-1989"><span class="linenos">1989</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1990"><a href="#L-1990"><span class="linenos">1990</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1991"><a href="#L-1991"><span class="linenos">1991</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported with positional ordering&quot;</span>
-</span><span id="L-1994"><a href="#L-1994"><span class="linenos">1994</span></a> <span class="p">)</span>
-</span><span id="L-1995"><a href="#L-1995"><span class="linenos">1995</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</span></a> <span class="n">null_sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="o">==</span> <span class="s2">&quot; NULLS FIRST&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1997"><a href="#L-1997"><span class="linenos">1997</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASE WHEN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS NULL THEN 1 ELSE 0 END</span><span class="si">{</span><span class="n">null_sort_order</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1998"><a href="#L-1998"><span class="linenos">1998</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</span></a>
-</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a> <span class="n">with_fill</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;with_fill&quot;</span><span class="p">)</span>
-</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">with_fill</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</span></a>
-</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2004"><a href="#L-2004"><span class="linenos">2004</span></a>
-</span><span id="L-2005"><a href="#L-2005"><span class="linenos">2005</span></a> <span class="k">def</span> <span class="nf">matchrecognize_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">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2006"><a href="#L-2006"><span class="linenos">2006</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2007"><a href="#L-2007"><span class="linenos">2007</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;measures&quot;</span><span class="p">)</span>
-</span><span id="L-2009"><a href="#L-2009"><span class="linenos">2009</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;MEASURES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">measures</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">measures</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</span></a> <span class="n">rows</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;rows&quot;</span><span class="p">)</span>
-</span><span id="L-2011"><a href="#L-2011"><span class="linenos">2011</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</span></a> <span class="n">after</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;after&quot;</span><span class="p">)</span>
-</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">after</span><span class="p">)</span> <span class="k">if</span> <span class="n">after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
-</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;PATTERN (</span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2016"><a href="#L-2016"><span class="linenos">2016</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-2017"><a href="#L-2017"><span class="linenos">2017</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">definition</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-2018"><a href="#L-2018"><span class="linenos">2018</span></a> <span class="k">for</span> <span class="n">definition</span> <span class="ow">in</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;define&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <span class="p">]</span>
-</span><span id="L-2020"><a href="#L-2020"><span class="linenos">2020</span></a> <span class="n">definitions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">sqls</span><span class="o">=</span><span class="n">definition_sqls</span><span class="p">)</span>
-</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a> <span class="n">define</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;DEFINE</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">definitions</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">definitions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</span></a> <span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-2023"><a href="#L-2023"><span class="linenos">2023</span></a> <span class="p">(</span>
-</span><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="L-2025"><a href="#L-2025"><span class="linenos">2025</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="L-2027"><a href="#L-2027"><span class="linenos">2027</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="L-2031"><a href="#L-2031"><span class="linenos">2031</span></a> <span class="p">)</span>
-</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</span></a> <span class="p">)</span>
-</span><span id="L-2033"><a href="#L-2033"><span class="linenos">2033</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2035"><a href="#L-2035"><span class="linenos">2035</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;MATCH_RECOGNIZE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">body</span><span class="p">)</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</span></a>
-</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="k">def</span> <span class="nf">query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="o">*</span><span class="n">sqls</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</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;limit&quot;</span><span class="p">)</span>
-</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a>
-</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
-</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a>
-</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;LIMIT&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">):</span>
-</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">maybe_copy</span><span class="p">(</span><span class="n">limit</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;count&quot;</span><span class="p">)))</span>
-</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;FETCH&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">):</span>
-</span><span id="L-2046"><a href="#L-2046"><span class="linenos">2046</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="L-2047"><a href="#L-2047"><span class="linenos">2047</span></a>
-</span><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</span></a> <span class="n">fetch</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span>
+</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</span></a> <span class="k">def</span> <span class="nf">sort_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">Sort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</span></a>
+</span><span id="L-1964"><a href="#L-1964"><span class="linenos">1964</span></a> <span class="k">def</span> <span class="nf">ordered_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">Ordered</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
+</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
+</span><span id="L-1967"><a href="#L-1967"><span class="linenos">1967</span></a>
+</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</span></a> <span class="n">nulls_first</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;nulls_first&quot;</span><span class="p">)</span>
+</span><span id="L-1969"><a href="#L-1969"><span class="linenos">1969</span></a> <span class="n">nulls_last</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">nulls_first</span>
+</span><span id="L-1970"><a href="#L-1970"><span class="linenos">1970</span></a> <span class="n">nulls_are_large</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</span></a> <span class="n">nulls_are_small</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a> <span class="n">nulls_are_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</span></a>
+</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</span></a>
+</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</span></a> <span class="n">sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot; ASC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</span></a> <span class="k">if</span> <span class="n">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="n">nulls_are_last</span>
+</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="p">):</span>
+</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
+</span><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</span></a> <span class="n">nulls_last</span>
+</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="ow">and</span> <span class="p">((</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">))</span>
+</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
+</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</span></a> <span class="p">):</span>
+</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS LAST&quot;</span>
+</span><span id="L-1988"><a href="#L-1988"><span class="linenos">1988</span></a>
+</span><span id="L-1989"><a href="#L-1989"><span class="linenos">1989</span></a> <span class="c1"># If the NULLS FIRST/LAST clause is unsupported, we add another sort key to simulate it</span>
+</span><span id="L-1990"><a href="#L-1990"><span class="linenos">1990</span></a> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-1991"><a href="#L-1991"><span class="linenos">1991</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">)</span> <span class="ow">and</span> <span class="n">window</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;spec&quot;</span><span class="p">):</span>
+</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="L-1994"><a href="#L-1994"><span class="linenos">1994</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported in window functions&quot;</span>
+</span><span id="L-1995"><a href="#L-1995"><span class="linenos">1995</span></a> <span class="p">)</span>
+</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1997"><a href="#L-1997"><span class="linenos">1997</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1998"><a href="#L-1998"><span class="linenos">1998</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported with positional ordering&quot;</span>
+</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <span class="p">)</span>
+</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a> <span class="n">null_sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="o">==</span> <span class="s2">&quot; NULLS FIRST&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2004"><a href="#L-2004"><span class="linenos">2004</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASE WHEN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS NULL THEN 1 ELSE 0 END</span><span class="si">{</span><span class="n">null_sort_order</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2005"><a href="#L-2005"><span class="linenos">2005</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2006"><a href="#L-2006"><span class="linenos">2006</span></a>
+</span><span id="L-2007"><a href="#L-2007"><span class="linenos">2007</span></a> <span class="n">with_fill</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;with_fill&quot;</span><span class="p">)</span>
+</span><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">with_fill</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2009"><a href="#L-2009"><span class="linenos">2009</span></a>
+</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2011"><a href="#L-2011"><span class="linenos">2011</span></a>
+</span><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</span></a> <span class="k">def</span> <span class="nf">matchrecognize_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">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;measures&quot;</span><span class="p">)</span>
+</span><span id="L-2016"><a href="#L-2016"><span class="linenos">2016</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;MEASURES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">measures</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">measures</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2017"><a href="#L-2017"><span class="linenos">2017</span></a> <span class="n">rows</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;rows&quot;</span><span class="p">)</span>
+</span><span id="L-2018"><a href="#L-2018"><span class="linenos">2018</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <span class="n">after</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;after&quot;</span><span class="p">)</span>
+</span><span id="L-2020"><a href="#L-2020"><span class="linenos">2020</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">after</span><span class="p">)</span> <span class="k">if</span> <span class="n">after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
+</span><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;PATTERN (</span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2023"><a href="#L-2023"><span class="linenos">2023</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">definition</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-2025"><a href="#L-2025"><span class="linenos">2025</span></a> <span class="k">for</span> <span class="n">definition</span> <span class="ow">in</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;define&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</span></a> <span class="p">]</span>
+</span><span id="L-2027"><a href="#L-2027"><span class="linenos">2027</span></a> <span class="n">definitions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">sqls</span><span class="o">=</span><span class="n">definition_sqls</span><span class="p">)</span>
+</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a> <span class="n">define</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;DEFINE</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">definitions</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">definitions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a> <span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</span></a> <span class="p">(</span>
+</span><span id="L-2031"><a href="#L-2031"><span class="linenos">2031</span></a> <span class="n">partition</span><span class="p">,</span>
+</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="L-2033"><a href="#L-2033"><span class="linenos">2033</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="L-2035"><a href="#L-2035"><span class="linenos">2035</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</span></a> <span class="p">)</span>
+</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a> <span class="p">)</span>
+</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;MATCH_RECOGNIZE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">body</span><span class="p">)</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a>
+</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="k">def</span> <span class="nf">query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="o">*</span><span class="n">sqls</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</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;limit&quot;</span><span class="p">)</span>
+</span><span id="L-2046"><a href="#L-2046"><span class="linenos">2046</span></a>
+</span><span id="L-2047"><a href="#L-2047"><span class="linenos">2047</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
+</span><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
</span><span id="L-2049"><a href="#L-2049"><span class="linenos">2049</span></a>
-</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
-</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
-</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="L-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="p">)</span>
-</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</span></a>
-</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="L-2059"><a href="#L-2059"><span class="linenos">2059</span></a> <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;connect&quot;</span><span class="p">),</span>
-</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</span></a> <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;match&quot;</span><span class="p">),</span>
-</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</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;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <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;where&quot;</span><span class="p">),</span>
-</span><span id="L-2063"><a href="#L-2063"><span class="linenos">2063</span></a> <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;group&quot;</span><span class="p">),</span>
-</span><span id="L-2064"><a href="#L-2064"><span class="linenos">2064</span></a> <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;having&quot;</span><span class="p">),</span>
-</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <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;order&quot;</span><span class="p">),</span>
-</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
-</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</span></a> <span class="p">)</span>
-</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</span></a>
-</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-2076"><a href="#L-2076"><span class="linenos">2076</span></a> <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;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</span></a> <span class="p">]</span>
-</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a>
-</span><span id="L-2080"><a href="#L-2080"><span class="linenos">2080</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <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;qualify&quot;</span><span class="p">),</span>
-</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</span></a> <span class="p">(</span>
-</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
-</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</span></a> <span class="p">),</span>
-</span><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <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;distribute&quot;</span><span class="p">),</span>
-</span><span id="L-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <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;sort&quot;</span><span class="p">),</span>
-</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <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;cluster&quot;</span><span class="p">),</span>
-</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a> <span class="p">]</span>
-</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</span></a>
-</span><span id="L-2093"><a href="#L-2093"><span class="linenos">2093</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-2094"><a href="#L-2094"><span class="linenos">2094</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-2095"><a href="#L-2095"><span class="linenos">2095</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2096"><a href="#L-2096"><span class="linenos">2096</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
-</span><span id="L-2097"><a href="#L-2097"><span class="linenos">2097</span></a>
-</span><span id="L-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="k">def</span> <span class="nf">select_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">Select</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</span></a> <span class="n">into</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;into&quot;</span><span class="p">)</span>
-</span><span id="L-2100"><a href="#L-2100"><span class="linenos">2100</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="L-2101"><a href="#L-2101"><span class="linenos">2101</span></a> <span class="n">into</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</span></a>
-</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</span></a> <span class="n">hint</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;hint&quot;</span><span class="p">)</span>
-</span><span id="L-2104"><a href="#L-2104"><span class="linenos">2104</span></a> <span class="n">distinct</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;distinct&quot;</span><span class="p">)</span>
-</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2109"><a href="#L-2109"><span class="linenos">2109</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2110"><a href="#L-2110"><span class="linenos">2110</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a> <span class="p">)</span>
-</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a>
-</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</span></a>
-</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2117"><a href="#L-2117"><span class="linenos">2117</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
-</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2119"><a href="#L-2119"><span class="linenos">2119</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
-</span><span id="L-2121"><a href="#L-2121"><span class="linenos">2121</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
-</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-2126"><a href="#L-2126"><span class="linenos">2126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
-</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</span></a> <span class="p">)</span>
-</span><span id="L-2129"><a href="#L-2129"><span class="linenos">2129</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</span></a> <span class="p">]</span>
-</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="p">)</span>
-</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</span></a> <span class="p">)</span>
-</span><span id="L-2133"><a href="#L-2133"><span class="linenos">2133</span></a> <span class="p">]</span>
-</span><span id="L-2134"><a href="#L-2134"><span class="linenos">2134</span></a> <span class="p">)</span>
-</span><span id="L-2135"><a href="#L-2135"><span class="linenos">2135</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</span></a>
-</span><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="c1"># We use LIMIT_IS_TOP as a proxy for whether DISTINCT should go first because tsql and Teradata</span>
-</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a> <span class="c1"># are the only dialects that use LIMIT_IS_TOP and both place DISTINCT first.</span>
-</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="n">top_distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">top</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="L-2141"><a href="#L-2141"><span class="linenos">2141</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
-</span><span id="L-2142"><a href="#L-2142"><span class="linenos">2142</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top_distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <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;into&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</span></a> <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;from&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a> <span class="p">)</span>
-</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a>
-</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</span></a>
-</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</span></a> <span class="k">if</span> <span class="n">into</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;temporary&quot;</span><span class="p">):</span>
-</span><span id="L-2152"><a href="#L-2152"><span class="linenos">2152</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span>
-</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="ow">and</span> <span class="n">into</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;unlogged&quot;</span><span class="p">):</span>
-</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span>
-</span><span id="L-2155"><a href="#L-2155"><span class="linenos">2155</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">table_kind</span><span class="si">}</span><span class="s2"> 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">into</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</span></a>
-</span><span id="L-2159"><a href="#L-2159"><span class="linenos">2159</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</span></a>
-</span><span id="L-2161"><a href="#L-2161"><span class="linenos">2161</span></a> <span class="k">def</span> <span class="nf">schema_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2163"><a href="#L-2163"><span class="linenos">2163</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">sql</span> <span class="k">else</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">sql</span>
+</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;LIMIT&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">):</span>
+</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">maybe_copy</span><span class="p">(</span><span class="n">limit</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;count&quot;</span><span class="p">)))</span>
+</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;FETCH&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">):</span>
+</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="L-2054"><a href="#L-2054"><span class="linenos">2054</span></a>
+</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</span></a> <span class="n">fetch</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span>
+</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</span></a>
+</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
+</span><span id="L-2059"><a href="#L-2059"><span class="linenos">2059</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
+</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</span></a> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="p">)</span>
+</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</span></a>
+</span><span id="L-2063"><a href="#L-2063"><span class="linenos">2063</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="L-2064"><a href="#L-2064"><span class="linenos">2064</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <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;connect&quot;</span><span class="p">),</span>
+</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a> <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;match&quot;</span><span class="p">),</span>
+</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</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;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</span></a> <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;where&quot;</span><span class="p">),</span>
+</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</span></a> <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;group&quot;</span><span class="p">),</span>
+</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</span></a> <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;having&quot;</span><span class="p">),</span>
+</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <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;order&quot;</span><span class="p">),</span>
+</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
+</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="L-2076"><a href="#L-2076"><span class="linenos">2076</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</span></a> <span class="p">)</span>
+</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</span></a>
+</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="L-2080"><a href="#L-2080"><span class="linenos">2080</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</span></a> <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;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="p">]</span>
+</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</span></a>
+</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <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;qualify&quot;</span><span class="p">),</span>
+</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="p">(</span>
+</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
+</span><span id="L-2093"><a href="#L-2093"><span class="linenos">2093</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2094"><a href="#L-2094"><span class="linenos">2094</span></a> <span class="p">),</span>
+</span><span id="L-2095"><a href="#L-2095"><span class="linenos">2095</span></a> <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;distribute&quot;</span><span class="p">),</span>
+</span><span id="L-2096"><a href="#L-2096"><span class="linenos">2096</span></a> <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;sort&quot;</span><span class="p">),</span>
+</span><span id="L-2097"><a href="#L-2097"><span class="linenos">2097</span></a> <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;cluster&quot;</span><span class="p">),</span>
+</span><span id="L-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="p">]</span>
+</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</span></a>
+</span><span id="L-2100"><a href="#L-2100"><span class="linenos">2100</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-2101"><a href="#L-2101"><span class="linenos">2101</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
+</span><span id="L-2104"><a href="#L-2104"><span class="linenos">2104</span></a>
+</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="k">def</span> <span class="nf">select_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">Select</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="n">into</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;into&quot;</span><span class="p">)</span>
+</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</span></a> <span class="n">into</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-2109"><a href="#L-2109"><span class="linenos">2109</span></a>
+</span><span id="L-2110"><a href="#L-2110"><span class="linenos">2110</span></a> <span class="n">hint</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;hint&quot;</span><span class="p">)</span>
+</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a> <span class="n">distinct</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;distinct&quot;</span><span class="p">)</span>
+</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2117"><a href="#L-2117"><span class="linenos">2117</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2119"><a href="#L-2119"><span class="linenos">2119</span></a> <span class="p">)</span>
+</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</span></a>
+</span><span id="L-2121"><a href="#L-2121"><span class="linenos">2121</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</span></a>
+</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
+</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2126"><a href="#L-2126"><span class="linenos">2126</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
+</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
+</span><span id="L-2129"><a href="#L-2129"><span class="linenos">2129</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-2133"><a href="#L-2133"><span class="linenos">2133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
+</span><span id="L-2134"><a href="#L-2134"><span class="linenos">2134</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="L-2135"><a href="#L-2135"><span class="linenos">2135</span></a> <span class="p">)</span>
+</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="p">]</span>
+</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a> <span class="p">)</span>
+</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="p">)</span>
+</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="p">]</span>
+</span><span id="L-2141"><a href="#L-2141"><span class="linenos">2141</span></a> <span class="p">)</span>
+</span><span id="L-2142"><a href="#L-2142"><span class="linenos">2142</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a>
+</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <span class="c1"># We use LIMIT_IS_TOP as a proxy for whether DISTINCT should go first because tsql and Teradata</span>
+</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</span></a> <span class="c1"># are the only dialects that use LIMIT_IS_TOP and both place DISTINCT first.</span>
+</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a> <span class="n">top_distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">top</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
+</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top_distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</span></a> <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;into&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-2152"><a href="#L-2152"><span class="linenos">2152</span></a> <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;from&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</span></a> <span class="p">)</span>
+</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</span></a>
+</span><span id="L-2155"><a href="#L-2155"><span class="linenos">2155</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</span></a>
+</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</span></a> <span class="k">if</span> <span class="n">into</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;temporary&quot;</span><span class="p">):</span>
+</span><span id="L-2159"><a href="#L-2159"><span class="linenos">2159</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span>
+</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="ow">and</span> <span class="n">into</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;unlogged&quot;</span><span class="p">):</span>
+</span><span id="L-2161"><a href="#L-2161"><span class="linenos">2161</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span>
+</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2163"><a href="#L-2163"><span class="linenos">2163</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">table_kind</span><span class="si">}</span><span class="s2"> 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">into</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2165"><a href="#L-2165"><span class="linenos">2165</span></a>
-</span><span id="L-2166"><a href="#L-2166"><span class="linenos">2166</span></a> <span class="k">def</span> <span class="nf">schema_columns_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2169"><a href="#L-2169"><span class="linenos">2169</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</span></a>
-</span><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="k">def</span> <span class="nf">star_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">Star</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2172"><a href="#L-2172"><span class="linenos">2172</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;except&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;except&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">except_</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">except_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;replace&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">replace</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;*</span><span class="si">{</span><span class="n">except_</span><span class="si">}{</span><span class="n">replace</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2166"><a href="#L-2166"><span class="linenos">2166</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</span></a>
+</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="k">def</span> <span class="nf">schema_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2169"><a href="#L-2169"><span class="linenos">2169</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">sql</span> <span class="k">else</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">sql</span>
+</span><span id="L-2172"><a href="#L-2172"><span class="linenos">2172</span></a>
+</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a> <span class="k">def</span> <span class="nf">schema_columns_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-2177"><a href="#L-2177"><span class="linenos">2177</span></a>
-</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a> <span class="k">def</span> <span class="nf">parameter_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">Parameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">PARAMETER_TOKEN</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a>
-</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="k">def</span> <span class="nf">sessionparameter_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">SessionParameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2186"><a href="#L-2186"><span class="linenos">2186</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="L-2187"><a href="#L-2187"><span class="linenos">2187</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;@@</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a> <span class="k">def</span> <span class="nf">star_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">Star</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;except&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;except&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">except_</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">except_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;replace&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">replace</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;*</span><span class="si">{</span><span class="n">except_</span><span class="si">}{</span><span class="n">replace</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a>
+</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="k">def</span> <span class="nf">parameter_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">Parameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2186"><a href="#L-2186"><span class="linenos">2186</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2187"><a href="#L-2187"><span class="linenos">2187</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">PARAMETER_TOKEN</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2188"><a href="#L-2188"><span class="linenos">2188</span></a>
-</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;:</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
-</span><span id="L-2191"><a href="#L-2191"><span class="linenos">2191</span></a>
-</span><span id="L-2192"><a href="#L-2192"><span class="linenos">2192</span></a> <span class="k">def</span> <span class="nf">subquery_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">Subquery</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="k">def</span> <span class="nf">sessionparameter_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">SessionParameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2191"><a href="#L-2191"><span class="linenos">2191</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="L-2192"><a href="#L-2192"><span class="linenos">2192</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;@@</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2195"><a href="#L-2195"><span class="linenos">2195</span></a>
-</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;:</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
</span><span id="L-2198"><a href="#L-2198"><span class="linenos">2198</span></a>
-</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
-</span><span id="L-2200"><a href="#L-2200"><span class="linenos">2200</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</span></a>
-</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a> <span class="k">def</span> <span class="nf">qualify_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">Qualify</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2203"><a href="#L-2203"><span class="linenos">2203</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;QUALIFY&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</span></a> <span class="k">def</span> <span class="nf">subquery_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">Subquery</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2200"><a href="#L-2200"><span class="linenos">2200</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a>
+</span><span id="L-2203"><a href="#L-2203"><span class="linenos">2203</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a>
-</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a> <span class="k">def</span> <span class="nf">union_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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="L-2208"><a href="#L-2208"><span class="linenos">2208</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</span></a> <span class="p">)</span>
-</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a>
-</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="k">def</span> <span class="nf">union_op</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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot; DISTINCT&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPLICIT_UNION</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; ALL&quot;</span>
-</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2217"><a href="#L-2217"><span class="linenos">2217</span></a>
-</span><span id="L-2218"><a href="#L-2218"><span class="linenos">2218</span></a> <span class="k">def</span> <span class="nf">unnest_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">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2219"><a href="#L-2219"><span class="linenos">2219</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a>
-</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <span class="n">offset</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;offset&quot;</span><span class="p">)</span>
-</span><span id="L-2223"><a href="#L-2223"><span class="linenos">2223</span></a>
-</span><span id="L-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
-</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
+</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-2208"><a href="#L-2208"><span class="linenos">2208</span></a>
+</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a> <span class="k">def</span> <span class="nf">qualify_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">Qualify</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;QUALIFY&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a>
+</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a> <span class="k">def</span> <span class="nf">union_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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="L-2217"><a href="#L-2217"><span class="linenos">2217</span></a> <span class="p">)</span>
+</span><span id="L-2218"><a href="#L-2218"><span class="linenos">2218</span></a>
+</span><span id="L-2219"><a href="#L-2219"><span class="linenos">2219</span></a> <span class="k">def</span> <span class="nf">union_op</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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot; DISTINCT&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPLICIT_UNION</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; ALL&quot;</span>
+</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2223"><a href="#L-2223"><span class="linenos">2223</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2224"><a href="#L-2224"><span class="linenos">2224</span></a>
+</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</span></a> <span class="k">def</span> <span class="nf">unnest_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">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</span></a>
-</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a> <span class="n">alias</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">columns</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2231"><a href="#L-2231"><span class="linenos">2231</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</span></a> <span class="n">alias</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">alias</span><span class="p">)</span>
-</span><span id="L-2233"><a href="#L-2233"><span class="linenos">2233</span></a>
-</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">alias</span>
-</span><span id="L-2235"><a href="#L-2235"><span class="linenos">2235</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
-</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="n">alias</span>
-</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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-2239"><a href="#L-2239"><span class="linenos">2239</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET AS </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">offset</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2240"><a href="#L-2240"><span class="linenos">2240</span></a> <span class="k">elif</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="L-2241"><a href="#L-2241"><span class="linenos">2241</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET&quot;</span>
-</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2243"><a href="#L-2243"><span class="linenos">2243</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">alias</span>
-</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</span></a>
-</span><span id="L-2245"><a href="#L-2245"><span class="linenos">2245</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNNEST(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</span></a>
-</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</span></a> <span class="k">def</span> <span class="nf">where_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">Where</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WHERE&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</span></a>
-</span><span id="L-2251"><a href="#L-2251"><span class="linenos">2251</span></a> <span class="k">def</span> <span class="nf">window_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">Window</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2253"><a href="#L-2253"><span class="linenos">2253</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2254"><a href="#L-2254"><span class="linenos">2254</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="L-2255"><a href="#L-2255"><span class="linenos">2255</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2256"><a href="#L-2256"><span class="linenos">2256</span></a> <span class="n">spec</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;spec&quot;</span><span class="p">)</span>
-</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a> <span class="n">over</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;over&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;OVER&quot;</span>
-</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</span></a>
-</span><span id="L-2260"><a href="#L-2260"><span class="linenos">2260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39;AS&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">arg_key</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">&#39;windows&#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">over</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2261"><a href="#L-2261"><span class="linenos">2261</span></a>
-</span><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</span></a> <span class="n">first</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;first&quot;</span><span class="p">)</span>
-</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;FIRST&quot;</span> <span class="k">if</span> <span class="n">first</span> <span class="k">else</span> <span class="s2">&quot;LAST&quot;</span>
-</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a>
-</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">order</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">spec</span> <span class="ow">and</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a>
-</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</span></a>
-</span><span id="L-2274"><a href="#L-2274"><span class="linenos">2274</span></a> <span class="k">def</span> <span class="nf">partition_by_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">Window</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a> <span class="n">offset</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;offset&quot;</span><span class="p">)</span>
+</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a>
+</span><span id="L-2231"><a href="#L-2231"><span class="linenos">2231</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
+</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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-2233"><a href="#L-2233"><span class="linenos">2233</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</span></a>
+</span><span id="L-2235"><a href="#L-2235"><span class="linenos">2235</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</span></a> <span class="n">alias</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">columns</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2239"><a href="#L-2239"><span class="linenos">2239</span></a> <span class="n">alias</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">alias</span><span class="p">)</span>
+</span><span id="L-2240"><a href="#L-2240"><span class="linenos">2240</span></a>
+</span><span id="L-2241"><a href="#L-2241"><span class="linenos">2241</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">alias</span>
+</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
+</span><span id="L-2243"><a href="#L-2243"><span class="linenos">2243</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="n">alias</span>
+</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2245"><a href="#L-2245"><span class="linenos">2245</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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-2246"><a href="#L-2246"><span class="linenos">2246</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET AS </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">offset</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</span></a> <span class="k">elif</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET&quot;</span>
+</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">alias</span>
+</span><span id="L-2251"><a href="#L-2251"><span class="linenos">2251</span></a>
+</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNNEST(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2253"><a href="#L-2253"><span class="linenos">2253</span></a>
+</span><span id="L-2254"><a href="#L-2254"><span class="linenos">2254</span></a> <span class="k">def</span> <span class="nf">where_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">Where</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2255"><a href="#L-2255"><span class="linenos">2255</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="L-2256"><a href="#L-2256"><span class="linenos">2256</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WHERE&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</span></a>
+</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a> <span class="k">def</span> <span class="nf">window_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">Window</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2260"><a href="#L-2260"><span class="linenos">2260</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <span class="n">spec</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;spec&quot;</span><span class="p">)</span>
+</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</span></a> <span class="n">over</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;over&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;OVER&quot;</span>
+</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</span></a>
+</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39;AS&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">arg_key</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">&#39;windows&#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">over</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</span></a>
+</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</span></a> <span class="n">first</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;first&quot;</span><span class="p">)</span>
+</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;FIRST&quot;</span> <span class="k">if</span> <span class="n">first</span> <span class="k">else</span> <span class="s2">&quot;LAST&quot;</span>
+</span><span id="L-2274"><a href="#L-2274"><span class="linenos">2274</span></a>
+</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">order</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">spec</span> <span class="ow">and</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2277"><a href="#L-2277"><span class="linenos">2277</span></a>
-</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="k">def</span> <span class="nf">windowspec_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">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</span></a> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-2283"><a href="#L-2283"><span class="linenos">2283</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="L-2284"><a href="#L-2284"><span class="linenos">2284</span></a> <span class="p">)</span>
-</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> 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-2286"><a href="#L-2286"><span class="linenos">2286</span></a>
-</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</span></a> <span class="k">def</span> <span class="nf">withingroup_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">WithinGroup</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a> <span class="n">expression_sql</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 class="mi">1</span><span class="p">:]</span> <span class="c1"># order has a leading space</span>
-</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> WITHIN GROUP (</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</span></a>
-</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a> <span class="k">def</span> <span class="nf">between_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">Between</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2293"><a href="#L-2293"><span class="linenos">2293</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a> <span class="n">low</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;low&quot;</span><span class="p">)</span>
-</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a> <span class="n">high</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;high&quot;</span><span class="p">)</span>
-</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> BETWEEN </span><span class="si">{</span><span class="n">low</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">high</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a>
-</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span>
-</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a> <span class="p">)</span>
-</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">[</span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="L-2306"><a href="#L-2306"><span class="linenos">2306</span></a>
-</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a> <span class="k">def</span> <span class="nf">all_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">All</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</span></a>
-</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</span></a> <span class="k">def</span> <span class="nf">any_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">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ANY </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</span></a>
-</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</span></a> <span class="k">def</span> <span class="nf">exists_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">Exists</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2317"><a href="#L-2317"><span class="linenos">2317</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXISTS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</span></a>
-</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="k">def</span> <span class="nf">case_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">Case</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</span></a> <span class="n">statements</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;CASE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;CASE&quot;</span><span class="p">]</span>
+</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</span></a>
+</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="k">def</span> <span class="nf">partition_by_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">Window</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2283"><a href="#L-2283"><span class="linenos">2283</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2284"><a href="#L-2284"><span class="linenos">2284</span></a>
+</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a> <span class="k">def</span> <span class="nf">windowspec_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">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2286"><a href="#L-2286"><span class="linenos">2286</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</span></a> <span class="p">)</span>
+</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> 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-2293"><a href="#L-2293"><span class="linenos">2293</span></a>
+</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a> <span class="k">def</span> <span class="nf">withingroup_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">WithinGroup</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</span></a> <span class="n">expression_sql</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 class="mi">1</span><span class="p">:]</span> <span class="c1"># order has a leading space</span>
+</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> WITHIN GROUP (</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</span></a>
+</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</span></a> <span class="k">def</span> <span class="nf">between_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">Between</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a> <span class="n">low</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;low&quot;</span><span class="p">)</span>
+</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a> <span class="n">high</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;high&quot;</span><span class="p">)</span>
+</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> BETWEEN </span><span class="si">{</span><span class="n">low</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">high</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a>
+</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2306"><a href="#L-2306"><span class="linenos">2306</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span>
+</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</span></a> <span class="p">)</span>
+</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">[</span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a>
+</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="k">def</span> <span class="nf">all_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">All</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</span></a>
+</span><span id="L-2317"><a href="#L-2317"><span class="linenos">2317</span></a> <span class="k">def</span> <span class="nf">any_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">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ANY </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2322"><a href="#L-2322"><span class="linenos">2322</span></a>
-</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;ifs&quot;</span><span class="p">]:</span>
-</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;THEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</span></a>
-</span><span id="L-2327"><a href="#L-2327"><span class="linenos">2327</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="L-2328"><a href="#L-2328"><span class="linenos">2328</span></a>
-</span><span id="L-2329"><a href="#L-2329"><span class="linenos">2329</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-2330"><a href="#L-2330"><span class="linenos">2330</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ELSE </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2331"><a href="#L-2331"><span class="linenos">2331</span></a>
-</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
+</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</span></a> <span class="k">def</span> <span class="nf">exists_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">Exists</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXISTS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</span></a>
+</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</span></a> <span class="k">def</span> <span class="nf">case_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">Case</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2327"><a href="#L-2327"><span class="linenos">2327</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2328"><a href="#L-2328"><span class="linenos">2328</span></a> <span class="n">statements</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;CASE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;CASE&quot;</span><span class="p">]</span>
+</span><span id="L-2329"><a href="#L-2329"><span class="linenos">2329</span></a>
+</span><span id="L-2330"><a href="#L-2330"><span class="linenos">2330</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;ifs&quot;</span><span class="p">]:</span>
+</span><span id="L-2331"><a href="#L-2331"><span class="linenos">2331</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;THEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-2333"><a href="#L-2333"><span class="linenos">2333</span></a>
-</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
-</span><span id="L-2335"><a href="#L-2335"><span class="linenos">2335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">),</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a>
-</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</span></a> <span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span>
+</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="L-2335"><a href="#L-2335"><span class="linenos">2335</span></a>
+</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ELSE </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-2338"><a href="#L-2338"><span class="linenos">2338</span></a>
-</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</span></a> <span class="k">def</span> <span class="nf">constraint_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">Constraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2340"><a href="#L-2340"><span class="linenos">2340</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
+</span><span id="L-2340"><a href="#L-2340"><span class="linenos">2340</span></a>
+</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
+</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">),</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</span></a>
-</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a> <span class="k">def</span> <span class="nf">nextvaluefor_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">NextValueFor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OVER (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NEXT VALUE FOR </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="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2348"><a href="#L-2348"><span class="linenos">2348</span></a>
-</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a> <span class="k">def</span> <span class="nf">extract_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">Extract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a> <span class="n">expression_sql</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-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</span></a>
-</span><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</span></a>
-</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a> <span class="k">if</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span>
-</span><span id="L-2358"><a href="#L-2358"><span class="linenos">2358</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;LTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-2359"><a href="#L-2359"><span class="linenos">2359</span></a> <span class="k">elif</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span>
-</span><span id="L-2360"><a href="#L-2360"><span class="linenos">2360</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;RTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-2361"><a href="#L-2361"><span class="linenos">2361</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</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;TRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a> <span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span>
+</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a>
+</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a> <span class="k">def</span> <span class="nf">constraint_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">Constraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2348"><a href="#L-2348"><span class="linenos">2348</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a>
+</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a> <span class="k">def</span> <span class="nf">nextvaluefor_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">NextValueFor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OVER (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NEXT VALUE FOR </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="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</span></a>
+</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</span></a> <span class="k">def</span> <span class="nf">extract_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">Extract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-2358"><a href="#L-2358"><span class="linenos">2358</span></a> <span class="n">expression_sql</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-2359"><a href="#L-2359"><span class="linenos">2359</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2360"><a href="#L-2360"><span class="linenos">2360</span></a>
+</span><span id="L-2361"><a href="#L-2361"><span class="linenos">2361</span></a> <span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-2363"><a href="#L-2363"><span class="linenos">2363</span></a>
-</span><span id="L-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="k">def</span> <span class="nf">convert_concat_args</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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-2365"><a href="#L-2365"><span class="linenos">2365</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="k">if</span> <span class="nb">isinstance</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">ConcatWs</span><span class="p">):</span>
-</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># Skip the delimiter</span>
-</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a>
-</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
-</span><span id="L-2371"><a href="#L-2371"><span class="linenos">2371</span></a>
-</span><span id="L-2372"><a href="#L-2372"><span class="linenos">2372</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span> <span class="ow">and</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;coalesce&quot;</span><span class="p">):</span>
-</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</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">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 class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
-</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a>
-</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a> <span class="k">return</span> <span class="n">args</span>
-</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</span></a>
-</span><span id="L-2377"><a href="#L-2377"><span class="linenos">2377</span></a> <span class="k">def</span> <span class="nf">concat_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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</span></a>
-</span><span id="L-2380"><a href="#L-2380"><span class="linenos">2380</span></a> <span class="c1"># Some dialects don&#39;t allow a single-argument CONCAT call</span>
-</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="L-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="k">if</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span>
+</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</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;LTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="k">elif</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span>
+</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</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;RTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</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;TRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</span></a>
+</span><span id="L-2371"><a href="#L-2371"><span class="linenos">2371</span></a> <span class="k">def</span> <span class="nf">convert_concat_args</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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-2372"><a href="#L-2372"><span class="linenos">2372</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="k">if</span> <span class="nb">isinstance</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">ConcatWs</span><span class="p">):</span>
+</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># Skip the delimiter</span>
+</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a>
+</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="L-2377"><a href="#L-2377"><span class="linenos">2377</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a>
+</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span> <span class="ow">and</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;coalesce&quot;</span><span class="p">):</span>
+</span><span id="L-2380"><a href="#L-2380"><span class="linenos">2380</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</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">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 class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</span></a>
+</span><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a> <span class="k">return</span> <span class="n">args</span>
</span><span id="L-2383"><a href="#L-2383"><span class="linenos">2383</span></a>
-</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-2385"><a href="#L-2385"><span class="linenos">2385</span></a>
-</span><span id="L-2386"><a href="#L-2386"><span class="linenos">2386</span></a> <span class="k">def</span> <span class="nf">concatws_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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="p">)</span>
+</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</span></a> <span class="k">def</span> <span class="nf">concat_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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2385"><a href="#L-2385"><span class="linenos">2385</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2386"><a href="#L-2386"><span class="linenos">2386</span></a>
+</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</span></a> <span class="c1"># Some dialects don&#39;t allow a single-argument CONCAT call</span>
+</span><span id="L-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a>
-</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</span></a> <span class="k">def</span> <span class="nf">check_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">Check</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2392"><a href="#L-2392"><span class="linenos">2392</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a>
-</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a> <span class="k">def</span> <span class="nf">foreignkey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2396"><a href="#L-2396"><span class="linenos">2396</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2397"><a href="#L-2397"><span class="linenos">2397</span></a> <span class="n">reference</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;reference&quot;</span><span class="p">)</span>
-</span><span id="L-2398"><a href="#L-2398"><span class="linenos">2398</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">reference</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">reference</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a> <span class="n">delete</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;delete&quot;</span><span class="p">)</span>
-</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON DELETE </span><span class="si">{</span><span class="n">delete</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">delete</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2401"><a href="#L-2401"><span class="linenos">2401</span></a> <span class="n">update</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;update&quot;</span><span class="p">)</span>
-</span><span id="L-2402"><a href="#L-2402"><span class="linenos">2402</span></a> <span class="n">update</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON UPDATE </span><span class="si">{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">update</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOREIGN KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">reference</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2404"><a href="#L-2404"><span class="linenos">2404</span></a>
-</span><span id="L-2405"><a href="#L-2405"><span class="linenos">2405</span></a> <span class="k">def</span> <span class="nf">primarykey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2407"><a href="#L-2407"><span class="linenos">2407</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2410"><a href="#L-2410"><span class="linenos">2410</span></a>
-</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</span></a> <span class="k">def</span> <span class="nf">if_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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</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;false&quot;</span><span class="p">)))</span>
-</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</span></a>
-</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</span></a> <span class="n">modifier</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;modifier&quot;</span><span class="p">)</span>
-</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s1">&#39;MATCH&#39;</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span><span class="si">}</span><span class="s2"> AGAINST(</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="n">modifier</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</span></a>
-</span><span id="L-2419"><a href="#L-2419"><span class="linenos">2419</span></a> <span class="k">def</span> <span class="nf">jsonkeyvalue_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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_PAIR_SEP</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2421"><a href="#L-2421"><span class="linenos">2421</span></a>
-</span><span id="L-2422"><a href="#L-2422"><span class="linenos">2422</span></a> <span class="k">def</span> <span class="nf">jsonpath_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">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-2392"><a href="#L-2392"><span class="linenos">2392</span></a>
+</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="k">def</span> <span class="nf">concatws_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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2396"><a href="#L-2396"><span class="linenos">2396</span></a> <span class="p">)</span>
+</span><span id="L-2397"><a href="#L-2397"><span class="linenos">2397</span></a>
+</span><span id="L-2398"><a href="#L-2398"><span class="linenos">2398</span></a> <span class="k">def</span> <span class="nf">check_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">Check</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2401"><a href="#L-2401"><span class="linenos">2401</span></a>
+</span><span id="L-2402"><a href="#L-2402"><span class="linenos">2402</span></a> <span class="k">def</span> <span class="nf">foreignkey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2404"><a href="#L-2404"><span class="linenos">2404</span></a> <span class="n">reference</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;reference&quot;</span><span class="p">)</span>
+</span><span id="L-2405"><a href="#L-2405"><span class="linenos">2405</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">reference</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">reference</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</span></a> <span class="n">delete</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;delete&quot;</span><span class="p">)</span>
+</span><span id="L-2407"><a href="#L-2407"><span class="linenos">2407</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON DELETE </span><span class="si">{</span><span class="n">delete</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">delete</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</span></a> <span class="n">update</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;update&quot;</span><span class="p">)</span>
+</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</span></a> <span class="n">update</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON UPDATE </span><span class="si">{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">update</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2410"><a href="#L-2410"><span class="linenos">2410</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOREIGN KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">reference</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</span></a>
+</span><span id="L-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="k">def</span> <span class="nf">primarykey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</span></a>
+</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</span></a> <span class="k">def</span> <span class="nf">if_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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2419"><a href="#L-2419"><span class="linenos">2419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</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;false&quot;</span><span class="p">)))</span>
+</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</span></a>
+</span><span id="L-2421"><a href="#L-2421"><span class="linenos">2421</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2422"><a href="#L-2422"><span class="linenos">2422</span></a> <span class="n">modifier</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;modifier&quot;</span><span class="p">)</span>
+</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s1">&#39;MATCH&#39;</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span><span class="si">}</span><span class="s2"> AGAINST(</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="n">modifier</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-2425"><a href="#L-2425"><span class="linenos">2425</span></a>
-</span><span id="L-2426"><a href="#L-2426"><span class="linenos">2426</span></a> <span class="k">def</span> <span class="nf">json_path_part</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="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</span></a> <span class="k">if</span> <span class="nb">isinstance</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">JSONPathPart</span><span class="p">):</span>
-</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="L-2429"><a href="#L-2429"><span class="linenos">2429</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="L-2430"><a href="#L-2430"><span class="linenos">2430</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported JSONPathPart type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2426"><a href="#L-2426"><span class="linenos">2426</span></a> <span class="k">def</span> <span class="nf">jsonkeyvalue_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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_PAIR_SEP</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</span></a>
+</span><span id="L-2429"><a href="#L-2429"><span class="linenos">2429</span></a> <span class="k">def</span> <span class="nf">jsonpath_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">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2430"><a href="#L-2430"><span class="linenos">2430</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2432"><a href="#L-2432"><span class="linenos">2432</span></a>
-</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a> <span class="k">return</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a>
-</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
-</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</span></a>
-</span><span id="L-2438"><a href="#L-2438"><span class="linenos">2438</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span><span class="p">:</span>
-</span><span id="L-2439"><a href="#L-2439"><span class="linenos">2439</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="se">\\</span><span class="s2">&#39;&quot;</span>
-</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
-</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s1">&quot;&#39;</span>
+</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a> <span class="k">def</span> <span class="nf">json_path_part</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="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a> <span class="k">if</span> <span class="nb">isinstance</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">JSONPathPart</span><span class="p">):</span>
+</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported JSONPathPart type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-2438"><a href="#L-2438"><span class="linenos">2438</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2439"><a href="#L-2439"><span class="linenos">2439</span></a>
+</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a> <span class="k">return</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</span></a>
+</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-2444"><a href="#L-2444"><span class="linenos">2444</span></a>
-</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a> <span class="k">return</span> <span class="n">escaped</span>
-</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a>
-</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a> <span class="k">def</span> <span class="nf">formatjson_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">FormatJson</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> FORMAT JSON&quot;</span>
-</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a>
-</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="k">def</span> <span class="nf">jsonobject_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">JSONObject</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span><span class="p">:</span>
+</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="se">\\</span><span class="s2">&#39;&quot;</span>
+</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
+</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s1">&quot;&#39;</span>
+</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</span></a>
+</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="k">return</span> <span class="n">escaped</span>
</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</span></a>
-</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</span></a> <span class="n">unique_keys</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;unique_keys&quot;</span><span class="p">)</span>
-</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="k">if</span> <span class="n">unique_keys</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2456"><a href="#L-2456"><span class="linenos">2456</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;WITH&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">unique_keys</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;WITHOUT&#39;</span><span class="si">}</span><span class="s2"> UNIQUE KEYS&quot;</span>
-</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2458"><a href="#L-2458"><span class="linenos">2458</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a>
-</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="L-2461"><a href="#L-2461"><span class="linenos">2461</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</span></a> <span class="n">encoding</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;encoding&quot;</span><span class="p">)</span>
-</span><span id="L-2463"><a href="#L-2463"><span class="linenos">2463</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ENCODING </span><span class="si">{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">encoding</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</span></a>
-</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span> <span class="k">if</span> <span class="nb">isinstance</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">JSONObject</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">,</span>
-</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="p">)</span>
-</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a>
-</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="k">def</span> <span class="nf">jsonobjectagg_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">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">jsonobject_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a>
-</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="k">def</span> <span class="nf">jsonarray_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">JSONArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="s2">&quot;JSON_ARRAY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a> <span class="p">)</span>
-</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</span></a>
-</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a> <span class="k">def</span> <span class="nf">jsonarrayagg_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">JSONArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="s2">&quot;JSON_ARRAYAGG&quot;</span><span class="p">,</span>
-</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a> <span class="n">this</span><span class="p">,</span>
-</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a> <span class="p">)</span>
-</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="k">def</span> <span class="nf">jsoncolumndef_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">JSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PATH </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="n">nested_schema</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;nested_schema&quot;</span><span class="p">)</span>
-</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a>
-</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="k">if</span> <span class="n">nested_schema</span><span class="p">:</span>
-</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NESTED</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">nested_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a>
-</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a>
-</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="k">def</span> <span class="nf">jsonschema_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">JSONSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</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;COLUMNS&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a>
-</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a> <span class="k">def</span> <span class="nf">jsontable_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">JSONTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="n">error_handling</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;error_handling&quot;</span><span class="p">)</span>
-</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">error_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">error_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="n">empty_handling</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;empty_handling&quot;</span><span class="p">)</span>
-</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">empty_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">path</span><span class="si">}{</span><span class="n">error_handling</span><span class="si">}{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="p">)</span>
-</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a>
-</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_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">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a>
-</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="k">def</span> <span class="nf">openjson_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">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</span></a> <span class="k">def</span> <span class="nf">formatjson_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">FormatJson</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> FORMAT JSON&quot;</span>
+</span><span id="L-2456"><a href="#L-2456"><span class="linenos">2456</span></a>
+</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</span></a> <span class="k">def</span> <span class="nf">jsonobject_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">JSONObject</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2458"><a href="#L-2458"><span class="linenos">2458</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</span></a>
+</span><span id="L-2461"><a href="#L-2461"><span class="linenos">2461</span></a> <span class="n">unique_keys</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;unique_keys&quot;</span><span class="p">)</span>
+</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</span></a> <span class="k">if</span> <span class="n">unique_keys</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2463"><a href="#L-2463"><span class="linenos">2463</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;WITH&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">unique_keys</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;WITHOUT&#39;</span><span class="si">}</span><span class="s2"> UNIQUE KEYS&quot;</span>
+</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a>
+</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="n">encoding</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;encoding&quot;</span><span class="p">)</span>
+</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ENCODING </span><span class="si">{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">encoding</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a>
+</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span> <span class="k">if</span> <span class="nb">isinstance</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">JSONObject</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">,</span>
+</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="p">)</span>
+</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a>
+</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="k">def</span> <span class="nf">jsonobjectagg_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">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">jsonobject_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a>
+</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="k">def</span> <span class="nf">jsonarray_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">JSONArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</span></a> <span class="s2">&quot;JSON_ARRAY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="p">)</span>
+</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</span></a>
+</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="k">def</span> <span class="nf">jsonarrayagg_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">JSONArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="s2">&quot;JSON_ARRAYAGG&quot;</span><span class="p">,</span>
+</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="n">this</span><span class="p">,</span>
+</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="p">)</span>
+</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a>
+</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a> <span class="k">def</span> <span class="nf">jsoncolumndef_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">JSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PATH </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="n">nested_schema</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;nested_schema&quot;</span><span class="p">)</span>
+</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a> <span class="k">if</span> <span class="n">nested_schema</span><span class="p">:</span>
+</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NESTED</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">nested_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a>
+</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a>
+</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="k">def</span> <span class="nf">jsonschema_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">JSONSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</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;COLUMNS&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a>
+</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="k">def</span> <span class="nf">jsontable_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">JSONTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="n">error_handling</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;error_handling&quot;</span><span class="p">)</span>
+</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">error_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">error_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="n">empty_handling</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;empty_handling&quot;</span><span class="p">)</span>
+</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">empty_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">path</span><span class="si">}{</span><span class="n">error_handling</span><span class="si">}{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a> <span class="p">)</span>
+</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a>
+</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_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">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="k">if</span> <span class="n">expressions</span>
-</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="p">)</span>
-</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a>
-</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="k">def</span> <span class="nf">in_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">In</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="n">query</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;query&quot;</span><span class="p">)</span>
-</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="n">unnest</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;unnest&quot;</span><span class="p">)</span>
-</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
-</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="s2">&quot; GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a>
-</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
-</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_unnest_op</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
-</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a> <span class="n">in_sql</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">field</span><span class="p">)</span>
-</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a>
-</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">is_global</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">in_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a>
-</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a> <span class="k">def</span> <span class="nf">in_unnest_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unnest</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(SELECT </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">unnest</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a>
-</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
-</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span><span class="p">:</span>
-</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
-</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_STRING_INTERVAL</span><span class="p">:</span>
-</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a>
-</span><span id="L-2577"><a href="#L-2577"><span class="linenos">2577</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <span class="n">unwrapped</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">)</span>
-</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unwrapped</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a>
-</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a>
+</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="k">def</span> <span class="nf">openjson_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">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="k">if</span> <span class="n">expressions</span>
+</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="p">)</span>
+</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a>
+</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="k">def</span> <span class="nf">in_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">In</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a> <span class="n">query</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;query&quot;</span><span class="p">)</span>
+</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="n">unnest</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;unnest&quot;</span><span class="p">)</span>
+</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="s2">&quot; GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a>
+</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
+</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_unnest_op</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
+</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="n">in_sql</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">field</span><span class="p">)</span>
+</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a>
+</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">is_global</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">in_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a>
+</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="k">def</span> <span class="nf">in_unnest_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unnest</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(SELECT </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">unnest</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a>
+</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
+</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span><span class="p">:</span>
+</span><span id="L-2577"><a href="#L-2577"><span class="linenos">2577</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
+</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a>
+</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_STRING_INTERVAL</span><span class="p">:</span>
+</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a>
-</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="k">def</span> <span class="nf">return_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">Return</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURN </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-2586"><a href="#L-2586"><span class="linenos">2586</span></a>
-</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="k">def</span> <span class="nf">reference_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">Reference</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFERENCES </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a>
-</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="k">def</span> <span class="nf">anonymous_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">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a>
-</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="k">def</span> <span class="nf">paren_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">Paren</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="n">unwrapped</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">)</span>
+</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unwrapped</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a>
+</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a>
+</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="k">def</span> <span class="nf">return_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">Return</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURN </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-2593"><a href="#L-2593"><span class="linenos">2593</span></a>
+</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="k">def</span> <span class="nf">reference_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">Reference</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFERENCES </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a>
+</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="k">def</span> <span class="nf">anonymous_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">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a>
-</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a> <span class="k">def</span> <span class="nf">neg_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">Neg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="c1"># This makes sure we don&#39;t convert &quot;- - 5&quot; to &quot;--5&quot;, which is a comment</span>
-</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="n">this_sql</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-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">this_sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;-</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a>
-</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="k">def</span> <span class="nf">not_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">Not</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NOT </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-2615"><a href="#L-2615"><span class="linenos">2615</span></a>
-</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="k">def</span> <span class="nf">alias_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">Alias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2620"><a href="#L-2620"><span class="linenos">2620</span></a>
-</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="k">def</span> <span class="nf">pivotalias_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">PivotAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
-</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="n">identifier_alias</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
-</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a>
-</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="k">if</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
-</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
-</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a>
-</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="k">def</span> <span class="nf">paren_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">Paren</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a>
+</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a>
+</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="k">def</span> <span class="nf">neg_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">Neg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="c1"># This makes sure we don&#39;t convert &quot;- - 5&quot; to &quot;--5&quot;, which is a comment</span>
+</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="n">this_sql</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-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">this_sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;-</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a>
+</span><span id="L-2620"><a href="#L-2620"><span class="linenos">2620</span></a> <span class="k">def</span> <span class="nf">not_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">Not</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NOT </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-2622"><a href="#L-2622"><span class="linenos">2622</span></a>
+</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="k">def</span> <span class="nf">alias_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">Alias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a>
+</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="k">def</span> <span class="nf">pivotalias_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">PivotAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
+</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="n">identifier_alias</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a>
-</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a> <span class="k">def</span> <span class="nf">aliases_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">Aliases</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a>
-</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="k">def</span> <span class="nf">atindex_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="n">index</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-2638"><a href="#L-2638"><span class="linenos">2638</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a>
-</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="k">def</span> <span class="nf">attimezone_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
-</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a>
-</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="k">def</span> <span class="nf">fromtimezone_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">FromTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
-</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2"> AT TIME ZONE &#39;UTC&#39;&quot;</span>
-</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a>
-</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="k">def</span> <span class="nf">add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;+&quot;</span><span class="p">)</span>
-</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a>
-</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="k">def</span> <span class="nf">and_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">And</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">)</span>
-</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a>
-</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a> <span class="k">def</span> <span class="nf">xor_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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
-</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a>
-</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="k">def</span> <span class="nf">connector_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">Connector</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span>
+</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a> <span class="k">if</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
+</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
+</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a>
+</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a>
+</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="k">def</span> <span class="nf">aliases_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">Aliases</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a>
+</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="k">def</span> <span class="nf">atindex_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="n">index</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-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a>
+</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="k">def</span> <span class="nf">attimezone_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a>
+</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="k">def</span> <span class="nf">fromtimezone_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">FromTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
+</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2"> AT TIME ZONE &#39;UTC&#39;&quot;</span>
+</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a>
+</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="k">def</span> <span class="nf">add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;+&quot;</span><span class="p">)</span>
+</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a>
+</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="k">def</span> <span class="nf">and_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">And</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">)</span>
</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a>
-</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">unnest</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="p">)</span>
-</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a>
-</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span>
-</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a>
-</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="k">def</span> <span class="nf">bitwiseand_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">BitwiseAnd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&amp;&quot;</span><span class="p">)</span>
-</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a>
-</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="k">def</span> <span class="nf">bitwiseleftshift_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">BitwiseLeftShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&lt;&quot;</span><span class="p">)</span>
-</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a>
-</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="k">def</span> <span class="nf">bitwisenot_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">BitwiseNot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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-2679"><a href="#L-2679"><span class="linenos">2679</span></a>
-</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="k">def</span> <span class="nf">bitwiseor_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">BitwiseOr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;|&quot;</span><span class="p">)</span>
-</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a>
-</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="k">def</span> <span class="nf">bitwiserightshift_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">BitwiseRightShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&quot;</span><span class="p">)</span>
-</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a>
-</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="k">def</span> <span class="nf">bitwisexor_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">BitwiseXor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">)</span>
-</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a>
-</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="n">format_sql</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;format&quot;</span><span class="p">)</span>
-</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
-</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS</span><span class="si">{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="k">def</span> <span class="nf">xor_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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a>
+</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="k">def</span> <span class="nf">connector_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">Connector</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span>
+</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a>
+</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">unnest</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a> <span class="p">)</span>
+</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a>
+</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span>
+</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a>
+</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">def</span> <span class="nf">bitwiseand_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">BitwiseAnd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&amp;&quot;</span><span class="p">)</span>
+</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a>
+</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="k">def</span> <span class="nf">bitwiseleftshift_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">BitwiseLeftShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&lt;&quot;</span><span class="p">)</span>
+</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a>
+</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="k">def</span> <span class="nf">bitwisenot_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">BitwiseNot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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-2686"><a href="#L-2686"><span class="linenos">2686</span></a>
+</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="k">def</span> <span class="nf">bitwiseor_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">BitwiseOr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;|&quot;</span><span class="p">)</span>
+</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a>
+</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="k">def</span> <span class="nf">bitwiserightshift_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">BitwiseRightShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&quot;</span><span class="p">)</span>
+</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a>
+</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="k">def</span> <span class="nf">bitwisexor_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">BitwiseXor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">)</span>
</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a>
-</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="k">def</span> <span class="nf">currentdate_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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="n">zone</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-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE(</span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
-</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a>
-</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="k">def</span> <span class="nf">currenttimestamp_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">CurrentTimestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</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;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="n">format_sql</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;format&quot;</span><span class="p">)</span>
+</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
+</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS</span><span class="si">{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a>
-</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="k">def</span> <span class="nf">collate_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">Collate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLLATE_IS_FUNC</span><span class="p">:</span>
-</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;COLLATE&quot;</span><span class="p">)</span>
-</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a>
-</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="k">def</span> <span class="nf">command_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">Command</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a>
-</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a> <span class="k">def</span> <span class="nf">comment_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">Comment</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</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-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="n">expression_sql</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-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="k">def</span> <span class="nf">currentdate_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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="n">zone</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-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE(</span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
+</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a>
+</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="k">def</span> <span class="nf">currenttimestamp_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">CurrentTimestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</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;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a>
+</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a> <span class="k">def</span> <span class="nf">collate_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">Collate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLLATE_IS_FUNC</span><span class="p">:</span>
+</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;COLLATE&quot;</span><span class="p">)</span>
+</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a>
+</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="k">def</span> <span class="nf">command_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">Command</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a>
-</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_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">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="k">def</span> <span class="nf">comment_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">Comment</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="n">recompress</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;recompress&quot;</span><span class="p">)</span>
-</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="n">to_disk</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;to_disk&quot;</span><span class="p">)</span>
-</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="n">to_volume</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;to_volume&quot;</span><span class="p">)</span>
-</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a>
-</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="k">def</span> <span class="nf">mergetreettl_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">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
-</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
-</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a>
-</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a>
-</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a>
-</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
-</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a>
-</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="k">def</span> <span class="nf">commit_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">Commit</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a> <span class="n">chain</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;chain&quot;</span><span class="p">)</span>
-</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a> <span class="k">if</span> <span class="n">chain</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="s2">&quot; AND CHAIN&quot;</span> <span class="k">if</span> <span class="n">chain</span> <span class="k">else</span> <span class="s2">&quot; AND NO CHAIN&quot;</span>
-</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a>
-</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT</span><span class="si">{</span><span class="n">chain</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</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-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="n">expression_sql</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-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a>
+</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_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">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="n">recompress</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;recompress&quot;</span><span class="p">)</span>
+</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="n">to_disk</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;to_disk&quot;</span><span class="p">)</span>
+</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a> <span class="n">to_volume</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;to_volume&quot;</span><span class="p">)</span>
+</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a>
+</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="k">def</span> <span class="nf">mergetreettl_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">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
+</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
+</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a>
+</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a>
+</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a>
+</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a>
-</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a> <span class="k">def</span> <span class="nf">rollback_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">Rollback</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="n">savepoint</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;savepoint&quot;</span><span class="p">)</span>
-</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">savepoint</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a> <span class="k">def</span> <span class="nf">commit_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">Commit</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="n">chain</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;chain&quot;</span><span class="p">)</span>
+</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="k">if</span> <span class="n">chain</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="s2">&quot; AND CHAIN&quot;</span> <span class="k">if</span> <span class="n">chain</span> <span class="k">else</span> <span class="s2">&quot; AND NO CHAIN&quot;</span>
</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a>
-</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="k">def</span> <span class="nf">altercolumn_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">AlterColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a>
-</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">dtype</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;dtype&quot;</span><span class="p">)</span>
-</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
-</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DATA TYPE </span><span class="si">{</span><span class="n">dtype</span><span class="si">}{</span><span class="n">collate</span><span class="si">}{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a>
-</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DEFAULT </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a>
-</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
-</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a>
-</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="k">if</span> <span class="ow">not</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;drop&quot;</span><span class="p">):</span>
-</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported ALTER COLUMN syntax&quot;</span><span class="p">)</span>
+</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT</span><span class="si">{</span><span class="n">chain</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a>
+</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="k">def</span> <span class="nf">rollback_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">Rollback</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">savepoint</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;savepoint&quot;</span><span class="p">)</span>
+</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">savepoint</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a>
+</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="k">def</span> <span class="nf">altercolumn_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">AlterColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a>
+</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="n">dtype</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;dtype&quot;</span><span class="p">)</span>
+</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
+</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DATA TYPE </span><span class="si">{</span><span class="n">dtype</span><span class="si">}{</span><span class="n">collate</span><span class="si">}{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a>
+</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DEFAULT </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a>
-</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DROP DEFAULT&quot;</span>
-</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a>
-</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="k">def</span> <span class="nf">renametable_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">RenameTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
-</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="c1"># Remove db from tables</span>
-</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
-</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="p">)</span>
-</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME TO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</span></a>
-</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="k">def</span> <span class="nf">renamecolumn_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">RenameColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="n">old_column</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-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="n">new_column</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;to&quot;</span><span class="p">)</span>
-</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME COLUMN</span><span class="si">{</span><span class="n">exists</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">old_column</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">new_column</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a>
-</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a> <span class="k">def</span> <span class="nf">altertable_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">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="n">actions</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;actions&quot;</span><span class="p">]</span>
-</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a>
-</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">):</span>
-</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMNS &quot;</span><span class="p">)</span>
-</span><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">):</span>
-</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a>
-</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</span></a> <span class="n">only</span> <span class="o">=</span> <span class="s2">&quot; ONLY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER TABLE</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">only</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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"> </span><span class="si">{</span><span class="n">actions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a>
-</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="k">def</span> <span class="nf">add_column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_INCLUDE_COLUMN_KEYWORD</span><span class="p">:</span>
-</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
-</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
-</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="p">)</span>
-</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a>
-</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="k">def</span> <span class="nf">droppartition_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">DropPartition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a>
-</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="k">def</span> <span class="nf">addconstraint_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">AddConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a> <span class="n">expression_</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-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="n">add_constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;ADD&quot;</span>
-</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a>
-</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="n">enforced</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;enforced&quot;</span><span class="p">)</span>
-</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="k">if</span> <span class="n">enforced</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> CHECK (</span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="s1">&#39; ENFORCED&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">enforced</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a>
-</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a>
-</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="k">def</span> <span class="nf">distinct_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">Distinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a>
-</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
-</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DISTINCT</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a>
-</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="k">def</span> <span class="nf">ignorenulls_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">IgnoreNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">)</span>
-</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a>
-</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="k">def</span> <span class="nf">respectnulls_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">RespectNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">)</span>
-</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a>
-</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="k">def</span> <span class="nf">_embed_ignore_nulls</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">IgnoreNulls</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IGNORE_NULLS_IN_FUNC</span><span class="p">:</span>
-</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">)</span>
-</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">sql</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">this</span><span class="p">)</span>
-</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
+</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a>
+</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="k">if</span> <span class="ow">not</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;drop&quot;</span><span class="p">):</span>
+</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported ALTER COLUMN syntax&quot;</span><span class="p">)</span>
+</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a>
+</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DROP DEFAULT&quot;</span>
+</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a>
+</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a> <span class="k">def</span> <span class="nf">renametable_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">RenameTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
+</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="c1"># Remove db from tables</span>
+</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
+</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="p">)</span>
+</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME TO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a>
+</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">renamecolumn_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">RenameColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="n">old_column</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-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="n">new_column</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;to&quot;</span><span class="p">)</span>
+</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME COLUMN</span><span class="si">{</span><span class="n">exists</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">old_column</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">new_column</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a>
+</span><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <span class="k">def</span> <span class="nf">altertable_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">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="n">actions</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;actions&quot;</span><span class="p">]</span>
+</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a>
+</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">):</span>
+</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMNS &quot;</span><span class="p">)</span>
+</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">):</span>
+</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a>
+</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="n">only</span> <span class="o">=</span> <span class="s2">&quot; ONLY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER TABLE</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">only</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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"> </span><span class="si">{</span><span class="n">actions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a>
+</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="k">def</span> <span class="nf">add_column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_INCLUDE_COLUMN_KEYWORD</span><span class="p">:</span>
+</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
+</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
+</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
+</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a> <span class="p">)</span>
+</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a>
+</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a> <span class="k">def</span> <span class="nf">droppartition_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">DropPartition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</span></a>
+</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="k">def</span> <span class="nf">addconstraint_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">AddConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="n">expression_</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-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <span class="n">add_constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;ADD&quot;</span>
+</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a>
+</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="n">enforced</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;enforced&quot;</span><span class="p">)</span>
+</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="k">if</span> <span class="n">enforced</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> CHECK (</span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="s1">&#39; ENFORCED&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">enforced</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a>
+</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a>
+</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a> <span class="k">def</span> <span class="nf">distinct_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">Distinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a>
+</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">MULTI_ARG_DISTINCT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">case</span><span class="p">()</span>
+</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">case</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
+</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">))</span>
+</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a>
+</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a>
+</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
+</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DISTINCT</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a>
-</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a>
-</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="k">def</span> <span class="nf">intdiv_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">IntDiv</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
-</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</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="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">),</span>
-</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="p">)</span>
-</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="p">)</span>
-</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a>
-</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="k">def</span> <span class="nf">dpipe_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">DPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
-</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">)</span>
-</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a>
-</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="k">def</span> <span class="nf">div_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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a>
-</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="n">r</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">r</span><span class="o">.</span><span class="n">copy</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">0</span><span class="p">)))</span>
-</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a>
-</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</span> <span class="ow">not</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;typed&quot;</span><span class="p">):</span>
-</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">FLOAT_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
-</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a> <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">FLOAT_TYPES</span>
-</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="p">):</span>
-</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="n">l</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <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">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">))</span>
-</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a>
-</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</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;typed&quot;</span><span class="p">):</span>
-</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">):</span>
-</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="n">l</span> <span class="o">/</span> <span class="n">r</span><span class="p">,</span>
-</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</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">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a> <span class="p">)</span>
-</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="p">)</span>
-</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a>
-</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
-</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a>
-</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="k">def</span> <span class="nf">overlaps_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">Overlaps</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">)</span>
+</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="k">def</span> <span class="nf">ignorenulls_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">IgnoreNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">)</span>
+</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a>
+</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="k">def</span> <span class="nf">respectnulls_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">RespectNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">)</span>
+</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a>
+</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="k">def</span> <span class="nf">_embed_ignore_nulls</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">IgnoreNulls</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IGNORE_NULLS_IN_FUNC</span><span class="p">:</span>
+</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">)</span>
+</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="n">sql</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">this</span><span class="p">)</span>
+</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a>
+</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a>
+</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a> <span class="k">def</span> <span class="nf">intdiv_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">IntDiv</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
+</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</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="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">),</span>
+</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="p">)</span>
+</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a> <span class="p">)</span>
+</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a>
+</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="k">def</span> <span class="nf">dpipe_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">DPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
+</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">)</span>
+</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a>
+</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="k">def</span> <span class="nf">div_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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a>
+</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a> <span class="n">r</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">r</span><span class="o">.</span><span class="n">copy</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">0</span><span class="p">)))</span>
+</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a>
+</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</span> <span class="ow">not</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;typed&quot;</span><span class="p">):</span>
+</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">FLOAT_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
+</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <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">FLOAT_TYPES</span>
+</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="p">):</span>
+</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="n">l</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <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">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">))</span>
</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a>
-</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="k">def</span> <span class="nf">distance_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">Distance</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">)</span>
-</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a>
-</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="k">def</span> <span class="nf">dot_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">Dot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a>
-</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">)</span>
+</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</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;typed&quot;</span><span class="p">):</span>
+</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">):</span>
+</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="n">l</span> <span class="o">/</span> <span class="n">r</span><span class="p">,</span>
+</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</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">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a> <span class="p">)</span>
+</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="p">)</span>
</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a>
-</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="k">def</span> <span class="nf">propertyeq_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">PropertyEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:=&quot;</span><span class="p">)</span>
-</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a>
-</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="k">def</span> <span class="nf">escape_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">Escape</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">)</span>
-</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a>
-</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="k">def</span> <span class="nf">glob_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">Glob</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;GLOB&quot;</span><span class="p">)</span>
-</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a>
-</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="k">def</span> <span class="nf">gt_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">GT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
-</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</span></a>
-</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="k">def</span> <span class="nf">gte_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">GTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;=&quot;</span><span class="p">)</span>
-</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a>
-</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="k">def</span> <span class="nf">ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE&quot;</span><span class="p">)</span>
-</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a>
-</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="k">def</span> <span class="nf">ilikeany_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">ILikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">)</span>
-</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</span></a>
-</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="k">def</span> <span class="nf">is_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">Is</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
-</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="p">)</span>
-</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS&quot;</span><span class="p">)</span>
-</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a>
-</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a> <span class="k">def</span> <span class="nf">like_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">Like</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">)</span>
-</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a>
-</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="k">def</span> <span class="nf">likeany_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">LikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">)</span>
-</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a>
-</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <span class="k">def</span> <span class="nf">similarto_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">SimilarTo</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">)</span>
-</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a>
-</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="k">def</span> <span class="nf">lt_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">LT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&quot;</span><span class="p">)</span>
-</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a>
-</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="k">def</span> <span class="nf">lte_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">LTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;=&quot;</span><span class="p">)</span>
-</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a>
-</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a> <span class="k">def</span> <span class="nf">mod_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">Mod</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;%&quot;</span><span class="p">)</span>
-</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a>
-</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="k">def</span> <span class="nf">mul_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">Mul</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">)</span>
-</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a>
-</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">)</span>
-</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a>
-</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="k">def</span> <span class="nf">nullsafeeq_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">NullSafeEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS NOT DISTINCT FROM&quot;</span><span class="p">)</span>
-</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a>
-</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a> <span class="k">def</span> <span class="nf">nullsafeneq_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">NullSafeNEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS DISTINCT FROM&quot;</span><span class="p">)</span>
-</span><span id="L-2964"><a href="#L-2964"><span class="linenos">2964</span></a>
-</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="k">def</span> <span class="nf">or_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">Or</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OR&quot;</span><span class="p">)</span>
-</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a>
-</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="k">def</span> <span class="nf">slice_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">Slice</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">)</span>
-</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a>
-</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="k">def</span> <span class="nf">sub_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">Sub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)</span>
-</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a>
-</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="k">def</span> <span class="nf">trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
-</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a>
-</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="k">def</span> <span class="nf">log_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">Log</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a>
-</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
-</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span><span class="p">,</span> <span class="n">this</span>
-</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</span></a>
-</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</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;LOG&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span><span class="p">)</span>
-</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a>
-</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="k">def</span> <span class="nf">use_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">Use</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USE</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a>
-</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="k">def</span> <span class="nf">binary</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">Binary</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a>
-</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="k">def</span> <span class="nf">function_fallback_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">Func</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
+</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a>
+</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="k">def</span> <span class="nf">overlaps_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">Overlaps</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">)</span>
+</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a>
+</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a> <span class="k">def</span> <span class="nf">distance_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">Distance</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">)</span>
+</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</span></a>
+</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="k">def</span> <span class="nf">dot_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">Dot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a>
+</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">)</span>
+</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a>
+</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="k">def</span> <span class="nf">propertyeq_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">PropertyEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:=&quot;</span><span class="p">)</span>
+</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a>
+</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="k">def</span> <span class="nf">escape_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">Escape</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">)</span>
+</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a>
+</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <span class="k">def</span> <span class="nf">glob_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">Glob</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;GLOB&quot;</span><span class="p">)</span>
+</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a>
+</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="k">def</span> <span class="nf">gt_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">GT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a>
+</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a> <span class="k">def</span> <span class="nf">gte_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">GTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;=&quot;</span><span class="p">)</span>
+</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a>
+</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="k">def</span> <span class="nf">ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE&quot;</span><span class="p">)</span>
+</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a>
+</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a> <span class="k">def</span> <span class="nf">ilikeany_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">ILikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">)</span>
+</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a>
+</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a> <span class="k">def</span> <span class="nf">is_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">Is</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
+</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="p">)</span>
+</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS&quot;</span><span class="p">)</span>
+</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a>
+</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a> <span class="k">def</span> <span class="nf">like_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">Like</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">)</span>
+</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a>
+</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a> <span class="k">def</span> <span class="nf">likeany_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">LikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">)</span>
+</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a>
+</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a> <span class="k">def</span> <span class="nf">similarto_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">SimilarTo</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">)</span>
+</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a>
+</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a> <span class="k">def</span> <span class="nf">lt_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">LT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&quot;</span><span class="p">)</span>
+</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a>
+</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a> <span class="k">def</span> <span class="nf">lte_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">LTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;=&quot;</span><span class="p">)</span>
+</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</span></a>
+</span><span id="L-2964"><a href="#L-2964"><span class="linenos">2964</span></a> <span class="k">def</span> <span class="nf">mod_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">Mod</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;%&quot;</span><span class="p">)</span>
+</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a>
+</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="k">def</span> <span class="nf">mul_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">Mul</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">)</span>
+</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</span></a>
+</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">)</span>
+</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a>
+</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="k">def</span> <span class="nf">nullsafeeq_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">NullSafeEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS NOT DISTINCT FROM&quot;</span><span class="p">)</span>
+</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a>
+</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="k">def</span> <span class="nf">nullsafeneq_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">NullSafeNEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS DISTINCT FROM&quot;</span><span class="p">)</span>
+</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a>
+</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="k">def</span> <span class="nf">or_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">Or</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OR&quot;</span><span class="p">)</span>
+</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</span></a>
+</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="k">def</span> <span class="nf">slice_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">Slice</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">)</span>
+</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a>
+</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a> <span class="k">def</span> <span class="nf">sub_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">Sub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)</span>
+</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a>
+</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="k">def</span> <span class="nf">trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
+</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a>
+</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="k">def</span> <span class="nf">log_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">Log</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a>
+</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
+</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span><span class="p">,</span> <span class="n">this</span>
+</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a>
+</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</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;LOG&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span><span class="p">)</span>
</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a>
-</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="n">arg_value</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="n">key</span><span class="p">)</span>
-</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a>
-</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">arg_value</span><span class="p">:</span>
-</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_value</span><span class="p">)</span>
-</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a>
-</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
-</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="k">def</span> <span class="nf">use_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">Use</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USE</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a>
+</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="k">def</span> <span class="nf">binary</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">Binary</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a>
+</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="k">def</span> <span class="nf">function_fallback_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">Func</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a>
-</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</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">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a>
-</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
-</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
-</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
-</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</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="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a>
-</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="n">arg_sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
-</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;,</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a> <span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span>
-</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a>
-</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="k">def</span> <span class="nf">text_width</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a>
-</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <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;format&quot;</span><span class="p">),</span>
-</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span>
-</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span><span class="p">,</span>
-</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="p">)</span>
-</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a>
-</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="n">sqls</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="n">flat</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
-</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="n">expressions</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="n">key</span> <span class="ow">or</span> <span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="n">sqls</span>
-</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</span></a>
-</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a>
-</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a>
-</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="n">num_sqls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a>
-</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="c1"># These are calculated once in case we have the leading_comma / pretty option set, correspondingly</span>
-</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span>
-</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="n">stripped_sep</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a>
-</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a> <span class="n">sql</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">e</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
-</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="k">continue</span>
-</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a>
-</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a> <span class="n">arg_value</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="n">key</span><span class="p">)</span>
+</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a>
+</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">arg_value</span><span class="p">:</span>
+</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_value</span><span class="p">)</span>
+</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a>
+</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
+</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a>
+</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</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">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a>
+</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
+</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
+</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
+</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</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="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a>
+</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="n">arg_sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
+</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;,</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span>
+</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a>
+</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="k">def</span> <span class="nf">text_width</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a>
+</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a> <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;format&quot;</span><span class="p">),</span>
+</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span>
+</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span><span class="p">,</span>
+</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</span></a> <span class="p">)</span>
+</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a>
+</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
+</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a> <span class="n">sqls</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="n">flat</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
+</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</span></a> <span class="n">expressions</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="n">key</span> <span class="ow">or</span> <span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="n">sqls</span>
+</span><span id="L-3067"><a href="#L-3067"><span class="linenos">3067</span></a>
+</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a>
+</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a>
-</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span><span class="p">:</span>
-</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">pad</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">stripped_sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="p">)</span>
-</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</span></a>
-</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a> <span class="n">result_sql</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span>
-</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
-</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a>
-</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a> <span class="k">def</span> <span class="nf">op_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
-</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a> <span class="n">flat</span> <span class="o">=</span> <span class="n">flat</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span>
-</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">flat</span><span class="p">)</span>
-</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expressions_sql</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a>
-</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="k">def</span> <span class="nf">naked_property</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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
-</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-3099"><a href="#L-3099"><span class="linenos">3099</span></a>
-</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="k">def</span> <span class="nf">set_operation</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">Union</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
-</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
-</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="p">)</span>
-</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a>
-</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</span></a> <span class="k">def</span> <span class="nf">tag_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">Tag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</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="s1">&#39;prefix&#39;</span><span class="p">)</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="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}{</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="s1">&#39;postfix&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a>
-</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">def</span> <span class="nf">token_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">TOKEN_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">token_type</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a>
-</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a> <span class="k">def</span> <span class="nf">userdefinedfunction_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">UserDefinedFunction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wrapped&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a> <span class="p">)</span>
-</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a> <span class="n">num_sqls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a>
+</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a> <span class="c1"># These are calculated once in case we have the leading_comma / pretty option set, correspondingly</span>
+</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span>
+</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a> <span class="n">stripped_sep</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a>
+</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a> <span class="n">sql</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">e</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
+</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a> <span class="k">continue</span>
+</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a>
+</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a>
+</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span><span class="p">:</span>
+</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">pad</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">stripped_sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="p">)</span>
+</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a>
+</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">result_sql</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span>
+</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
+</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a>
+</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="k">def</span> <span class="nf">op_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
+</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="n">flat</span> <span class="o">=</span> <span class="n">flat</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span>
+</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">flat</span><span class="p">)</span>
+</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expressions_sql</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</span></a>
+</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="k">def</span> <span class="nf">naked_property</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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
+</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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-3113"><a href="#L-3113"><span class="linenos">3113</span></a>
+</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</span></a> <span class="k">def</span> <span class="nf">set_operation</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">Union</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
+</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
+</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="p">)</span>
</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a>
-</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a> <span class="k">def</span> <span class="nf">joinhint_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">JoinHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a>
-</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a> <span class="k">def</span> <span class="nf">kwarg_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">Kwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">)</span>
-</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a>
-</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="k">def</span> <span class="nf">when_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">When</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="s2">&quot;MATCHED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;matched&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;NOT MATCHED&quot;</span>
-</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="n">source</span> <span class="o">=</span> <span class="s2">&quot; BY SOURCE&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">MATCHED_BY_SOURCE</span> <span class="ow">and</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;source&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
-</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a> <span class="k">def</span> <span class="nf">tag_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">Tag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</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="s1">&#39;prefix&#39;</span><span class="p">)</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="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}{</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="s1">&#39;postfix&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a>
+</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a> <span class="k">def</span> <span class="nf">token_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">TOKEN_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">token_type</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a>
+</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="k">def</span> <span class="nf">userdefinedfunction_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">UserDefinedFunction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wrapped&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="p">)</span>
+</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a>
-</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="n">then_expression</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;then&quot;</span><span class="p">)</span>
-</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">):</span>
-</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT </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">then_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-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <span class="k">if</span> <span class="s2">&quot;expression&quot;</span> <span class="ow">in</span> <span class="n">then_expression</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
-</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a> <span class="n">then</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; VALUES </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">):</span>
-</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_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;expressions&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">):</span>
-</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="n">then</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">then_expression</span><span class="p">)</span>
-</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="n">matched</span><span class="si">}{</span><span class="n">source</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2"> THEN </span><span class="si">{</span><span class="n">then</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="k">def</span> <span class="nf">joinhint_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">JoinHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a>
+</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a> <span class="k">def</span> <span class="nf">kwarg_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">Kwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">)</span>
+</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a>
+</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="k">def</span> <span class="nf">when_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">When</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="s2">&quot;MATCHED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;matched&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;NOT MATCHED&quot;</span>
+</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="n">source</span> <span class="o">=</span> <span class="s2">&quot; BY SOURCE&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">MATCHED_BY_SOURCE</span> <span class="ow">and</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;source&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
+</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a>
-</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="k">def</span> <span class="nf">merge_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">Merge</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-3151"><a href="#L-3151"><span class="linenos">3151</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a>
-</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</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;hints&quot;</span><span class="p">)</span>
-</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
-</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
-</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a>
-</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;USING </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;using&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON </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;on&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="n">then_expression</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;then&quot;</span><span class="p">)</span>
+</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">):</span>
+</span><span id="L-3151"><a href="#L-3151"><span class="linenos">3151</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT </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">then_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-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="k">if</span> <span class="s2">&quot;expression&quot;</span> <span class="ow">in</span> <span class="n">then_expression</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
+</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="n">then</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; VALUES </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">):</span>
+</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_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;expressions&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">):</span>
+</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a> <span class="n">then</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">then_expression</span><span class="p">)</span>
+</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="n">matched</span><span class="si">}{</span><span class="n">source</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2"> THEN </span><span class="si">{</span><span class="n">then</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a>
-</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;MERGE INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="p">)</span>
+</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="k">def</span> <span class="nf">merge_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">Merge</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a>
-</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="k">def</span> <span class="nf">tochar_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">ToChar</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">):</span>
-</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Format argument unsupported for TO_CHAR/TO_VARCHAR function&quot;</span><span class="p">)</span>
-</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a>
-</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
-</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a>
-</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="k">def</span> <span class="nf">dictproperty_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">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
-</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a>
-</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a> <span class="k">def</span> <span class="nf">dictrange_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">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="nb">max</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;max&quot;</span><span class="p">)</span>
-</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="nb">min</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;min&quot;</span><span class="p">)</span>
-</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a>
-</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_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">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </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;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a>
-</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3190"><a href="#L-3190"><span class="linenos">3190</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a>
-</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_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">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a> <span class="n">buckets</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;buckets&quot;</span><span class="p">)</span>
-</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
-</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a>
-</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="k">def</span> <span class="nf">anyvalue_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a> <span class="n">having</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;having&quot;</span><span class="p">)</span>
+</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</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;hints&quot;</span><span class="p">)</span>
+</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
+</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
+</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</span></a>
+</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;USING </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;using&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON </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;on&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a>
+</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;MERGE INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <span class="p">)</span>
+</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a>
+</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="k">def</span> <span class="nf">tochar_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">ToChar</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">):</span>
+</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Format argument unsupported for TO_CHAR/TO_VARCHAR function&quot;</span><span class="p">)</span>
+</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a>
+</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
+</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a>
+</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="k">def</span> <span class="nf">dictproperty_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">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-3190"><a href="#L-3190"><span class="linenos">3190</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
+</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a>
+</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="k">def</span> <span class="nf">dictrange_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">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a> <span class="nb">max</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;max&quot;</span><span class="p">)</span>
+</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</span></a> <span class="nb">min</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;min&quot;</span><span class="p">)</span>
+</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a>
+</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_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">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </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;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a>
-</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
-</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a>
-</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</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;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a>
-</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="k">def</span> <span class="nf">querytransform_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">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="n">row_format_before</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;row_format_before&quot;</span><span class="p">)</span>
-</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="n">record_writer</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;record_writer&quot;</span><span class="p">)</span>
-</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </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;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a> <span class="n">row_format_after</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;row_format_after&quot;</span><span class="p">)</span>
-</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a> <span class="n">record_reader</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;record_reader&quot;</span><span class="p">)</span>
-</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a>
-</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_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">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a> <span class="n">key_block_size</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;key_block_size&quot;</span><span class="p">)</span>
-</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
-</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a>
-</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a>
-</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="n">parser</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;parser&quot;</span><span class="p">)</span>
-</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a>
-</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
-</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a>
-</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="n">visible</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;visible&quot;</span><span class="p">)</span>
-</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
-</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a>
-</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a> <span class="n">engine_attr</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;engine_attr&quot;</span><span class="p">)</span>
-</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
-</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a>
-</span><span id="L-3248"><a href="#L-3248"><span class="linenos">3248</span></a> <span class="n">secondary_engine_attr</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;secondary_engine_attr&quot;</span><span class="p">)</span>
-</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
-</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a>
-</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
-</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3254"><a href="#L-3254"><span class="linenos">3254</span></a>
-</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_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">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
-</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;index_type&quot;</span><span class="p">)</span>
-</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</span></a>
-</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="k">def</span> <span class="nf">nvl2_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">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
-</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a>
-</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
-</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">],</span>
-</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="p">)</span>
-</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="n">else_cond</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;false&quot;</span><span class="p">)</span>
-</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
-</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a>
-</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
-</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a>
-</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="k">def</span> <span class="nf">comprehension_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">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a> <span class="n">expr</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-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="n">iterator</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;iterator&quot;</span><span class="p">)</span>
-</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
-</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3290"><a href="#L-3290"><span class="linenos">3290</span></a>
-</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="k">def</span> <span class="nf">columnprefix_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">ColumnPrefix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a>
-</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="k">def</span> <span class="nf">opclass_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">Opclass</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_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">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="n">buckets</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;buckets&quot;</span><span class="p">)</span>
+</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
+</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a>
+</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="k">def</span> <span class="nf">anyvalue_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a> <span class="n">having</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;having&quot;</span><span class="p">)</span>
+</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</span></a>
+</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
+</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a>
+</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</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;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a>
+</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a> <span class="k">def</span> <span class="nf">querytransform_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">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a> <span class="n">row_format_before</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;row_format_before&quot;</span><span class="p">)</span>
+</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a> <span class="n">record_writer</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;record_writer&quot;</span><span class="p">)</span>
+</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </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;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="n">row_format_after</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;row_format_after&quot;</span><span class="p">)</span>
+</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="n">record_reader</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;record_reader&quot;</span><span class="p">)</span>
+</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a>
+</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_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">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="n">key_block_size</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;key_block_size&quot;</span><span class="p">)</span>
+</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
+</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a>
+</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a>
+</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="n">parser</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;parser&quot;</span><span class="p">)</span>
+</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-3248"><a href="#L-3248"><span class="linenos">3248</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a>
+</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
+</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a>
+</span><span id="L-3254"><a href="#L-3254"><span class="linenos">3254</span></a> <span class="n">visible</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;visible&quot;</span><span class="p">)</span>
+</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
+</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a>
+</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a> <span class="n">engine_attr</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;engine_attr&quot;</span><span class="p">)</span>
+</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
+</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a>
+</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a> <span class="n">secondary_engine_attr</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;secondary_engine_attr&quot;</span><span class="p">)</span>
+</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
+</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a>
+</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
+</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a>
+</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_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">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
+</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;index_type&quot;</span><span class="p">)</span>
+</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a>
+</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a> <span class="k">def</span> <span class="nf">nvl2_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">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
+</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a>
+</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">],</span>
+</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3290"><a href="#L-3290"><span class="linenos">3290</span></a> <span class="p">)</span>
+</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="n">else_cond</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;false&quot;</span><span class="p">)</span>
+</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
+</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a>
+</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
</span><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a>
-</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="k">def</span> <span class="nf">predict_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">Predict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="n">model</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-3299"><a href="#L-3299"><span class="linenos">3299</span></a> <span class="n">model</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;MODEL </span><span class="si">{</span><span class="n">model</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="n">table</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-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;TABLE </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="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span> <span class="k">else</span> <span class="n">table</span>
-</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a> <span class="n">parameters</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;params_struct&quot;</span><span class="p">)</span>
-</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</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;PREDICT&quot;</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">parameters</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="k">def</span> <span class="nf">comprehension_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">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a> <span class="n">expr</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-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="n">iterator</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;iterator&quot;</span><span class="p">)</span>
+</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
+</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a>
-</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="k">def</span> <span class="nf">forin_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">ForIn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a> <span class="n">expression_sql</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-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DO </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a>
-</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="k">def</span> <span class="nf">refresh_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">Refresh</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;TABLE &quot;</span>
-</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFRESH </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a>
-</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="k">def</span> <span class="nf">operator_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">Operator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;OPERATOR(</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;operator&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
-</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a>
-</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a> <span class="k">def</span> <span class="nf">toarray_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">ToArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
-</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a>
-</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a>
-</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
-</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a>
-</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a> <span class="n">cond_for_null</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
-</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">cond_for_null</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">arg</span><span class="p">])))</span>
-</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a>
-</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a> <span class="k">def</span> <span class="nf">tsordstotime_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">TsOrDsToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToTime</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">):</span>
-</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a>
-</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;time&quot;</span><span class="p">))</span>
-</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a>
-</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span class="k">def</span> <span class="nf">tsordstodate_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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="k">def</span> <span class="nf">columnprefix_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">ColumnPrefix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a>
+</span><span id="L-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="k">def</span> <span class="nf">opclass_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">Opclass</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a>
+</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="k">def</span> <span class="nf">predict_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">Predict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="n">model</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-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="n">model</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;MODEL </span><span class="si">{</span><span class="n">model</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a> <span class="n">table</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-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;TABLE </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="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="n">parameters</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;params_struct&quot;</span><span class="p">)</span>
+</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</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;PREDICT&quot;</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">parameters</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a>
+</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="k">def</span> <span class="nf">forin_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">ForIn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="n">expression_sql</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-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DO </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a>
+</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="k">def</span> <span class="nf">refresh_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">Refresh</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;TABLE &quot;</span>
+</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFRESH </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a>
+</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="k">def</span> <span class="nf">operator_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">Operator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;OPERATOR(</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;operator&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
+</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a>
+</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="k">def</span> <span class="nf">toarray_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">ToArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
+</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a>
+</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a>
+</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
+</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a>
-</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
-</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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">expression</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 class="s2">&quot;date&quot;</span><span class="p">)</span>
-</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="p">)</span>
-</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a>
-</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
+</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</span></a> <span class="n">cond_for_null</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
+</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">cond_for_null</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">arg</span><span class="p">])))</span>
+</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</span></a>
+</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="k">def</span> <span class="nf">tsordstotime_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">TsOrDsToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToTime</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">):</span>
</span><span id="L-3348"><a href="#L-3348"><span class="linenos">3348</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-3349"><a href="#L-3349"><span class="linenos">3349</span></a>
-</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
+</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;time&quot;</span><span class="p">))</span>
</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a>
-</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a> <span class="k">def</span> <span class="nf">unixdate_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">UnixDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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;1970-01-01&quot;</span><span class="p">),</span> <span class="s2">&quot;date&quot;</span><span class="p">),</span>
-</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
+</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a> <span class="k">def</span> <span class="nf">tsordstodate_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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a>
+</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
+</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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">expression</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 class="s2">&quot;date&quot;</span><span class="p">)</span>
</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</span></a> <span class="p">)</span>
-</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</span></a> <span class="p">)</span>
-</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a>
-</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="k">def</span> <span class="nf">lastday_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">LastDay</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3363"><a href="#L-3363"><span class="linenos">3363</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAST_DAY_SUPPORTS_DATE_PART</span><span class="p">:</span>
-</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</span></a>
+</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
+</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3363"><a href="#L-3363"><span class="linenos">3363</span></a>
+</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</span></a>
-</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit</span> <span class="o">!=</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Date parts are not supported in LAST_DAY.&quot;</span><span class="p">)</span>
-</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a>
-</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</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;LAST_DAY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a>
-</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="k">def</span> <span class="nf">_jsonpathkey_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">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">):</span>
-</span><span id="L-3375"><a href="#L-3375"><span class="linenos">3375</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a>
-</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">this</span><span class="p">):</span>
-</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a>
-</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a> <span class="k">def</span> <span class="nf">unixdate_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">UnixDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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;1970-01-01&quot;</span><span class="p">),</span> <span class="s2">&quot;date&quot;</span><span class="p">),</span>
+</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
+</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</span></a> <span class="p">)</span>
+</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a> <span class="p">)</span>
+</span><span id="L-3375"><a href="#L-3375"><span class="linenos">3375</span></a>
+</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="k">def</span> <span class="nf">lastday_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">LastDay</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAST_DAY_SUPPORTS_DATE_PART</span><span class="p">:</span>
+</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a>
+</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit</span> <span class="o">!=</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Date parts are not supported in LAST_DAY.&quot;</span><span class="p">)</span>
</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a>
-</span><span id="L-3384"><a href="#L-3384"><span class="linenos">3384</span></a> <span class="k">def</span> <span class="nf">_jsonpathsubscript_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">JSONPathSubscript</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</span></a>
-</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a> <span class="k">def</span> <span class="nf">_simplify_unless_literal</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Literal</span><span class="p">):</span>
-</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
+</span><span id="L-3384"><a href="#L-3384"><span class="linenos">3384</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;LAST_DAY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a>
+</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="k">def</span> <span class="nf">_jsonpathkey_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">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">):</span>
+</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a>
-</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-3393"><a href="#L-3393"><span class="linenos">3393</span></a>
-</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</span></a>
-</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="k">def</span> <span class="nf">_ensure_string_if_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-3397"><a href="#L-3397"><span class="linenos">3397</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;text&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;&quot;</span><span class="p">))</span>
-</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span>
-</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="k">if</span> <span class="n">value</span>
-</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</span></a> <span class="p">]</span>
+</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">this</span><span class="p">):</span>
+</span><span id="L-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a>
+</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3397"><a href="#L-3397"><span class="linenos">3397</span></a>
+</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="k">def</span> <span class="nf">_jsonpathsubscript_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">JSONPathSubscript</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</span></a>
+</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="k">def</span> <span class="nf">_simplify_unless_literal</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Literal</span><span class="p">):</span>
+</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
+</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a>
+</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a>
+</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a>
+</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a> <span class="k">def</span> <span class="nf">_ensure_string_if_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-3411"><a href="#L-3411"><span class="linenos">3411</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;text&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;&quot;</span><span class="p">))</span>
+</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span>
+</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a> <span class="k">if</span> <span class="n">value</span>
+</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a> <span class="p">]</span>
</span></pre></div>
@@ -4914,3109 +4931,3123 @@
</span><span id="Generator-297"><a href="#Generator-297"><span class="linenos"> 297</span></a> <span class="c1"># Whether or not the LikeProperty needs to be specified inside of the schema clause</span>
</span><span id="Generator-298"><a href="#Generator-298"><span class="linenos"> 298</span></a> <span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Generator-299"><a href="#Generator-299"><span class="linenos"> 299</span></a>
-</span><span id="Generator-300"><a href="#Generator-300"><span class="linenos"> 300</span></a> <span class="c1"># Whether or not the JSON extraction operators expect a value of type JSON</span>
-</span><span id="Generator-301"><a href="#Generator-301"><span class="linenos"> 301</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-302"><a href="#Generator-302"><span class="linenos"> 302</span></a>
-</span><span id="Generator-303"><a href="#Generator-303"><span class="linenos"> 303</span></a> <span class="c1"># Whether or not bracketed keys like [&quot;foo&quot;] are supported in JSON paths</span>
-</span><span id="Generator-304"><a href="#Generator-304"><span class="linenos"> 304</span></a> <span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Generator-305"><a href="#Generator-305"><span class="linenos"> 305</span></a>
-</span><span id="Generator-306"><a href="#Generator-306"><span class="linenos"> 306</span></a> <span class="c1"># Whether or not to escape keys using single quotes in JSON paths</span>
-</span><span id="Generator-307"><a href="#Generator-307"><span class="linenos"> 307</span></a> <span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-308"><a href="#Generator-308"><span class="linenos"> 308</span></a>
-</span><span id="Generator-309"><a href="#Generator-309"><span class="linenos"> 309</span></a> <span class="c1"># The JSONPathPart expressions supported by this dialect</span>
-</span><span id="Generator-310"><a href="#Generator-310"><span class="linenos"> 310</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="n">ALL_JSON_PATH_PARTS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator-311"><a href="#Generator-311"><span class="linenos"> 311</span></a>
-</span><span id="Generator-312"><a href="#Generator-312"><span class="linenos"> 312</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-313"><a href="#Generator-313"><span class="linenos"> 313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
-</span><span id="Generator-314"><a href="#Generator-314"><span class="linenos"> 314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
-</span><span id="Generator-315"><a href="#Generator-315"><span class="linenos"> 315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="Generator-316"><a href="#Generator-316"><span class="linenos"> 316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="Generator-317"><a href="#Generator-317"><span class="linenos"> 317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
-</span><span id="Generator-318"><a href="#Generator-318"><span class="linenos"> 318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Generator-319"><a href="#Generator-319"><span class="linenos"> 319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Generator-320"><a href="#Generator-320"><span class="linenos"> 320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Generator-321"><a href="#Generator-321"><span class="linenos"> 321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
-</span><span id="Generator-322"><a href="#Generator-322"><span class="linenos"> 322</span></a> <span class="p">}</span>
-</span><span id="Generator-323"><a href="#Generator-323"><span class="linenos"> 323</span></a>
-</span><span id="Generator-324"><a href="#Generator-324"><span class="linenos"> 324</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-325"><a href="#Generator-325"><span class="linenos"> 325</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span>
-</span><span id="Generator-326"><a href="#Generator-326"><span class="linenos"> 326</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span>
-</span><span id="Generator-327"><a href="#Generator-327"><span class="linenos"> 327</span></a> <span class="p">}</span>
-</span><span id="Generator-328"><a href="#Generator-328"><span class="linenos"> 328</span></a>
-</span><span id="Generator-329"><a href="#Generator-329"><span class="linenos"> 329</span></a> <span class="n">TIME_PART_SINGULARS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-330"><a href="#Generator-330"><span class="linenos"> 330</span></a> <span class="s2">&quot;MICROSECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">,</span>
-</span><span id="Generator-331"><a href="#Generator-331"><span class="linenos"> 331</span></a> <span class="s2">&quot;SECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">,</span>
-</span><span id="Generator-332"><a href="#Generator-332"><span class="linenos"> 332</span></a> <span class="s2">&quot;MINUTES&quot;</span><span class="p">:</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">,</span>
-</span><span id="Generator-333"><a href="#Generator-333"><span class="linenos"> 333</span></a> <span class="s2">&quot;HOURS&quot;</span><span class="p">:</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">,</span>
-</span><span id="Generator-334"><a href="#Generator-334"><span class="linenos"> 334</span></a> <span class="s2">&quot;DAYS&quot;</span><span class="p">:</span> <span class="s2">&quot;DAY&quot;</span><span class="p">,</span>
-</span><span id="Generator-335"><a href="#Generator-335"><span class="linenos"> 335</span></a> <span class="s2">&quot;WEEKS&quot;</span><span class="p">:</span> <span class="s2">&quot;WEEK&quot;</span><span class="p">,</span>
-</span><span id="Generator-336"><a href="#Generator-336"><span class="linenos"> 336</span></a> <span class="s2">&quot;MONTHS&quot;</span><span class="p">:</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">,</span>
-</span><span id="Generator-337"><a href="#Generator-337"><span class="linenos"> 337</span></a> <span class="s2">&quot;QUARTERS&quot;</span><span class="p">:</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">,</span>
-</span><span id="Generator-338"><a href="#Generator-338"><span class="linenos"> 338</span></a> <span class="s2">&quot;YEARS&quot;</span><span class="p">:</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">,</span>
-</span><span id="Generator-339"><a href="#Generator-339"><span class="linenos"> 339</span></a> <span class="p">}</span>
-</span><span id="Generator-340"><a href="#Generator-340"><span class="linenos"> 340</span></a>
-</span><span id="Generator-341"><a href="#Generator-341"><span class="linenos"> 341</span></a> <span class="n">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Generator-342"><a href="#Generator-342"><span class="linenos"> 342</span></a>
-</span><span id="Generator-343"><a href="#Generator-343"><span class="linenos"> 343</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-300"><a href="#Generator-300"><span class="linenos"> 300</span></a> <span class="c1"># Whether or not DISTINCT can be followed by multiple args in an AggFunc. If not, it will be</span>
+</span><span id="Generator-301"><a href="#Generator-301"><span class="linenos"> 301</span></a> <span class="c1"># transpiled into a series of CASE-WHEN-ELSE, ultimately using a tuple conseisting of the args</span>
+</span><span id="Generator-302"><a href="#Generator-302"><span class="linenos"> 302</span></a> <span class="n">MULTI_ARG_DISTINCT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-303"><a href="#Generator-303"><span class="linenos"> 303</span></a>
+</span><span id="Generator-304"><a href="#Generator-304"><span class="linenos"> 304</span></a> <span class="c1"># Whether or not the JSON extraction operators expect a value of type JSON</span>
+</span><span id="Generator-305"><a href="#Generator-305"><span class="linenos"> 305</span></a> <span class="n">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-306"><a href="#Generator-306"><span class="linenos"> 306</span></a>
+</span><span id="Generator-307"><a href="#Generator-307"><span class="linenos"> 307</span></a> <span class="c1"># Whether or not bracketed keys like [&quot;foo&quot;] are supported in JSON paths</span>
+</span><span id="Generator-308"><a href="#Generator-308"><span class="linenos"> 308</span></a> <span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Generator-309"><a href="#Generator-309"><span class="linenos"> 309</span></a>
+</span><span id="Generator-310"><a href="#Generator-310"><span class="linenos"> 310</span></a> <span class="c1"># Whether or not to escape keys using single quotes in JSON paths</span>
+</span><span id="Generator-311"><a href="#Generator-311"><span class="linenos"> 311</span></a> <span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-312"><a href="#Generator-312"><span class="linenos"> 312</span></a>
+</span><span id="Generator-313"><a href="#Generator-313"><span class="linenos"> 313</span></a> <span class="c1"># The JSONPathPart expressions supported by this dialect</span>
+</span><span id="Generator-314"><a href="#Generator-314"><span class="linenos"> 314</span></a> <span class="n">SUPPORTED_JSON_PATH_PARTS</span> <span class="o">=</span> <span class="n">ALL_JSON_PATH_PARTS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator-315"><a href="#Generator-315"><span class="linenos"> 315</span></a>
+</span><span id="Generator-316"><a href="#Generator-316"><span class="linenos"> 316</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-317"><a href="#Generator-317"><span class="linenos"> 317</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;CHAR&quot;</span><span class="p">,</span>
+</span><span id="Generator-318"><a href="#Generator-318"><span class="linenos"> 318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
+</span><span id="Generator-319"><a href="#Generator-319"><span class="linenos"> 319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="Generator-320"><a href="#Generator-320"><span class="linenos"> 320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="Generator-321"><a href="#Generator-321"><span class="linenos"> 321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
+</span><span id="Generator-322"><a href="#Generator-322"><span class="linenos"> 322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Generator-323"><a href="#Generator-323"><span class="linenos"> 323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Generator-324"><a href="#Generator-324"><span class="linenos"> 324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Generator-325"><a href="#Generator-325"><span class="linenos"> 325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INET</span><span class="p">:</span> <span class="s2">&quot;INET&quot;</span><span class="p">,</span>
+</span><span id="Generator-326"><a href="#Generator-326"><span class="linenos"> 326</span></a> <span class="p">}</span>
+</span><span id="Generator-327"><a href="#Generator-327"><span class="linenos"> 327</span></a>
+</span><span id="Generator-328"><a href="#Generator-328"><span class="linenos"> 328</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-329"><a href="#Generator-329"><span class="linenos"> 329</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span>
+</span><span id="Generator-330"><a href="#Generator-330"><span class="linenos"> 330</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span>
+</span><span id="Generator-331"><a href="#Generator-331"><span class="linenos"> 331</span></a> <span class="p">}</span>
+</span><span id="Generator-332"><a href="#Generator-332"><span class="linenos"> 332</span></a>
+</span><span id="Generator-333"><a href="#Generator-333"><span class="linenos"> 333</span></a> <span class="n">TIME_PART_SINGULARS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-334"><a href="#Generator-334"><span class="linenos"> 334</span></a> <span class="s2">&quot;MICROSECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">,</span>
+</span><span id="Generator-335"><a href="#Generator-335"><span class="linenos"> 335</span></a> <span class="s2">&quot;SECONDS&quot;</span><span class="p">:</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">,</span>
+</span><span id="Generator-336"><a href="#Generator-336"><span class="linenos"> 336</span></a> <span class="s2">&quot;MINUTES&quot;</span><span class="p">:</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">,</span>
+</span><span id="Generator-337"><a href="#Generator-337"><span class="linenos"> 337</span></a> <span class="s2">&quot;HOURS&quot;</span><span class="p">:</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">,</span>
+</span><span id="Generator-338"><a href="#Generator-338"><span class="linenos"> 338</span></a> <span class="s2">&quot;DAYS&quot;</span><span class="p">:</span> <span class="s2">&quot;DAY&quot;</span><span class="p">,</span>
+</span><span id="Generator-339"><a href="#Generator-339"><span class="linenos"> 339</span></a> <span class="s2">&quot;WEEKS&quot;</span><span class="p">:</span> <span class="s2">&quot;WEEK&quot;</span><span class="p">,</span>
+</span><span id="Generator-340"><a href="#Generator-340"><span class="linenos"> 340</span></a> <span class="s2">&quot;MONTHS&quot;</span><span class="p">:</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">,</span>
+</span><span id="Generator-341"><a href="#Generator-341"><span class="linenos"> 341</span></a> <span class="s2">&quot;QUARTERS&quot;</span><span class="p">:</span> <span class="s2">&quot;QUARTER&quot;</span><span class="p">,</span>
+</span><span id="Generator-342"><a href="#Generator-342"><span class="linenos"> 342</span></a> <span class="s2">&quot;YEARS&quot;</span><span class="p">:</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">,</span>
+</span><span id="Generator-343"><a href="#Generator-343"><span class="linenos"> 343</span></a> <span class="p">}</span>
</span><span id="Generator-344"><a href="#Generator-344"><span class="linenos"> 344</span></a>
-</span><span id="Generator-345"><a href="#Generator-345"><span class="linenos"> 345</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</span>
+</span><span id="Generator-345"><a href="#Generator-345"><span class="linenos"> 345</span></a> <span class="n">TOKEN_MAPPING</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">TokenType</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Generator-346"><a href="#Generator-346"><span class="linenos"> 346</span></a>
-</span><span id="Generator-347"><a href="#Generator-347"><span class="linenos"> 347</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Generator-348"><a href="#Generator-348"><span class="linenos"> 348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-349"><a href="#Generator-349"><span class="linenos"> 349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-350"><a href="#Generator-350"><span class="linenos"> 350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-351"><a href="#Generator-351"><span class="linenos"> 351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-352"><a href="#Generator-352"><span class="linenos"> 352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-353"><a href="#Generator-353"><span class="linenos"> 353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-354"><a href="#Generator-354"><span class="linenos"> 354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-355"><a href="#Generator-355"><span class="linenos"> 355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-356"><a href="#Generator-356"><span class="linenos"> 356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-357"><a href="#Generator-357"><span class="linenos"> 357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-358"><a href="#Generator-358"><span class="linenos"> 358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-359"><a href="#Generator-359"><span class="linenos"> 359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-360"><a href="#Generator-360"><span class="linenos"> 360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-361"><a href="#Generator-361"><span class="linenos"> 361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-362"><a href="#Generator-362"><span class="linenos"> 362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-363"><a href="#Generator-363"><span class="linenos"> 363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-364"><a href="#Generator-364"><span class="linenos"> 364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-365"><a href="#Generator-365"><span class="linenos"> 365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-366"><a href="#Generator-366"><span class="linenos"> 366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-367"><a href="#Generator-367"><span class="linenos"> 367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-368"><a href="#Generator-368"><span class="linenos"> 368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-369"><a href="#Generator-369"><span class="linenos"> 369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-370"><a href="#Generator-370"><span class="linenos"> 370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-371"><a href="#Generator-371"><span class="linenos"> 371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InheritsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-372"><a href="#Generator-372"><span class="linenos"> 372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-373"><a href="#Generator-373"><span class="linenos"> 373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-374"><a href="#Generator-374"><span class="linenos"> 374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-375"><a href="#Generator-375"><span class="linenos"> 375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-376"><a href="#Generator-376"><span class="linenos"> 376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-377"><a href="#Generator-377"><span class="linenos"> 377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-378"><a href="#Generator-378"><span class="linenos"> 378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
-</span><span id="Generator-379"><a href="#Generator-379"><span class="linenos"> 379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-380"><a href="#Generator-380"><span class="linenos"> 380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-381"><a href="#Generator-381"><span class="linenos"> 381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-382"><a href="#Generator-382"><span class="linenos"> 382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="Generator-383"><a href="#Generator-383"><span class="linenos"> 383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-384"><a href="#Generator-384"><span class="linenos"> 384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="Generator-385"><a href="#Generator-385"><span class="linenos"> 385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-386"><a href="#Generator-386"><span class="linenos"> 386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OutputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-387"><a href="#Generator-387"><span class="linenos"> 387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-388"><a href="#Generator-388"><span class="linenos"> 388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-389"><a href="#Generator-389"><span class="linenos"> 389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-390"><a href="#Generator-390"><span class="linenos"> 390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
-</span><span id="Generator-391"><a href="#Generator-391"><span class="linenos"> 391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-392"><a href="#Generator-392"><span class="linenos"> 392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-393"><a href="#Generator-393"><span class="linenos"> 393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-394"><a href="#Generator-394"><span class="linenos"> 394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-395"><a href="#Generator-395"><span class="linenos"> 395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-396"><a href="#Generator-396"><span class="linenos"> 396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SampleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-397"><a href="#Generator-397"><span class="linenos"> 397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-398"><a href="#Generator-398"><span class="linenos"> 398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-399"><a href="#Generator-399"><span class="linenos"> 399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-400"><a href="#Generator-400"><span class="linenos"> 400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-401"><a href="#Generator-401"><span class="linenos"> 401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-402"><a href="#Generator-402"><span class="linenos"> 402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-403"><a href="#Generator-403"><span class="linenos"> 403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-404"><a href="#Generator-404"><span class="linenos"> 404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-405"><a href="#Generator-405"><span class="linenos"> 405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-406"><a href="#Generator-406"><span class="linenos"> 406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-407"><a href="#Generator-407"><span class="linenos"> 407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-408"><a href="#Generator-408"><span class="linenos"> 408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-409"><a href="#Generator-409"><span class="linenos"> 409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-410"><a href="#Generator-410"><span class="linenos"> 410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransformModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-411"><a href="#Generator-411"><span class="linenos"> 411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-412"><a href="#Generator-412"><span class="linenos"> 412</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">POST_CREATE</span><span class="p">,</span>
-</span><span id="Generator-413"><a href="#Generator-413"><span class="linenos"> 413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
-</span><span id="Generator-414"><a href="#Generator-414"><span class="linenos"> 414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
-</span><span id="Generator-415"><a href="#Generator-415"><span class="linenos"> 415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
-</span><span id="Generator-416"><a href="#Generator-416"><span class="linenos"> 416</span></a> <span class="p">}</span>
-</span><span id="Generator-417"><a href="#Generator-417"><span class="linenos"> 417</span></a>
-</span><span id="Generator-418"><a href="#Generator-418"><span class="linenos"> 418</span></a> <span class="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
-</span><span id="Generator-419"><a href="#Generator-419"><span class="linenos"> 419</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Generator-420"><a href="#Generator-420"><span class="linenos"> 420</span></a>
-</span><span id="Generator-421"><a href="#Generator-421"><span class="linenos"> 421</span></a> <span class="c1"># Expressions whose comments are separated from them for better formatting</span>
-</span><span id="Generator-422"><a href="#Generator-422"><span class="linenos"> 422</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-423"><a href="#Generator-423"><span class="linenos"> 423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
-</span><span id="Generator-424"><a href="#Generator-424"><span class="linenos"> 424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
-</span><span id="Generator-425"><a href="#Generator-425"><span class="linenos"> 425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="Generator-426"><a href="#Generator-426"><span class="linenos"> 426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span>
-</span><span id="Generator-427"><a href="#Generator-427"><span class="linenos"> 427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Generator-428"><a href="#Generator-428"><span class="linenos"> 428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span>
-</span><span id="Generator-429"><a href="#Generator-429"><span class="linenos"> 429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
-</span><span id="Generator-430"><a href="#Generator-430"><span class="linenos"> 430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Generator-431"><a href="#Generator-431"><span class="linenos"> 431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Generator-432"><a href="#Generator-432"><span class="linenos"> 432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">,</span>
-</span><span id="Generator-433"><a href="#Generator-433"><span class="linenos"> 433</span></a> <span class="p">)</span>
-</span><span id="Generator-434"><a href="#Generator-434"><span class="linenos"> 434</span></a>
-</span><span id="Generator-435"><a href="#Generator-435"><span class="linenos"> 435</span></a> <span class="c1"># Expressions that should not have their comments generated in maybe_comment</span>
-</span><span id="Generator-436"><a href="#Generator-436"><span class="linenos"> 436</span></a> <span class="n">EXCLUDE_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-437"><a href="#Generator-437"><span class="linenos"> 437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">,</span>
-</span><span id="Generator-438"><a href="#Generator-438"><span class="linenos"> 438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span>
-</span><span id="Generator-439"><a href="#Generator-439"><span class="linenos"> 439</span></a> <span class="p">)</span>
-</span><span id="Generator-440"><a href="#Generator-440"><span class="linenos"> 440</span></a>
-</span><span id="Generator-441"><a href="#Generator-441"><span class="linenos"> 441</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
-</span><span id="Generator-442"><a href="#Generator-442"><span class="linenos"> 442</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-443"><a href="#Generator-443"><span class="linenos"> 443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="Generator-444"><a href="#Generator-444"><span class="linenos"> 444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
-</span><span id="Generator-445"><a href="#Generator-445"><span class="linenos"> 445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span>
-</span><span id="Generator-446"><a href="#Generator-446"><span class="linenos"> 446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span>
-</span><span id="Generator-447"><a href="#Generator-447"><span class="linenos"> 447</span></a> <span class="p">)</span>
-</span><span id="Generator-448"><a href="#Generator-448"><span class="linenos"> 448</span></a>
-</span><span id="Generator-449"><a href="#Generator-449"><span class="linenos"> 449</span></a> <span class="c1"># Expressions that need to have all CTEs under them bubbled up to them</span>
-</span><span id="Generator-450"><a href="#Generator-450"><span class="linenos"> 450</span></a> <span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Generator-451"><a href="#Generator-451"><span class="linenos"> 451</span></a>
-</span><span id="Generator-452"><a href="#Generator-452"><span class="linenos"> 452</span></a> <span class="n">KEY_VALUE_DEFINITIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">)</span>
-</span><span id="Generator-453"><a href="#Generator-453"><span class="linenos"> 453</span></a>
-</span><span id="Generator-454"><a href="#Generator-454"><span class="linenos"> 454</span></a> <span class="n">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</span>
+</span><span id="Generator-347"><a href="#Generator-347"><span class="linenos"> 347</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&lt;&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-348"><a href="#Generator-348"><span class="linenos"> 348</span></a>
+</span><span id="Generator-349"><a href="#Generator-349"><span class="linenos"> 349</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;@&quot;</span>
+</span><span id="Generator-350"><a href="#Generator-350"><span class="linenos"> 350</span></a>
+</span><span id="Generator-351"><a href="#Generator-351"><span class="linenos"> 351</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Generator-352"><a href="#Generator-352"><span class="linenos"> 352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-353"><a href="#Generator-353"><span class="linenos"> 353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-354"><a href="#Generator-354"><span class="linenos"> 354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-355"><a href="#Generator-355"><span class="linenos"> 355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-356"><a href="#Generator-356"><span class="linenos"> 356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-357"><a href="#Generator-357"><span class="linenos"> 357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-358"><a href="#Generator-358"><span class="linenos"> 358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-359"><a href="#Generator-359"><span class="linenos"> 359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-360"><a href="#Generator-360"><span class="linenos"> 360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-361"><a href="#Generator-361"><span class="linenos"> 361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-362"><a href="#Generator-362"><span class="linenos"> 362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-363"><a href="#Generator-363"><span class="linenos"> 363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-364"><a href="#Generator-364"><span class="linenos"> 364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-365"><a href="#Generator-365"><span class="linenos"> 365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-366"><a href="#Generator-366"><span class="linenos"> 366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-367"><a href="#Generator-367"><span class="linenos"> 367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-368"><a href="#Generator-368"><span class="linenos"> 368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-369"><a href="#Generator-369"><span class="linenos"> 369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-370"><a href="#Generator-370"><span class="linenos"> 370</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-371"><a href="#Generator-371"><span class="linenos"> 371</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-372"><a href="#Generator-372"><span class="linenos"> 372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-373"><a href="#Generator-373"><span class="linenos"> 373</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-374"><a href="#Generator-374"><span class="linenos"> 374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-375"><a href="#Generator-375"><span class="linenos"> 375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InheritsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-376"><a href="#Generator-376"><span class="linenos"> 376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-377"><a href="#Generator-377"><span class="linenos"> 377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-378"><a href="#Generator-378"><span class="linenos"> 378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-379"><a href="#Generator-379"><span class="linenos"> 379</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-380"><a href="#Generator-380"><span class="linenos"> 380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-381"><a href="#Generator-381"><span class="linenos"> 381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-382"><a href="#Generator-382"><span class="linenos"> 382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">,</span>
+</span><span id="Generator-383"><a href="#Generator-383"><span class="linenos"> 383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-384"><a href="#Generator-384"><span class="linenos"> 384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-385"><a href="#Generator-385"><span class="linenos"> 385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-386"><a href="#Generator-386"><span class="linenos"> 386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="Generator-387"><a href="#Generator-387"><span class="linenos"> 387</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-388"><a href="#Generator-388"><span class="linenos"> 388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="Generator-389"><a href="#Generator-389"><span class="linenos"> 389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-390"><a href="#Generator-390"><span class="linenos"> 390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OutputModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-391"><a href="#Generator-391"><span class="linenos"> 391</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-392"><a href="#Generator-392"><span class="linenos"> 392</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-393"><a href="#Generator-393"><span class="linenos"> 393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-394"><a href="#Generator-394"><span class="linenos"> 394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
+</span><span id="Generator-395"><a href="#Generator-395"><span class="linenos"> 395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-396"><a href="#Generator-396"><span class="linenos"> 396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-397"><a href="#Generator-397"><span class="linenos"> 397</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-398"><a href="#Generator-398"><span class="linenos"> 398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-399"><a href="#Generator-399"><span class="linenos"> 399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-400"><a href="#Generator-400"><span class="linenos"> 400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SampleProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-401"><a href="#Generator-401"><span class="linenos"> 401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-402"><a href="#Generator-402"><span class="linenos"> 402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-403"><a href="#Generator-403"><span class="linenos"> 403</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-404"><a href="#Generator-404"><span class="linenos"> 404</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-405"><a href="#Generator-405"><span class="linenos"> 405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-406"><a href="#Generator-406"><span class="linenos"> 406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetConfigProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-407"><a href="#Generator-407"><span class="linenos"> 407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-408"><a href="#Generator-408"><span class="linenos"> 408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-409"><a href="#Generator-409"><span class="linenos"> 409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-410"><a href="#Generator-410"><span class="linenos"> 410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-411"><a href="#Generator-411"><span class="linenos"> 411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-412"><a href="#Generator-412"><span class="linenos"> 412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-413"><a href="#Generator-413"><span class="linenos"> 413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-414"><a href="#Generator-414"><span class="linenos"> 414</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransformModelProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-415"><a href="#Generator-415"><span class="linenos"> 415</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-416"><a href="#Generator-416"><span class="linenos"> 416</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">POST_CREATE</span><span class="p">,</span>
+</span><span id="Generator-417"><a href="#Generator-417"><span class="linenos"> 417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
+</span><span id="Generator-418"><a href="#Generator-418"><span class="linenos"> 418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_NAME</span><span class="p">,</span>
+</span><span id="Generator-419"><a href="#Generator-419"><span class="linenos"> 419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
+</span><span id="Generator-420"><a href="#Generator-420"><span class="linenos"> 420</span></a> <span class="p">}</span>
+</span><span id="Generator-421"><a href="#Generator-421"><span class="linenos"> 421</span></a>
+</span><span id="Generator-422"><a href="#Generator-422"><span class="linenos"> 422</span></a> <span class="c1"># Keywords that can&#39;t be used as unquoted identifier names</span>
+</span><span id="Generator-423"><a href="#Generator-423"><span class="linenos"> 423</span></a> <span class="n">RESERVED_KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Generator-424"><a href="#Generator-424"><span class="linenos"> 424</span></a>
+</span><span id="Generator-425"><a href="#Generator-425"><span class="linenos"> 425</span></a> <span class="c1"># Expressions whose comments are separated from them for better formatting</span>
+</span><span id="Generator-426"><a href="#Generator-426"><span class="linenos"> 426</span></a> <span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-427"><a href="#Generator-427"><span class="linenos"> 427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
+</span><span id="Generator-428"><a href="#Generator-428"><span class="linenos"> 428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
+</span><span id="Generator-429"><a href="#Generator-429"><span class="linenos"> 429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="Generator-430"><a href="#Generator-430"><span class="linenos"> 430</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span>
+</span><span id="Generator-431"><a href="#Generator-431"><span class="linenos"> 431</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Generator-432"><a href="#Generator-432"><span class="linenos"> 432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span>
+</span><span id="Generator-433"><a href="#Generator-433"><span class="linenos"> 433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
+</span><span id="Generator-434"><a href="#Generator-434"><span class="linenos"> 434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Generator-435"><a href="#Generator-435"><span class="linenos"> 435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Generator-436"><a href="#Generator-436"><span class="linenos"> 436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">,</span>
+</span><span id="Generator-437"><a href="#Generator-437"><span class="linenos"> 437</span></a> <span class="p">)</span>
+</span><span id="Generator-438"><a href="#Generator-438"><span class="linenos"> 438</span></a>
+</span><span id="Generator-439"><a href="#Generator-439"><span class="linenos"> 439</span></a> <span class="c1"># Expressions that should not have their comments generated in maybe_comment</span>
+</span><span id="Generator-440"><a href="#Generator-440"><span class="linenos"> 440</span></a> <span class="n">EXCLUDE_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-441"><a href="#Generator-441"><span class="linenos"> 441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">,</span>
+</span><span id="Generator-442"><a href="#Generator-442"><span class="linenos"> 442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">,</span>
+</span><span id="Generator-443"><a href="#Generator-443"><span class="linenos"> 443</span></a> <span class="p">)</span>
+</span><span id="Generator-444"><a href="#Generator-444"><span class="linenos"> 444</span></a>
+</span><span id="Generator-445"><a href="#Generator-445"><span class="linenos"> 445</span></a> <span class="c1"># Expressions that can remain unwrapped when appearing in the context of an INTERVAL</span>
+</span><span id="Generator-446"><a href="#Generator-446"><span class="linenos"> 446</span></a> <span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-447"><a href="#Generator-447"><span class="linenos"> 447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="Generator-448"><a href="#Generator-448"><span class="linenos"> 448</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
+</span><span id="Generator-449"><a href="#Generator-449"><span class="linenos"> 449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span>
+</span><span id="Generator-450"><a href="#Generator-450"><span class="linenos"> 450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span>
+</span><span id="Generator-451"><a href="#Generator-451"><span class="linenos"> 451</span></a> <span class="p">)</span>
+</span><span id="Generator-452"><a href="#Generator-452"><span class="linenos"> 452</span></a>
+</span><span id="Generator-453"><a href="#Generator-453"><span class="linenos"> 453</span></a> <span class="c1"># Expressions that need to have all CTEs under them bubbled up to them</span>
+</span><span id="Generator-454"><a href="#Generator-454"><span class="linenos"> 454</span></a> <span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
</span><span id="Generator-455"><a href="#Generator-455"><span class="linenos"> 455</span></a>
-</span><span id="Generator-456"><a href="#Generator-456"><span class="linenos"> 456</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-457"><a href="#Generator-457"><span class="linenos"> 457</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
-</span><span id="Generator-458"><a href="#Generator-458"><span class="linenos"> 458</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
-</span><span id="Generator-459"><a href="#Generator-459"><span class="linenos"> 459</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
-</span><span id="Generator-460"><a href="#Generator-460"><span class="linenos"> 460</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
-</span><span id="Generator-461"><a href="#Generator-461"><span class="linenos"> 461</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
-</span><span id="Generator-462"><a href="#Generator-462"><span class="linenos"> 462</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
-</span><span id="Generator-463"><a href="#Generator-463"><span class="linenos"> 463</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
-</span><span id="Generator-464"><a href="#Generator-464"><span class="linenos"> 464</span></a> <span class="s2">&quot;max_unsupported&quot;</span><span class="p">,</span>
-</span><span id="Generator-465"><a href="#Generator-465"><span class="linenos"> 465</span></a> <span class="s2">&quot;leading_comma&quot;</span><span class="p">,</span>
-</span><span id="Generator-466"><a href="#Generator-466"><span class="linenos"> 466</span></a> <span class="s2">&quot;max_text_width&quot;</span><span class="p">,</span>
-</span><span id="Generator-467"><a href="#Generator-467"><span class="linenos"> 467</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
-</span><span id="Generator-468"><a href="#Generator-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
-</span><span id="Generator-469"><a href="#Generator-469"><span class="linenos"> 469</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
-</span><span id="Generator-470"><a href="#Generator-470"><span class="linenos"> 470</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
-</span><span id="Generator-471"><a href="#Generator-471"><span class="linenos"> 471</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
-</span><span id="Generator-472"><a href="#Generator-472"><span class="linenos"> 472</span></a> <span class="p">)</span>
-</span><span id="Generator-473"><a href="#Generator-473"><span class="linenos"> 473</span></a>
-</span><span id="Generator-474"><a href="#Generator-474"><span class="linenos"> 474</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Generator-475"><a href="#Generator-475"><span class="linenos"> 475</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-476"><a href="#Generator-476"><span class="linenos"> 476</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-477"><a href="#Generator-477"><span class="linenos"> 477</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-478"><a href="#Generator-478"><span class="linenos"> 478</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-479"><a href="#Generator-479"><span class="linenos"> 479</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator-480"><a href="#Generator-480"><span class="linenos"> 480</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator-481"><a href="#Generator-481"><span class="linenos"> 481</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-482"><a href="#Generator-482"><span class="linenos"> 482</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
-</span><span id="Generator-483"><a href="#Generator-483"><span class="linenos"> 483</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
-</span><span id="Generator-484"><a href="#Generator-484"><span class="linenos"> 484</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-485"><a href="#Generator-485"><span class="linenos"> 485</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
-</span><span id="Generator-486"><a href="#Generator-486"><span class="linenos"> 486</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator-487"><a href="#Generator-487"><span class="linenos"> 487</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-488"><a href="#Generator-488"><span class="linenos"> 488</span></a> <span class="p">):</span>
-</span><span id="Generator-489"><a href="#Generator-489"><span class="linenos"> 489</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
-</span><span id="Generator-490"><a href="#Generator-490"><span class="linenos"> 490</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
-</span><span id="Generator-491"><a href="#Generator-491"><span class="linenos"> 491</span></a>
-</span><span id="Generator-492"><a href="#Generator-492"><span class="linenos"> 492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
-</span><span id="Generator-493"><a href="#Generator-493"><span class="linenos"> 493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
-</span><span id="Generator-494"><a href="#Generator-494"><span class="linenos"> 494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="Generator-495"><a href="#Generator-495"><span class="linenos"> 495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
-</span><span id="Generator-496"><a href="#Generator-496"><span class="linenos"> 496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
-</span><span id="Generator-497"><a href="#Generator-497"><span class="linenos"> 497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
-</span><span id="Generator-498"><a href="#Generator-498"><span class="linenos"> 498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
-</span><span id="Generator-499"><a href="#Generator-499"><span class="linenos"> 499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
-</span><span id="Generator-500"><a href="#Generator-500"><span class="linenos"> 500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
-</span><span id="Generator-501"><a href="#Generator-501"><span class="linenos"> 501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Generator-502"><a href="#Generator-502"><span class="linenos"> 502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="Generator-503"><a href="#Generator-503"><span class="linenos"> 503</span></a>
-</span><span id="Generator-504"><a href="#Generator-504"><span class="linenos"> 504</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
-</span><span id="Generator-505"><a href="#Generator-505"><span class="linenos"> 505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-506"><a href="#Generator-506"><span class="linenos"> 506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
-</span><span id="Generator-507"><a href="#Generator-507"><span class="linenos"> 507</span></a> <span class="p">)</span>
-</span><span id="Generator-508"><a href="#Generator-508"><span class="linenos"> 508</span></a>
-</span><span id="Generator-509"><a href="#Generator-509"><span class="linenos"> 509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-510"><a href="#Generator-510"><span class="linenos"> 510</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-511"><a href="#Generator-511"><span class="linenos"> 511</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span>
-</span><span id="Generator-512"><a href="#Generator-512"><span class="linenos"> 512</span></a> <span class="p">)</span>
-</span><span id="Generator-513"><a href="#Generator-513"><span class="linenos"> 513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-514"><a href="#Generator-514"><span class="linenos"> 514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
-</span><span id="Generator-515"><a href="#Generator-515"><span class="linenos"> 515</span></a> <span class="p">)</span>
-</span><span id="Generator-516"><a href="#Generator-516"><span class="linenos"> 516</span></a>
-</span><span id="Generator-517"><a href="#Generator-517"><span class="linenos"> 517</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-518"><a href="#Generator-518"><span class="linenos"> 518</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Generator-519"><a href="#Generator-519"><span class="linenos"> 519</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
+</span><span id="Generator-456"><a href="#Generator-456"><span class="linenos"> 456</span></a> <span class="n">KEY_VALUE_DEFINITIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">)</span>
+</span><span id="Generator-457"><a href="#Generator-457"><span class="linenos"> 457</span></a>
+</span><span id="Generator-458"><a href="#Generator-458"><span class="linenos"> 458</span></a> <span class="n">SENTINEL_LINE_BREAK</span> <span class="o">=</span> <span class="s2">&quot;__SQLGLOT__LB__&quot;</span>
+</span><span id="Generator-459"><a href="#Generator-459"><span class="linenos"> 459</span></a>
+</span><span id="Generator-460"><a href="#Generator-460"><span class="linenos"> 460</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-461"><a href="#Generator-461"><span class="linenos"> 461</span></a> <span class="s2">&quot;pretty&quot;</span><span class="p">,</span>
+</span><span id="Generator-462"><a href="#Generator-462"><span class="linenos"> 462</span></a> <span class="s2">&quot;identify&quot;</span><span class="p">,</span>
+</span><span id="Generator-463"><a href="#Generator-463"><span class="linenos"> 463</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">,</span>
+</span><span id="Generator-464"><a href="#Generator-464"><span class="linenos"> 464</span></a> <span class="s2">&quot;pad&quot;</span><span class="p">,</span>
+</span><span id="Generator-465"><a href="#Generator-465"><span class="linenos"> 465</span></a> <span class="s2">&quot;_indent&quot;</span><span class="p">,</span>
+</span><span id="Generator-466"><a href="#Generator-466"><span class="linenos"> 466</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">,</span>
+</span><span id="Generator-467"><a href="#Generator-467"><span class="linenos"> 467</span></a> <span class="s2">&quot;unsupported_level&quot;</span><span class="p">,</span>
+</span><span id="Generator-468"><a href="#Generator-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;max_unsupported&quot;</span><span class="p">,</span>
+</span><span id="Generator-469"><a href="#Generator-469"><span class="linenos"> 469</span></a> <span class="s2">&quot;leading_comma&quot;</span><span class="p">,</span>
+</span><span id="Generator-470"><a href="#Generator-470"><span class="linenos"> 470</span></a> <span class="s2">&quot;max_text_width&quot;</span><span class="p">,</span>
+</span><span id="Generator-471"><a href="#Generator-471"><span class="linenos"> 471</span></a> <span class="s2">&quot;comments&quot;</span><span class="p">,</span>
+</span><span id="Generator-472"><a href="#Generator-472"><span class="linenos"> 472</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
+</span><span id="Generator-473"><a href="#Generator-473"><span class="linenos"> 473</span></a> <span class="s2">&quot;unsupported_messages&quot;</span><span class="p">,</span>
+</span><span id="Generator-474"><a href="#Generator-474"><span class="linenos"> 474</span></a> <span class="s2">&quot;_escaped_quote_end&quot;</span><span class="p">,</span>
+</span><span id="Generator-475"><a href="#Generator-475"><span class="linenos"> 475</span></a> <span class="s2">&quot;_escaped_identifier_end&quot;</span><span class="p">,</span>
+</span><span id="Generator-476"><a href="#Generator-476"><span class="linenos"> 476</span></a> <span class="p">)</span>
+</span><span id="Generator-477"><a href="#Generator-477"><span class="linenos"> 477</span></a>
+</span><span id="Generator-478"><a href="#Generator-478"><span class="linenos"> 478</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Generator-479"><a href="#Generator-479"><span class="linenos"> 479</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-480"><a href="#Generator-480"><span class="linenos"> 480</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-481"><a href="#Generator-481"><span class="linenos"> 481</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-482"><a href="#Generator-482"><span class="linenos"> 482</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-483"><a href="#Generator-483"><span class="linenos"> 483</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator-484"><a href="#Generator-484"><span class="linenos"> 484</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator-485"><a href="#Generator-485"><span class="linenos"> 485</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-486"><a href="#Generator-486"><span class="linenos"> 486</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
+</span><span id="Generator-487"><a href="#Generator-487"><span class="linenos"> 487</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+</span><span id="Generator-488"><a href="#Generator-488"><span class="linenos"> 488</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-489"><a href="#Generator-489"><span class="linenos"> 489</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
+</span><span id="Generator-490"><a href="#Generator-490"><span class="linenos"> 490</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-491"><a href="#Generator-491"><span class="linenos"> 491</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-492"><a href="#Generator-492"><span class="linenos"> 492</span></a> <span class="p">):</span>
+</span><span id="Generator-493"><a href="#Generator-493"><span class="linenos"> 493</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="Generator-494"><a href="#Generator-494"><span class="linenos"> 494</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
+</span><span id="Generator-495"><a href="#Generator-495"><span class="linenos"> 495</span></a>
+</span><span id="Generator-496"><a href="#Generator-496"><span class="linenos"> 496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
+</span><span id="Generator-497"><a href="#Generator-497"><span class="linenos"> 497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
+</span><span id="Generator-498"><a href="#Generator-498"><span class="linenos"> 498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="Generator-499"><a href="#Generator-499"><span class="linenos"> 499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
+</span><span id="Generator-500"><a href="#Generator-500"><span class="linenos"> 500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
+</span><span id="Generator-501"><a href="#Generator-501"><span class="linenos"> 501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
+</span><span id="Generator-502"><a href="#Generator-502"><span class="linenos"> 502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
+</span><span id="Generator-503"><a href="#Generator-503"><span class="linenos"> 503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
+</span><span id="Generator-504"><a href="#Generator-504"><span class="linenos"> 504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
+</span><span id="Generator-505"><a href="#Generator-505"><span class="linenos"> 505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Generator-506"><a href="#Generator-506"><span class="linenos"> 506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="Generator-507"><a href="#Generator-507"><span class="linenos"> 507</span></a>
+</span><span id="Generator-508"><a href="#Generator-508"><span class="linenos"> 508</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
+</span><span id="Generator-509"><a href="#Generator-509"><span class="linenos"> 509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-510"><a href="#Generator-510"><span class="linenos"> 510</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
+</span><span id="Generator-511"><a href="#Generator-511"><span class="linenos"> 511</span></a> <span class="p">)</span>
+</span><span id="Generator-512"><a href="#Generator-512"><span class="linenos"> 512</span></a>
+</span><span id="Generator-513"><a href="#Generator-513"><span class="linenos"> 513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-514"><a href="#Generator-514"><span class="linenos"> 514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-515"><a href="#Generator-515"><span class="linenos"> 515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span>
+</span><span id="Generator-516"><a href="#Generator-516"><span class="linenos"> 516</span></a> <span class="p">)</span>
+</span><span id="Generator-517"><a href="#Generator-517"><span class="linenos"> 517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-518"><a href="#Generator-518"><span class="linenos"> 518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
+</span><span id="Generator-519"><a href="#Generator-519"><span class="linenos"> 519</span></a> <span class="p">)</span>
</span><span id="Generator-520"><a href="#Generator-520"><span class="linenos"> 520</span></a>
-</span><span id="Generator-521"><a href="#Generator-521"><span class="linenos"> 521</span></a><span class="sd"> Args:</span>
-</span><span id="Generator-522"><a href="#Generator-522"><span class="linenos"> 522</span></a><span class="sd"> expression: The syntax tree.</span>
-</span><span id="Generator-523"><a href="#Generator-523"><span class="linenos"> 523</span></a><span class="sd"> copy: Whether or not to copy the expression. The generator performs mutations so</span>
-</span><span id="Generator-524"><a href="#Generator-524"><span class="linenos"> 524</span></a><span class="sd"> it is safer to copy.</span>
-</span><span id="Generator-525"><a href="#Generator-525"><span class="linenos"> 525</span></a>
-</span><span id="Generator-526"><a href="#Generator-526"><span class="linenos"> 526</span></a><span class="sd"> Returns:</span>
-</span><span id="Generator-527"><a href="#Generator-527"><span class="linenos"> 527</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
-</span><span id="Generator-528"><a href="#Generator-528"><span class="linenos"> 528</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Generator-529"><a href="#Generator-529"><span class="linenos"> 529</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="Generator-530"><a href="#Generator-530"><span class="linenos"> 530</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator-531"><a href="#Generator-531"><span class="linenos"> 531</span></a>
-</span><span id="Generator-532"><a href="#Generator-532"><span class="linenos"> 532</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-533"><a href="#Generator-533"><span class="linenos"> 533</span></a>
-</span><span id="Generator-534"><a href="#Generator-534"><span class="linenos"> 534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-535"><a href="#Generator-535"><span class="linenos"> 535</span></a> <span class="n">sql</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="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator-536"><a href="#Generator-536"><span class="linenos"> 536</span></a>
-</span><span id="Generator-537"><a href="#Generator-537"><span class="linenos"> 537</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator-538"><a href="#Generator-538"><span class="linenos"> 538</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-539"><a href="#Generator-539"><span class="linenos"> 539</span></a>
-</span><span id="Generator-540"><a href="#Generator-540"><span class="linenos"> 540</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
-</span><span id="Generator-541"><a href="#Generator-541"><span class="linenos"> 541</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-542"><a href="#Generator-542"><span class="linenos"> 542</span></a>
-</span><span id="Generator-543"><a href="#Generator-543"><span class="linenos"> 543</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
-</span><span id="Generator-544"><a href="#Generator-544"><span class="linenos"> 544</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator-545"><a href="#Generator-545"><span class="linenos"> 545</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="Generator-546"><a href="#Generator-546"><span class="linenos"> 546</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator-547"><a href="#Generator-547"><span class="linenos"> 547</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
-</span><span id="Generator-548"><a href="#Generator-548"><span class="linenos"> 548</span></a>
-</span><span id="Generator-549"><a href="#Generator-549"><span class="linenos"> 549</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-550"><a href="#Generator-550"><span class="linenos"> 550</span></a>
-</span><span id="Generator-551"><a href="#Generator-551"><span class="linenos"> 551</span></a> <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Generator-552"><a href="#Generator-552"><span class="linenos"> 552</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Apply generic preprocessing transformations to a given expression.&quot;&quot;&quot;</span>
-</span><span id="Generator-553"><a href="#Generator-553"><span class="linenos"> 553</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Generator-554"><a href="#Generator-554"><span class="linenos"> 554</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="Generator-555"><a href="#Generator-555"><span class="linenos"> 555</span></a> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span>
-</span><span id="Generator-556"><a href="#Generator-556"><span class="linenos"> 556</span></a> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">expression</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">))</span>
-</span><span id="Generator-557"><a href="#Generator-557"><span class="linenos"> 557</span></a> <span class="p">):</span>
-</span><span id="Generator-558"><a href="#Generator-558"><span class="linenos"> 558</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">move_ctes_to_top_level</span>
-</span><span id="Generator-559"><a href="#Generator-559"><span class="linenos"> 559</span></a>
-</span><span id="Generator-560"><a href="#Generator-560"><span class="linenos"> 560</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">move_ctes_to_top_level</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-561"><a href="#Generator-561"><span class="linenos"> 561</span></a>
-</span><span id="Generator-562"><a href="#Generator-562"><span class="linenos"> 562</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENSURE_BOOLS</span><span class="p">:</span>
-</span><span id="Generator-563"><a href="#Generator-563"><span class="linenos"> 563</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">ensure_bools</span>
-</span><span id="Generator-564"><a href="#Generator-564"><span class="linenos"> 564</span></a>
-</span><span id="Generator-565"><a href="#Generator-565"><span class="linenos"> 565</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ensure_bools</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-566"><a href="#Generator-566"><span class="linenos"> 566</span></a>
-</span><span id="Generator-567"><a href="#Generator-567"><span class="linenos"> 567</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator-521"><a href="#Generator-521"><span class="linenos"> 521</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-522"><a href="#Generator-522"><span class="linenos"> 522</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Generator-523"><a href="#Generator-523"><span class="linenos"> 523</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
+</span><span id="Generator-524"><a href="#Generator-524"><span class="linenos"> 524</span></a>
+</span><span id="Generator-525"><a href="#Generator-525"><span class="linenos"> 525</span></a><span class="sd"> Args:</span>
+</span><span id="Generator-526"><a href="#Generator-526"><span class="linenos"> 526</span></a><span class="sd"> expression: The syntax tree.</span>
+</span><span id="Generator-527"><a href="#Generator-527"><span class="linenos"> 527</span></a><span class="sd"> copy: Whether or not to copy the expression. The generator performs mutations so</span>
+</span><span id="Generator-528"><a href="#Generator-528"><span class="linenos"> 528</span></a><span class="sd"> it is safer to copy.</span>
+</span><span id="Generator-529"><a href="#Generator-529"><span class="linenos"> 529</span></a>
+</span><span id="Generator-530"><a href="#Generator-530"><span class="linenos"> 530</span></a><span class="sd"> Returns:</span>
+</span><span id="Generator-531"><a href="#Generator-531"><span class="linenos"> 531</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
+</span><span id="Generator-532"><a href="#Generator-532"><span class="linenos"> 532</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Generator-533"><a href="#Generator-533"><span class="linenos"> 533</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="Generator-534"><a href="#Generator-534"><span class="linenos"> 534</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator-535"><a href="#Generator-535"><span class="linenos"> 535</span></a>
+</span><span id="Generator-536"><a href="#Generator-536"><span class="linenos"> 536</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-537"><a href="#Generator-537"><span class="linenos"> 537</span></a>
+</span><span id="Generator-538"><a href="#Generator-538"><span class="linenos"> 538</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-539"><a href="#Generator-539"><span class="linenos"> 539</span></a> <span class="n">sql</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="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator-540"><a href="#Generator-540"><span class="linenos"> 540</span></a>
+</span><span id="Generator-541"><a href="#Generator-541"><span class="linenos"> 541</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator-542"><a href="#Generator-542"><span class="linenos"> 542</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-543"><a href="#Generator-543"><span class="linenos"> 543</span></a>
+</span><span id="Generator-544"><a href="#Generator-544"><span class="linenos"> 544</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
+</span><span id="Generator-545"><a href="#Generator-545"><span class="linenos"> 545</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-546"><a href="#Generator-546"><span class="linenos"> 546</span></a>
+</span><span id="Generator-547"><a href="#Generator-547"><span class="linenos"> 547</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
+</span><span id="Generator-548"><a href="#Generator-548"><span class="linenos"> 548</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator-549"><a href="#Generator-549"><span class="linenos"> 549</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="Generator-550"><a href="#Generator-550"><span class="linenos"> 550</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator-551"><a href="#Generator-551"><span class="linenos"> 551</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="Generator-552"><a href="#Generator-552"><span class="linenos"> 552</span></a>
+</span><span id="Generator-553"><a href="#Generator-553"><span class="linenos"> 553</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-554"><a href="#Generator-554"><span class="linenos"> 554</span></a>
+</span><span id="Generator-555"><a href="#Generator-555"><span class="linenos"> 555</span></a> <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Generator-556"><a href="#Generator-556"><span class="linenos"> 556</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Apply generic preprocessing transformations to a given expression.&quot;&quot;&quot;</span>
+</span><span id="Generator-557"><a href="#Generator-557"><span class="linenos"> 557</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Generator-558"><a href="#Generator-558"><span class="linenos"> 558</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Generator-559"><a href="#Generator-559"><span class="linenos"> 559</span></a> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span>
+</span><span id="Generator-560"><a href="#Generator-560"><span class="linenos"> 560</span></a> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">expression</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">))</span>
+</span><span id="Generator-561"><a href="#Generator-561"><span class="linenos"> 561</span></a> <span class="p">):</span>
+</span><span id="Generator-562"><a href="#Generator-562"><span class="linenos"> 562</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">move_ctes_to_top_level</span>
+</span><span id="Generator-563"><a href="#Generator-563"><span class="linenos"> 563</span></a>
+</span><span id="Generator-564"><a href="#Generator-564"><span class="linenos"> 564</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">move_ctes_to_top_level</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-565"><a href="#Generator-565"><span class="linenos"> 565</span></a>
+</span><span id="Generator-566"><a href="#Generator-566"><span class="linenos"> 566</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENSURE_BOOLS</span><span class="p">:</span>
+</span><span id="Generator-567"><a href="#Generator-567"><span class="linenos"> 567</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">ensure_bools</span>
</span><span id="Generator-568"><a href="#Generator-568"><span class="linenos"> 568</span></a>
-</span><span id="Generator-569"><a href="#Generator-569"><span class="linenos"> 569</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-570"><a href="#Generator-570"><span class="linenos"> 570</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
-</span><span id="Generator-571"><a href="#Generator-571"><span class="linenos"> 571</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="Generator-572"><a href="#Generator-572"><span class="linenos"> 572</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="Generator-573"><a href="#Generator-573"><span class="linenos"> 573</span></a>
-</span><span id="Generator-574"><a href="#Generator-574"><span class="linenos"> 574</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-575"><a href="#Generator-575"><span class="linenos"> 575</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
-</span><span id="Generator-576"><a href="#Generator-576"><span class="linenos"> 576</span></a>
-</span><span id="Generator-577"><a href="#Generator-577"><span class="linenos"> 577</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-578"><a href="#Generator-578"><span class="linenos"> 578</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-579"><a href="#Generator-579"><span class="linenos"> 579</span></a>
-</span><span id="Generator-580"><a href="#Generator-580"><span class="linenos"> 580</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-581"><a href="#Generator-581"><span class="linenos"> 581</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator-582"><a href="#Generator-582"><span class="linenos"> 582</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator-583"><a href="#Generator-583"><span class="linenos"> 583</span></a> <span class="k">return</span> <span class="n">comment</span>
-</span><span id="Generator-584"><a href="#Generator-584"><span class="linenos"> 584</span></a>
-</span><span id="Generator-585"><a href="#Generator-585"><span class="linenos"> 585</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
-</span><span id="Generator-586"><a href="#Generator-586"><span class="linenos"> 586</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-587"><a href="#Generator-587"><span class="linenos"> 587</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator-588"><a href="#Generator-588"><span class="linenos"> 588</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-589"><a href="#Generator-589"><span class="linenos"> 589</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-590"><a href="#Generator-590"><span class="linenos"> 590</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-591"><a href="#Generator-591"><span class="linenos"> 591</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-592"><a href="#Generator-592"><span class="linenos"> 592</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Generator-593"><a href="#Generator-593"><span class="linenos"> 593</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Generator-594"><a href="#Generator-594"><span class="linenos"> 594</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Generator-595"><a href="#Generator-595"><span class="linenos"> 595</span></a> <span class="p">)</span>
-</span><span id="Generator-596"><a href="#Generator-596"><span class="linenos"> 596</span></a>
-</span><span id="Generator-597"><a href="#Generator-597"><span class="linenos"> 597</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXCLUDE_COMMENTS</span><span class="p">):</span>
-</span><span id="Generator-598"><a href="#Generator-598"><span class="linenos"> 598</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-599"><a href="#Generator-599"><span class="linenos"> 599</span></a>
-</span><span id="Generator-600"><a href="#Generator-600"><span class="linenos"> 600</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-601"><a href="#Generator-601"><span class="linenos"> 601</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
-</span><span id="Generator-602"><a href="#Generator-602"><span class="linenos"> 602</span></a> <span class="p">)</span>
+</span><span id="Generator-569"><a href="#Generator-569"><span class="linenos"> 569</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ensure_bools</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-570"><a href="#Generator-570"><span class="linenos"> 570</span></a>
+</span><span id="Generator-571"><a href="#Generator-571"><span class="linenos"> 571</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator-572"><a href="#Generator-572"><span class="linenos"> 572</span></a>
+</span><span id="Generator-573"><a href="#Generator-573"><span class="linenos"> 573</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-574"><a href="#Generator-574"><span class="linenos"> 574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
+</span><span id="Generator-575"><a href="#Generator-575"><span class="linenos"> 575</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="Generator-576"><a href="#Generator-576"><span class="linenos"> 576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="Generator-577"><a href="#Generator-577"><span class="linenos"> 577</span></a>
+</span><span id="Generator-578"><a href="#Generator-578"><span class="linenos"> 578</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-579"><a href="#Generator-579"><span class="linenos"> 579</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
+</span><span id="Generator-580"><a href="#Generator-580"><span class="linenos"> 580</span></a>
+</span><span id="Generator-581"><a href="#Generator-581"><span class="linenos"> 581</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-582"><a href="#Generator-582"><span class="linenos"> 582</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-583"><a href="#Generator-583"><span class="linenos"> 583</span></a>
+</span><span id="Generator-584"><a href="#Generator-584"><span class="linenos"> 584</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-585"><a href="#Generator-585"><span class="linenos"> 585</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator-586"><a href="#Generator-586"><span class="linenos"> 586</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator-587"><a href="#Generator-587"><span class="linenos"> 587</span></a> <span class="k">return</span> <span class="n">comment</span>
+</span><span id="Generator-588"><a href="#Generator-588"><span class="linenos"> 588</span></a>
+</span><span id="Generator-589"><a href="#Generator-589"><span class="linenos"> 589</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
+</span><span id="Generator-590"><a href="#Generator-590"><span class="linenos"> 590</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-591"><a href="#Generator-591"><span class="linenos"> 591</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator-592"><a href="#Generator-592"><span class="linenos"> 592</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-593"><a href="#Generator-593"><span class="linenos"> 593</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-594"><a href="#Generator-594"><span class="linenos"> 594</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-595"><a href="#Generator-595"><span class="linenos"> 595</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-596"><a href="#Generator-596"><span class="linenos"> 596</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Generator-597"><a href="#Generator-597"><span class="linenos"> 597</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Generator-598"><a href="#Generator-598"><span class="linenos"> 598</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Generator-599"><a href="#Generator-599"><span class="linenos"> 599</span></a> <span class="p">)</span>
+</span><span id="Generator-600"><a href="#Generator-600"><span class="linenos"> 600</span></a>
+</span><span id="Generator-601"><a href="#Generator-601"><span class="linenos"> 601</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXCLUDE_COMMENTS</span><span class="p">):</span>
+</span><span id="Generator-602"><a href="#Generator-602"><span class="linenos"> 602</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="Generator-603"><a href="#Generator-603"><span class="linenos"> 603</span></a>
-</span><span id="Generator-604"><a href="#Generator-604"><span class="linenos"> 604</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
-</span><span id="Generator-605"><a href="#Generator-605"><span class="linenos"> 605</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-606"><a href="#Generator-606"><span class="linenos"> 606</span></a>
-</span><span id="Generator-607"><a href="#Generator-607"><span class="linenos"> 607</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
-</span><span id="Generator-608"><a href="#Generator-608"><span class="linenos"> 608</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator-609"><a href="#Generator-609"><span class="linenos"> 609</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-610"><a href="#Generator-610"><span class="linenos"> 610</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
-</span><span id="Generator-611"><a href="#Generator-611"><span class="linenos"> 611</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-612"><a href="#Generator-612"><span class="linenos"> 612</span></a> <span class="p">)</span>
-</span><span id="Generator-613"><a href="#Generator-613"><span class="linenos"> 613</span></a>
-</span><span id="Generator-614"><a href="#Generator-614"><span class="linenos"> 614</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-615"><a href="#Generator-615"><span class="linenos"> 615</span></a>
-</span><span id="Generator-616"><a href="#Generator-616"><span class="linenos"> 616</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-617"><a href="#Generator-617"><span class="linenos"> 617</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
-</span><span id="Generator-618"><a href="#Generator-618"><span class="linenos"> 618</span></a> <span class="p">(</span>
-</span><span id="Generator-619"><a href="#Generator-619"><span class="linenos"> 619</span></a> <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><span id="Generator-620"><a href="#Generator-620"><span class="linenos"> 620</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
-</span><span id="Generator-621"><a href="#Generator-621"><span class="linenos"> 621</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-622"><a href="#Generator-622"><span class="linenos"> 622</span></a> <span class="p">),</span>
-</span><span id="Generator-623"><a href="#Generator-623"><span class="linenos"> 623</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
-</span><span id="Generator-624"><a href="#Generator-624"><span class="linenos"> 624</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator-625"><a href="#Generator-625"><span class="linenos"> 625</span></a> <span class="p">)</span>
-</span><span id="Generator-626"><a href="#Generator-626"><span class="linenos"> 626</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-627"><a href="#Generator-627"><span class="linenos"> 627</span></a>
-</span><span id="Generator-628"><a href="#Generator-628"><span class="linenos"> 628</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-629"><a href="#Generator-629"><span class="linenos"> 629</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
-</span><span id="Generator-630"><a href="#Generator-630"><span class="linenos"> 630</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator-631"><a href="#Generator-631"><span class="linenos"> 631</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Generator-632"><a href="#Generator-632"><span class="linenos"> 632</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
-</span><span id="Generator-633"><a href="#Generator-633"><span class="linenos"> 633</span></a> <span class="k">return</span> <span class="n">result</span>
-</span><span id="Generator-634"><a href="#Generator-634"><span class="linenos"> 634</span></a>
-</span><span id="Generator-635"><a href="#Generator-635"><span class="linenos"> 635</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-636"><a href="#Generator-636"><span class="linenos"> 636</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator-637"><a href="#Generator-637"><span class="linenos"> 637</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator-638"><a href="#Generator-638"><span class="linenos"> 638</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
-</span><span id="Generator-639"><a href="#Generator-639"><span class="linenos"> 639</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator-640"><a href="#Generator-640"><span class="linenos"> 640</span></a> <span class="k">return</span> <span class="n">name</span>
-</span><span id="Generator-641"><a href="#Generator-641"><span class="linenos"> 641</span></a>
-</span><span id="Generator-642"><a href="#Generator-642"><span class="linenos"> 642</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
-</span><span id="Generator-643"><a href="#Generator-643"><span class="linenos"> 643</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-644"><a href="#Generator-644"><span class="linenos"> 644</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator-645"><a href="#Generator-645"><span class="linenos"> 645</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator-646"><a href="#Generator-646"><span class="linenos"> 646</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-647"><a href="#Generator-647"><span class="linenos"> 647</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-648"><a href="#Generator-648"><span class="linenos"> 648</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-649"><a href="#Generator-649"><span class="linenos"> 649</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-650"><a href="#Generator-650"><span class="linenos"> 650</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator-651"><a href="#Generator-651"><span class="linenos"> 651</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-652"><a href="#Generator-652"><span class="linenos"> 652</span></a>
-</span><span id="Generator-653"><a href="#Generator-653"><span class="linenos"> 653</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
-</span><span id="Generator-654"><a href="#Generator-654"><span class="linenos"> 654</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-655"><a href="#Generator-655"><span class="linenos"> 655</span></a>
-</span><span id="Generator-656"><a href="#Generator-656"><span class="linenos"> 656</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-657"><a href="#Generator-657"><span class="linenos"> 657</span></a> <span class="p">(</span>
-</span><span id="Generator-658"><a href="#Generator-658"><span class="linenos"> 658</span></a> <span class="n">line</span>
-</span><span id="Generator-659"><a href="#Generator-659"><span class="linenos"> 659</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Generator-660"><a href="#Generator-660"><span class="linenos"> 660</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-661"><a href="#Generator-661"><span class="linenos"> 661</span></a> <span class="p">)</span>
-</span><span id="Generator-662"><a href="#Generator-662"><span class="linenos"> 662</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
-</span><span id="Generator-663"><a href="#Generator-663"><span class="linenos"> 663</span></a> <span class="p">)</span>
-</span><span id="Generator-664"><a href="#Generator-664"><span class="linenos"> 664</span></a>
-</span><span id="Generator-665"><a href="#Generator-665"><span class="linenos"> 665</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
-</span><span id="Generator-666"><a href="#Generator-666"><span class="linenos"> 666</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-667"><a href="#Generator-667"><span class="linenos"> 667</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
-</span><span id="Generator-668"><a href="#Generator-668"><span class="linenos"> 668</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-669"><a href="#Generator-669"><span class="linenos"> 669</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator-670"><a href="#Generator-670"><span class="linenos"> 670</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-671"><a href="#Generator-671"><span class="linenos"> 671</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Generator-672"><a href="#Generator-672"><span class="linenos"> 672</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-673"><a href="#Generator-673"><span class="linenos"> 673</span></a>
-</span><span id="Generator-674"><a href="#Generator-674"><span class="linenos"> 674</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Generator-675"><a href="#Generator-675"><span class="linenos"> 675</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Generator-676"><a href="#Generator-676"><span class="linenos"> 676</span></a>
-</span><span id="Generator-677"><a href="#Generator-677"><span class="linenos"> 677</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
-</span><span id="Generator-678"><a href="#Generator-678"><span class="linenos"> 678</span></a> <span class="n">value</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="n">key</span><span class="p">)</span>
-</span><span id="Generator-679"><a href="#Generator-679"><span class="linenos"> 679</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="Generator-680"><a href="#Generator-680"><span class="linenos"> 680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator-681"><a href="#Generator-681"><span class="linenos"> 681</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-682"><a href="#Generator-682"><span class="linenos"> 682</span></a>
-</span><span id="Generator-683"><a href="#Generator-683"><span class="linenos"> 683</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator-684"><a href="#Generator-684"><span class="linenos"> 684</span></a>
-</span><span id="Generator-685"><a href="#Generator-685"><span class="linenos"> 685</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="Generator-686"><a href="#Generator-686"><span class="linenos"> 686</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-687"><a href="#Generator-687"><span class="linenos"> 687</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Generator-688"><a href="#Generator-688"><span class="linenos"> 688</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
-</span><span id="Generator-689"><a href="#Generator-689"><span class="linenos"> 689</span></a>
-</span><span id="Generator-690"><a href="#Generator-690"><span class="linenos"> 690</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
-</span><span id="Generator-691"><a href="#Generator-691"><span class="linenos"> 691</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-692"><a href="#Generator-692"><span class="linenos"> 692</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Func</span><span class="p">):</span>
-</span><span id="Generator-693"><a href="#Generator-693"><span class="linenos"> 693</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-694"><a href="#Generator-694"><span class="linenos"> 694</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Property</span><span class="p">):</span>
-</span><span id="Generator-695"><a href="#Generator-695"><span class="linenos"> 695</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-696"><a href="#Generator-696"><span class="linenos"> 696</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-697"><a href="#Generator-697"><span class="linenos"> 697</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-698"><a href="#Generator-698"><span class="linenos"> 698</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-699"><a href="#Generator-699"><span class="linenos"> 699</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-700"><a href="#Generator-700"><span class="linenos"> 700</span></a>
-</span><span id="Generator-701"><a href="#Generator-701"><span class="linenos"> 701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
-</span><span id="Generator-702"><a href="#Generator-702"><span class="linenos"> 702</span></a>
-</span><span id="Generator-703"><a href="#Generator-703"><span class="linenos"> 703</span></a> <span class="k">def</span> <span class="nf">uncache_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">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-704"><a href="#Generator-704"><span class="linenos"> 704</span></a> <span class="n">table</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="Generator-705"><a href="#Generator-705"><span class="linenos"> 705</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-706"><a href="#Generator-706"><span class="linenos"> 706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-707"><a href="#Generator-707"><span class="linenos"> 707</span></a>
-</span><span id="Generator-708"><a href="#Generator-708"><span class="linenos"> 708</span></a> <span class="k">def</span> <span class="nf">cache_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">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-709"><a href="#Generator-709"><span class="linenos"> 709</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-710"><a href="#Generator-710"><span class="linenos"> 710</span></a> <span class="n">table</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="Generator-711"><a href="#Generator-711"><span class="linenos"> 711</span></a> <span class="n">options</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;options&quot;</span><span class="p">)</span>
-</span><span id="Generator-712"><a href="#Generator-712"><span class="linenos"> 712</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</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">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</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="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-713"><a href="#Generator-713"><span class="linenos"> 713</span></a> <span class="n">sql</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="Generator-714"><a href="#Generator-714"><span class="linenos"> 714</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-715"><a href="#Generator-715"><span class="linenos"> 715</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-716"><a href="#Generator-716"><span class="linenos"> 716</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator-717"><a href="#Generator-717"><span class="linenos"> 717</span></a>
-</span><span id="Generator-718"><a href="#Generator-718"><span class="linenos"> 718</span></a> <span class="k">def</span> <span class="nf">characterset_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">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-719"><a href="#Generator-719"><span class="linenos"> 719</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Generator-720"><a href="#Generator-720"><span class="linenos"> 720</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </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="Generator-721"><a href="#Generator-721"><span class="linenos"> 721</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-722"><a href="#Generator-722"><span class="linenos"> 722</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</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="Generator-723"><a href="#Generator-723"><span class="linenos"> 723</span></a>
-</span><span id="Generator-724"><a href="#Generator-724"><span class="linenos"> 724</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-725"><a href="#Generator-725"><span class="linenos"> 725</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-726"><a href="#Generator-726"><span class="linenos"> 726</span></a>
-</span><span id="Generator-727"><a href="#Generator-727"><span class="linenos"> 727</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-728"><a href="#Generator-728"><span class="linenos"> 728</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-729"><a href="#Generator-729"><span class="linenos"> 729</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
+</span><span id="Generator-604"><a href="#Generator-604"><span class="linenos"> 604</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-605"><a href="#Generator-605"><span class="linenos"> 605</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
+</span><span id="Generator-606"><a href="#Generator-606"><span class="linenos"> 606</span></a> <span class="p">)</span>
+</span><span id="Generator-607"><a href="#Generator-607"><span class="linenos"> 607</span></a>
+</span><span id="Generator-608"><a href="#Generator-608"><span class="linenos"> 608</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
+</span><span id="Generator-609"><a href="#Generator-609"><span class="linenos"> 609</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-610"><a href="#Generator-610"><span class="linenos"> 610</span></a>
+</span><span id="Generator-611"><a href="#Generator-611"><span class="linenos"> 611</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
+</span><span id="Generator-612"><a href="#Generator-612"><span class="linenos"> 612</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator-613"><a href="#Generator-613"><span class="linenos"> 613</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-614"><a href="#Generator-614"><span class="linenos"> 614</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="Generator-615"><a href="#Generator-615"><span class="linenos"> 615</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-616"><a href="#Generator-616"><span class="linenos"> 616</span></a> <span class="p">)</span>
+</span><span id="Generator-617"><a href="#Generator-617"><span class="linenos"> 617</span></a>
+</span><span id="Generator-618"><a href="#Generator-618"><span class="linenos"> 618</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-619"><a href="#Generator-619"><span class="linenos"> 619</span></a>
+</span><span id="Generator-620"><a href="#Generator-620"><span class="linenos"> 620</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-621"><a href="#Generator-621"><span class="linenos"> 621</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
+</span><span id="Generator-622"><a href="#Generator-622"><span class="linenos"> 622</span></a> <span class="p">(</span>
+</span><span id="Generator-623"><a href="#Generator-623"><span class="linenos"> 623</span></a> <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><span id="Generator-624"><a href="#Generator-624"><span class="linenos"> 624</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
+</span><span id="Generator-625"><a href="#Generator-625"><span class="linenos"> 625</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-626"><a href="#Generator-626"><span class="linenos"> 626</span></a> <span class="p">),</span>
+</span><span id="Generator-627"><a href="#Generator-627"><span class="linenos"> 627</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="Generator-628"><a href="#Generator-628"><span class="linenos"> 628</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator-629"><a href="#Generator-629"><span class="linenos"> 629</span></a> <span class="p">)</span>
+</span><span id="Generator-630"><a href="#Generator-630"><span class="linenos"> 630</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-631"><a href="#Generator-631"><span class="linenos"> 631</span></a>
+</span><span id="Generator-632"><a href="#Generator-632"><span class="linenos"> 632</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-633"><a href="#Generator-633"><span class="linenos"> 633</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
+</span><span id="Generator-634"><a href="#Generator-634"><span class="linenos"> 634</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator-635"><a href="#Generator-635"><span class="linenos"> 635</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Generator-636"><a href="#Generator-636"><span class="linenos"> 636</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
+</span><span id="Generator-637"><a href="#Generator-637"><span class="linenos"> 637</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="Generator-638"><a href="#Generator-638"><span class="linenos"> 638</span></a>
+</span><span id="Generator-639"><a href="#Generator-639"><span class="linenos"> 639</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-640"><a href="#Generator-640"><span class="linenos"> 640</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator-641"><a href="#Generator-641"><span class="linenos"> 641</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator-642"><a href="#Generator-642"><span class="linenos"> 642</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
+</span><span id="Generator-643"><a href="#Generator-643"><span class="linenos"> 643</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator-644"><a href="#Generator-644"><span class="linenos"> 644</span></a> <span class="k">return</span> <span class="n">name</span>
+</span><span id="Generator-645"><a href="#Generator-645"><span class="linenos"> 645</span></a>
+</span><span id="Generator-646"><a href="#Generator-646"><span class="linenos"> 646</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
+</span><span id="Generator-647"><a href="#Generator-647"><span class="linenos"> 647</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-648"><a href="#Generator-648"><span class="linenos"> 648</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator-649"><a href="#Generator-649"><span class="linenos"> 649</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator-650"><a href="#Generator-650"><span class="linenos"> 650</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-651"><a href="#Generator-651"><span class="linenos"> 651</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-652"><a href="#Generator-652"><span class="linenos"> 652</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-653"><a href="#Generator-653"><span class="linenos"> 653</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-654"><a href="#Generator-654"><span class="linenos"> 654</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator-655"><a href="#Generator-655"><span class="linenos"> 655</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-656"><a href="#Generator-656"><span class="linenos"> 656</span></a>
+</span><span id="Generator-657"><a href="#Generator-657"><span class="linenos"> 657</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
+</span><span id="Generator-658"><a href="#Generator-658"><span class="linenos"> 658</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-659"><a href="#Generator-659"><span class="linenos"> 659</span></a>
+</span><span id="Generator-660"><a href="#Generator-660"><span class="linenos"> 660</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-661"><a href="#Generator-661"><span class="linenos"> 661</span></a> <span class="p">(</span>
+</span><span id="Generator-662"><a href="#Generator-662"><span class="linenos"> 662</span></a> <span class="n">line</span>
+</span><span id="Generator-663"><a href="#Generator-663"><span class="linenos"> 663</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Generator-664"><a href="#Generator-664"><span class="linenos"> 664</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-665"><a href="#Generator-665"><span class="linenos"> 665</span></a> <span class="p">)</span>
+</span><span id="Generator-666"><a href="#Generator-666"><span class="linenos"> 666</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
+</span><span id="Generator-667"><a href="#Generator-667"><span class="linenos"> 667</span></a> <span class="p">)</span>
+</span><span id="Generator-668"><a href="#Generator-668"><span class="linenos"> 668</span></a>
+</span><span id="Generator-669"><a href="#Generator-669"><span class="linenos"> 669</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="Generator-670"><a href="#Generator-670"><span class="linenos"> 670</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-671"><a href="#Generator-671"><span class="linenos"> 671</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
+</span><span id="Generator-672"><a href="#Generator-672"><span class="linenos"> 672</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-673"><a href="#Generator-673"><span class="linenos"> 673</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-674"><a href="#Generator-674"><span class="linenos"> 674</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-675"><a href="#Generator-675"><span class="linenos"> 675</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Generator-676"><a href="#Generator-676"><span class="linenos"> 676</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-677"><a href="#Generator-677"><span class="linenos"> 677</span></a>
+</span><span id="Generator-678"><a href="#Generator-678"><span class="linenos"> 678</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Generator-679"><a href="#Generator-679"><span class="linenos"> 679</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator-680"><a href="#Generator-680"><span class="linenos"> 680</span></a>
+</span><span id="Generator-681"><a href="#Generator-681"><span class="linenos"> 681</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
+</span><span id="Generator-682"><a href="#Generator-682"><span class="linenos"> 682</span></a> <span class="n">value</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="n">key</span><span class="p">)</span>
+</span><span id="Generator-683"><a href="#Generator-683"><span class="linenos"> 683</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="Generator-684"><a href="#Generator-684"><span class="linenos"> 684</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator-685"><a href="#Generator-685"><span class="linenos"> 685</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-686"><a href="#Generator-686"><span class="linenos"> 686</span></a>
+</span><span id="Generator-687"><a href="#Generator-687"><span class="linenos"> 687</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator-688"><a href="#Generator-688"><span class="linenos"> 688</span></a>
+</span><span id="Generator-689"><a href="#Generator-689"><span class="linenos"> 689</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="Generator-690"><a href="#Generator-690"><span class="linenos"> 690</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-691"><a href="#Generator-691"><span class="linenos"> 691</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Generator-692"><a href="#Generator-692"><span class="linenos"> 692</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
+</span><span id="Generator-693"><a href="#Generator-693"><span class="linenos"> 693</span></a>
+</span><span id="Generator-694"><a href="#Generator-694"><span class="linenos"> 694</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
+</span><span id="Generator-695"><a href="#Generator-695"><span class="linenos"> 695</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-696"><a href="#Generator-696"><span class="linenos"> 696</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Func</span><span class="p">):</span>
+</span><span id="Generator-697"><a href="#Generator-697"><span class="linenos"> 697</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-698"><a href="#Generator-698"><span class="linenos"> 698</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Property</span><span class="p">):</span>
+</span><span id="Generator-699"><a href="#Generator-699"><span class="linenos"> 699</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-700"><a href="#Generator-700"><span class="linenos"> 700</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-701"><a href="#Generator-701"><span class="linenos"> 701</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-702"><a href="#Generator-702"><span class="linenos"> 702</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-703"><a href="#Generator-703"><span class="linenos"> 703</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-704"><a href="#Generator-704"><span class="linenos"> 704</span></a>
+</span><span id="Generator-705"><a href="#Generator-705"><span class="linenos"> 705</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
+</span><span id="Generator-706"><a href="#Generator-706"><span class="linenos"> 706</span></a>
+</span><span id="Generator-707"><a href="#Generator-707"><span class="linenos"> 707</span></a> <span class="k">def</span> <span class="nf">uncache_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">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-708"><a href="#Generator-708"><span class="linenos"> 708</span></a> <span class="n">table</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="Generator-709"><a href="#Generator-709"><span class="linenos"> 709</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-710"><a href="#Generator-710"><span class="linenos"> 710</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-711"><a href="#Generator-711"><span class="linenos"> 711</span></a>
+</span><span id="Generator-712"><a href="#Generator-712"><span class="linenos"> 712</span></a> <span class="k">def</span> <span class="nf">cache_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">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-713"><a href="#Generator-713"><span class="linenos"> 713</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-714"><a href="#Generator-714"><span class="linenos"> 714</span></a> <span class="n">table</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="Generator-715"><a href="#Generator-715"><span class="linenos"> 715</span></a> <span class="n">options</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;options&quot;</span><span class="p">)</span>
+</span><span id="Generator-716"><a href="#Generator-716"><span class="linenos"> 716</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</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">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</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="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-717"><a href="#Generator-717"><span class="linenos"> 717</span></a> <span class="n">sql</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="Generator-718"><a href="#Generator-718"><span class="linenos"> 718</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-719"><a href="#Generator-719"><span class="linenos"> 719</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-720"><a href="#Generator-720"><span class="linenos"> 720</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-721"><a href="#Generator-721"><span class="linenos"> 721</span></a>
+</span><span id="Generator-722"><a href="#Generator-722"><span class="linenos"> 722</span></a> <span class="k">def</span> <span class="nf">characterset_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">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-723"><a href="#Generator-723"><span class="linenos"> 723</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Generator-724"><a href="#Generator-724"><span class="linenos"> 724</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </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="Generator-725"><a href="#Generator-725"><span class="linenos"> 725</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-726"><a href="#Generator-726"><span class="linenos"> 726</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</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="Generator-727"><a href="#Generator-727"><span class="linenos"> 727</span></a>
+</span><span id="Generator-728"><a href="#Generator-728"><span class="linenos"> 728</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-729"><a href="#Generator-729"><span class="linenos"> 729</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-730"><a href="#Generator-730"><span class="linenos"> 730</span></a>
-</span><span id="Generator-731"><a href="#Generator-731"><span class="linenos"> 731</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-732"><a href="#Generator-732"><span class="linenos"> 732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="Generator-733"><a href="#Generator-733"><span class="linenos"> 733</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator-734"><a href="#Generator-734"><span class="linenos"> 734</span></a> <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;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator-735"><a href="#Generator-735"><span class="linenos"> 735</span></a> <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;db&quot;</span><span class="p">),</span>
-</span><span id="Generator-736"><a href="#Generator-736"><span class="linenos"> 736</span></a> <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="Generator-737"><a href="#Generator-737"><span class="linenos"> 737</span></a> <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;this&quot;</span><span class="p">),</span>
-</span><span id="Generator-738"><a href="#Generator-738"><span class="linenos"> 738</span></a> <span class="p">)</span>
-</span><span id="Generator-739"><a href="#Generator-739"><span class="linenos"> 739</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="Generator-740"><a href="#Generator-740"><span class="linenos"> 740</span></a> <span class="p">)</span>
-</span><span id="Generator-741"><a href="#Generator-741"><span class="linenos"> 741</span></a>
-</span><span id="Generator-742"><a href="#Generator-742"><span class="linenos"> 742</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-743"><a href="#Generator-743"><span class="linenos"> 743</span></a>
-</span><span id="Generator-744"><a href="#Generator-744"><span class="linenos"> 744</span></a> <span class="k">def</span> <span class="nf">columnposition_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">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-745"><a href="#Generator-745"><span class="linenos"> 745</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-746"><a href="#Generator-746"><span class="linenos"> 746</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-747"><a href="#Generator-747"><span class="linenos"> 747</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator-748"><a href="#Generator-748"><span class="linenos"> 748</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-749"><a href="#Generator-749"><span class="linenos"> 749</span></a>
-</span><span id="Generator-750"><a href="#Generator-750"><span class="linenos"> 750</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-751"><a href="#Generator-751"><span class="linenos"> 751</span></a> <span class="n">column</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="Generator-752"><a href="#Generator-752"><span class="linenos"> 752</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-753"><a href="#Generator-753"><span class="linenos"> 753</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-754"><a href="#Generator-754"><span class="linenos"> 754</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-755"><a href="#Generator-755"><span class="linenos"> 755</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-756"><a href="#Generator-756"><span class="linenos"> 756</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-757"><a href="#Generator-757"><span class="linenos"> 757</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator-758"><a href="#Generator-758"><span class="linenos"> 758</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-759"><a href="#Generator-759"><span class="linenos"> 759</span></a>
-</span><span id="Generator-760"><a href="#Generator-760"><span class="linenos"> 760</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPUTED_COLUMN_WITH_TYPE</span><span class="p">:</span>
-</span><span id="Generator-761"><a href="#Generator-761"><span class="linenos"> 761</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-762"><a href="#Generator-762"><span class="linenos"> 762</span></a>
-</span><span id="Generator-763"><a href="#Generator-763"><span class="linenos"> 763</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-764"><a href="#Generator-764"><span class="linenos"> 764</span></a>
-</span><span id="Generator-765"><a href="#Generator-765"><span class="linenos"> 765</span></a> <span class="k">def</span> <span class="nf">columnconstraint_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">ColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-766"><a href="#Generator-766"><span class="linenos"> 766</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-767"><a href="#Generator-767"><span class="linenos"> 767</span></a> <span class="n">kind_sql</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator-768"><a href="#Generator-768"><span class="linenos"> 768</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">kind_sql</span>
-</span><span id="Generator-769"><a href="#Generator-769"><span class="linenos"> 769</span></a>
-</span><span id="Generator-770"><a href="#Generator-770"><span class="linenos"> 770</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_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">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-771"><a href="#Generator-771"><span class="linenos"> 771</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-772"><a href="#Generator-772"><span class="linenos"> 772</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
-</span><span id="Generator-773"><a href="#Generator-773"><span class="linenos"> 773</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
-</span><span id="Generator-774"><a href="#Generator-774"><span class="linenos"> 774</span></a> <span class="k">elif</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;persisted&quot;</span><span class="p">):</span>
-</span><span id="Generator-775"><a href="#Generator-775"><span class="linenos"> 775</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
-</span><span id="Generator-776"><a href="#Generator-776"><span class="linenos"> 776</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-777"><a href="#Generator-777"><span class="linenos"> 777</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-778"><a href="#Generator-778"><span class="linenos"> 778</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-779"><a href="#Generator-779"><span class="linenos"> 779</span></a>
-</span><span id="Generator-780"><a href="#Generator-780"><span class="linenos"> 780</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-781"><a href="#Generator-781"><span class="linenos"> 781</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
-</span><span id="Generator-782"><a href="#Generator-782"><span class="linenos"> 782</span></a>
-</span><span id="Generator-783"><a href="#Generator-783"><span class="linenos"> 783</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_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">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-784"><a href="#Generator-784"><span class="linenos"> 784</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator-785"><a href="#Generator-785"><span class="linenos"> 785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Generator-786"><a href="#Generator-786"><span class="linenos"> 786</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-787"><a href="#Generator-787"><span class="linenos"> 787</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-788"><a href="#Generator-788"><span class="linenos"> 788</span></a>
-</span><span id="Generator-789"><a href="#Generator-789"><span class="linenos"> 789</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-790"><a href="#Generator-790"><span class="linenos"> 790</span></a>
-</span><span id="Generator-791"><a href="#Generator-791"><span class="linenos"> 791</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator-792"><a href="#Generator-792"><span class="linenos"> 792</span></a> <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">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="Generator-793"><a href="#Generator-793"><span class="linenos"> 793</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-794"><a href="#Generator-794"><span class="linenos"> 794</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-795"><a href="#Generator-795"><span class="linenos"> 795</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-796"><a href="#Generator-796"><span class="linenos"> 796</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-797"><a href="#Generator-797"><span class="linenos"> 797</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-798"><a href="#Generator-798"><span class="linenos"> 798</span></a>
-</span><span id="Generator-799"><a href="#Generator-799"><span class="linenos"> 799</span></a> <span class="n">start</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;start&quot;</span><span class="p">)</span>
-</span><span id="Generator-800"><a href="#Generator-800"><span class="linenos"> 800</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-801"><a href="#Generator-801"><span class="linenos"> 801</span></a> <span class="n">increment</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;increment&quot;</span><span class="p">)</span>
-</span><span id="Generator-802"><a href="#Generator-802"><span class="linenos"> 802</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-803"><a href="#Generator-803"><span class="linenos"> 803</span></a> <span class="n">minvalue</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;minvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator-804"><a href="#Generator-804"><span class="linenos"> 804</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-805"><a href="#Generator-805"><span class="linenos"> 805</span></a> <span class="n">maxvalue</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;maxvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator-806"><a href="#Generator-806"><span class="linenos"> 806</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-807"><a href="#Generator-807"><span class="linenos"> 807</span></a> <span class="n">cycle</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;cycle&quot;</span><span class="p">)</span>
-</span><span id="Generator-808"><a href="#Generator-808"><span class="linenos"> 808</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-809"><a href="#Generator-809"><span class="linenos"> 809</span></a>
-</span><span id="Generator-810"><a href="#Generator-810"><span class="linenos"> 810</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-811"><a href="#Generator-811"><span class="linenos"> 811</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
-</span><span id="Generator-812"><a href="#Generator-812"><span class="linenos"> 812</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="Generator-731"><a href="#Generator-731"><span class="linenos"> 731</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-732"><a href="#Generator-732"><span class="linenos"> 732</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-733"><a href="#Generator-733"><span class="linenos"> 733</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
+</span><span id="Generator-734"><a href="#Generator-734"><span class="linenos"> 734</span></a>
+</span><span id="Generator-735"><a href="#Generator-735"><span class="linenos"> 735</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-736"><a href="#Generator-736"><span class="linenos"> 736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="Generator-737"><a href="#Generator-737"><span class="linenos"> 737</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator-738"><a href="#Generator-738"><span class="linenos"> 738</span></a> <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;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator-739"><a href="#Generator-739"><span class="linenos"> 739</span></a> <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;db&quot;</span><span class="p">),</span>
+</span><span id="Generator-740"><a href="#Generator-740"><span class="linenos"> 740</span></a> <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="Generator-741"><a href="#Generator-741"><span class="linenos"> 741</span></a> <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;this&quot;</span><span class="p">),</span>
+</span><span id="Generator-742"><a href="#Generator-742"><span class="linenos"> 742</span></a> <span class="p">)</span>
+</span><span id="Generator-743"><a href="#Generator-743"><span class="linenos"> 743</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="Generator-744"><a href="#Generator-744"><span class="linenos"> 744</span></a> <span class="p">)</span>
+</span><span id="Generator-745"><a href="#Generator-745"><span class="linenos"> 745</span></a>
+</span><span id="Generator-746"><a href="#Generator-746"><span class="linenos"> 746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-747"><a href="#Generator-747"><span class="linenos"> 747</span></a>
+</span><span id="Generator-748"><a href="#Generator-748"><span class="linenos"> 748</span></a> <span class="k">def</span> <span class="nf">columnposition_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">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-749"><a href="#Generator-749"><span class="linenos"> 749</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-750"><a href="#Generator-750"><span class="linenos"> 750</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-751"><a href="#Generator-751"><span class="linenos"> 751</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator-752"><a href="#Generator-752"><span class="linenos"> 752</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-753"><a href="#Generator-753"><span class="linenos"> 753</span></a>
+</span><span id="Generator-754"><a href="#Generator-754"><span class="linenos"> 754</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-755"><a href="#Generator-755"><span class="linenos"> 755</span></a> <span class="n">column</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="Generator-756"><a href="#Generator-756"><span class="linenos"> 756</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-757"><a href="#Generator-757"><span class="linenos"> 757</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-758"><a href="#Generator-758"><span class="linenos"> 758</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-759"><a href="#Generator-759"><span class="linenos"> 759</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-760"><a href="#Generator-760"><span class="linenos"> 760</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-761"><a href="#Generator-761"><span class="linenos"> 761</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator-762"><a href="#Generator-762"><span class="linenos"> 762</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-763"><a href="#Generator-763"><span class="linenos"> 763</span></a>
+</span><span id="Generator-764"><a href="#Generator-764"><span class="linenos"> 764</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPUTED_COLUMN_WITH_TYPE</span><span class="p">:</span>
+</span><span id="Generator-765"><a href="#Generator-765"><span class="linenos"> 765</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-766"><a href="#Generator-766"><span class="linenos"> 766</span></a>
+</span><span id="Generator-767"><a href="#Generator-767"><span class="linenos"> 767</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-768"><a href="#Generator-768"><span class="linenos"> 768</span></a>
+</span><span id="Generator-769"><a href="#Generator-769"><span class="linenos"> 769</span></a> <span class="k">def</span> <span class="nf">columnconstraint_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">ColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-770"><a href="#Generator-770"><span class="linenos"> 770</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-771"><a href="#Generator-771"><span class="linenos"> 771</span></a> <span class="n">kind_sql</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator-772"><a href="#Generator-772"><span class="linenos"> 772</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">kind_sql</span>
+</span><span id="Generator-773"><a href="#Generator-773"><span class="linenos"> 773</span></a>
+</span><span id="Generator-774"><a href="#Generator-774"><span class="linenos"> 774</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_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">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-775"><a href="#Generator-775"><span class="linenos"> 775</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-776"><a href="#Generator-776"><span class="linenos"> 776</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
+</span><span id="Generator-777"><a href="#Generator-777"><span class="linenos"> 777</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
+</span><span id="Generator-778"><a href="#Generator-778"><span class="linenos"> 778</span></a> <span class="k">elif</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;persisted&quot;</span><span class="p">):</span>
+</span><span id="Generator-779"><a href="#Generator-779"><span class="linenos"> 779</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
+</span><span id="Generator-780"><a href="#Generator-780"><span class="linenos"> 780</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-781"><a href="#Generator-781"><span class="linenos"> 781</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-782"><a href="#Generator-782"><span class="linenos"> 782</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-783"><a href="#Generator-783"><span class="linenos"> 783</span></a>
+</span><span id="Generator-784"><a href="#Generator-784"><span class="linenos"> 784</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-785"><a href="#Generator-785"><span class="linenos"> 785</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
+</span><span id="Generator-786"><a href="#Generator-786"><span class="linenos"> 786</span></a>
+</span><span id="Generator-787"><a href="#Generator-787"><span class="linenos"> 787</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_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">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-788"><a href="#Generator-788"><span class="linenos"> 788</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator-789"><a href="#Generator-789"><span class="linenos"> 789</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Generator-790"><a href="#Generator-790"><span class="linenos"> 790</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-791"><a href="#Generator-791"><span class="linenos"> 791</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-792"><a href="#Generator-792"><span class="linenos"> 792</span></a>
+</span><span id="Generator-793"><a href="#Generator-793"><span class="linenos"> 793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-794"><a href="#Generator-794"><span class="linenos"> 794</span></a>
+</span><span id="Generator-795"><a href="#Generator-795"><span class="linenos"> 795</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator-796"><a href="#Generator-796"><span class="linenos"> 796</span></a> <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">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="Generator-797"><a href="#Generator-797"><span class="linenos"> 797</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-798"><a href="#Generator-798"><span class="linenos"> 798</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-799"><a href="#Generator-799"><span class="linenos"> 799</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-800"><a href="#Generator-800"><span class="linenos"> 800</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-801"><a href="#Generator-801"><span class="linenos"> 801</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-802"><a href="#Generator-802"><span class="linenos"> 802</span></a>
+</span><span id="Generator-803"><a href="#Generator-803"><span class="linenos"> 803</span></a> <span class="n">start</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;start&quot;</span><span class="p">)</span>
+</span><span id="Generator-804"><a href="#Generator-804"><span class="linenos"> 804</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-805"><a href="#Generator-805"><span class="linenos"> 805</span></a> <span class="n">increment</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;increment&quot;</span><span class="p">)</span>
+</span><span id="Generator-806"><a href="#Generator-806"><span class="linenos"> 806</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-807"><a href="#Generator-807"><span class="linenos"> 807</span></a> <span class="n">minvalue</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;minvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator-808"><a href="#Generator-808"><span class="linenos"> 808</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-809"><a href="#Generator-809"><span class="linenos"> 809</span></a> <span class="n">maxvalue</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;maxvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator-810"><a href="#Generator-810"><span class="linenos"> 810</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-811"><a href="#Generator-811"><span class="linenos"> 811</span></a> <span class="n">cycle</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;cycle&quot;</span><span class="p">)</span>
+</span><span id="Generator-812"><a href="#Generator-812"><span class="linenos"> 812</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-813"><a href="#Generator-813"><span class="linenos"> 813</span></a>
-</span><span id="Generator-814"><a href="#Generator-814"><span class="linenos"> 814</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-815"><a href="#Generator-815"><span class="linenos"> 815</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
-</span><span id="Generator-816"><a href="#Generator-816"><span class="linenos"> 816</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-817"><a href="#Generator-817"><span class="linenos"> 817</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-818"><a href="#Generator-818"><span class="linenos"> 818</span></a>
-</span><span id="Generator-819"><a href="#Generator-819"><span class="linenos"> 819</span></a> <span class="n">expr</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="Generator-820"><a href="#Generator-820"><span class="linenos"> 820</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
-</span><span id="Generator-821"><a href="#Generator-821"><span class="linenos"> 821</span></a>
-</span><span id="Generator-822"><a href="#Generator-822"><span class="linenos"> 822</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-823"><a href="#Generator-823"><span class="linenos"> 823</span></a>
-</span><span id="Generator-824"><a href="#Generator-824"><span class="linenos"> 824</span></a> <span class="k">def</span> <span class="nf">generatedasrowcolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator-825"><a href="#Generator-825"><span class="linenos"> 825</span></a> <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">GeneratedAsRowColumnConstraint</span>
-</span><span id="Generator-826"><a href="#Generator-826"><span class="linenos"> 826</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-827"><a href="#Generator-827"><span class="linenos"> 827</span></a> <span class="n">start</span> <span class="o">=</span> <span class="s2">&quot;START&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;END&quot;</span>
-</span><span id="Generator-828"><a href="#Generator-828"><span class="linenos"> 828</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="s2">&quot; HIDDEN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hidden&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-829"><a href="#Generator-829"><span class="linenos"> 829</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED ALWAYS AS ROW </span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">hidden</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-830"><a href="#Generator-830"><span class="linenos"> 830</span></a>
-</span><span id="Generator-831"><a href="#Generator-831"><span class="linenos"> 831</span></a> <span class="k">def</span> <span class="nf">periodforsystemtimeconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator-832"><a href="#Generator-832"><span class="linenos"> 832</span></a> <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">PeriodForSystemTimeConstraint</span>
-</span><span id="Generator-833"><a href="#Generator-833"><span class="linenos"> 833</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-834"><a href="#Generator-834"><span class="linenos"> 834</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PERIOD FOR SYSTEM_TIME (</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-835"><a href="#Generator-835"><span class="linenos"> 835</span></a>
-</span><span id="Generator-836"><a href="#Generator-836"><span class="linenos"> 836</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_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">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-837"><a href="#Generator-837"><span class="linenos"> 837</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
-</span><span id="Generator-838"><a href="#Generator-838"><span class="linenos"> 838</span></a>
-</span><span id="Generator-839"><a href="#Generator-839"><span class="linenos"> 839</span></a> <span class="k">def</span> <span class="nf">transformcolumnconstraint_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">TransformColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-840"><a href="#Generator-840"><span class="linenos"> 840</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="Generator-841"><a href="#Generator-841"><span class="linenos"> 841</span></a>
-</span><span id="Generator-842"><a href="#Generator-842"><span class="linenos"> 842</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_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">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-843"><a href="#Generator-843"><span class="linenos"> 843</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
-</span><span id="Generator-844"><a href="#Generator-844"><span class="linenos"> 844</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-845"><a href="#Generator-845"><span class="linenos"> 845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-846"><a href="#Generator-846"><span class="linenos"> 846</span></a> <span class="k">return</span> <span class="s2">&quot;PRIMARY KEY&quot;</span>
-</span><span id="Generator-847"><a href="#Generator-847"><span class="linenos"> 847</span></a>
-</span><span id="Generator-848"><a href="#Generator-848"><span class="linenos"> 848</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_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">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-849"><a href="#Generator-849"><span class="linenos"> 849</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-850"><a href="#Generator-850"><span class="linenos"> 850</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-851"><a href="#Generator-851"><span class="linenos"> 851</span></a> <span class="n">index_type</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;index_type&quot;</span><span class="p">)</span>
-</span><span id="Generator-852"><a href="#Generator-852"><span class="linenos"> 852</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-853"><a href="#Generator-853"><span class="linenos"> 853</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-854"><a href="#Generator-854"><span class="linenos"> 854</span></a>
-</span><span id="Generator-855"><a href="#Generator-855"><span class="linenos"> 855</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-856"><a href="#Generator-856"><span class="linenos"> 856</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-857"><a href="#Generator-857"><span class="linenos"> 857</span></a>
-</span><span id="Generator-858"><a href="#Generator-858"><span class="linenos"> 858</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-859"><a href="#Generator-859"><span class="linenos"> 859</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-860"><a href="#Generator-860"><span class="linenos"> 860</span></a> <span class="n">properties</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;properties&quot;</span><span class="p">)</span>
-</span><span id="Generator-861"><a href="#Generator-861"><span class="linenos"> 861</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
-</span><span id="Generator-862"><a href="#Generator-862"><span class="linenos"> 862</span></a>
-</span><span id="Generator-863"><a href="#Generator-863"><span class="linenos"> 863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
-</span><span id="Generator-864"><a href="#Generator-864"><span class="linenos"> 864</span></a>
-</span><span id="Generator-865"><a href="#Generator-865"><span class="linenos"> 865</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-866"><a href="#Generator-866"><span class="linenos"> 866</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
-</span><span id="Generator-867"><a href="#Generator-867"><span class="linenos"> 867</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
-</span><span id="Generator-868"><a href="#Generator-868"><span class="linenos"> 868</span></a> <span class="p">):</span>
-</span><span id="Generator-869"><a href="#Generator-869"><span class="linenos"> 869</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-870"><a href="#Generator-870"><span class="linenos"> 870</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator-871"><a href="#Generator-871"><span class="linenos"> 871</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator-872"><a href="#Generator-872"><span class="linenos"> 872</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
-</span><span id="Generator-873"><a href="#Generator-873"><span class="linenos"> 873</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
-</span><span id="Generator-874"><a href="#Generator-874"><span class="linenos"> 874</span></a> <span class="p">]</span>
-</span><span id="Generator-875"><a href="#Generator-875"><span class="linenos"> 875</span></a> <span class="p">)</span>
-</span><span id="Generator-876"><a href="#Generator-876"><span class="linenos"> 876</span></a> <span class="p">)</span>
-</span><span id="Generator-877"><a href="#Generator-877"><span class="linenos"> 877</span></a>
-</span><span id="Generator-878"><a href="#Generator-878"><span class="linenos"> 878</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-879"><a href="#Generator-879"><span class="linenos"> 879</span></a> <span class="n">end</span> <span class="o">=</span> <span class="s2">&quot; END&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;end&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-880"><a href="#Generator-880"><span class="linenos"> 880</span></a>
-</span><span id="Generator-881"><a href="#Generator-881"><span class="linenos"> 881</span></a> <span class="n">expression_sql</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="Generator-882"><a href="#Generator-882"><span class="linenos"> 882</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
-</span><span id="Generator-883"><a href="#Generator-883"><span class="linenos"> 883</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-814"><a href="#Generator-814"><span class="linenos"> 814</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-815"><a href="#Generator-815"><span class="linenos"> 815</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
+</span><span id="Generator-816"><a href="#Generator-816"><span class="linenos"> 816</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="Generator-817"><a href="#Generator-817"><span class="linenos"> 817</span></a>
+</span><span id="Generator-818"><a href="#Generator-818"><span class="linenos"> 818</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-819"><a href="#Generator-819"><span class="linenos"> 819</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
+</span><span id="Generator-820"><a href="#Generator-820"><span class="linenos"> 820</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-821"><a href="#Generator-821"><span class="linenos"> 821</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-822"><a href="#Generator-822"><span class="linenos"> 822</span></a>
+</span><span id="Generator-823"><a href="#Generator-823"><span class="linenos"> 823</span></a> <span class="n">expr</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="Generator-824"><a href="#Generator-824"><span class="linenos"> 824</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
+</span><span id="Generator-825"><a href="#Generator-825"><span class="linenos"> 825</span></a>
+</span><span id="Generator-826"><a href="#Generator-826"><span class="linenos"> 826</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-827"><a href="#Generator-827"><span class="linenos"> 827</span></a>
+</span><span id="Generator-828"><a href="#Generator-828"><span class="linenos"> 828</span></a> <span class="k">def</span> <span class="nf">generatedasrowcolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator-829"><a href="#Generator-829"><span class="linenos"> 829</span></a> <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">GeneratedAsRowColumnConstraint</span>
+</span><span id="Generator-830"><a href="#Generator-830"><span class="linenos"> 830</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-831"><a href="#Generator-831"><span class="linenos"> 831</span></a> <span class="n">start</span> <span class="o">=</span> <span class="s2">&quot;START&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;END&quot;</span>
+</span><span id="Generator-832"><a href="#Generator-832"><span class="linenos"> 832</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="s2">&quot; HIDDEN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hidden&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-833"><a href="#Generator-833"><span class="linenos"> 833</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED ALWAYS AS ROW </span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">hidden</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-834"><a href="#Generator-834"><span class="linenos"> 834</span></a>
+</span><span id="Generator-835"><a href="#Generator-835"><span class="linenos"> 835</span></a> <span class="k">def</span> <span class="nf">periodforsystemtimeconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator-836"><a href="#Generator-836"><span class="linenos"> 836</span></a> <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">PeriodForSystemTimeConstraint</span>
+</span><span id="Generator-837"><a href="#Generator-837"><span class="linenos"> 837</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-838"><a href="#Generator-838"><span class="linenos"> 838</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PERIOD FOR SYSTEM_TIME (</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-839"><a href="#Generator-839"><span class="linenos"> 839</span></a>
+</span><span id="Generator-840"><a href="#Generator-840"><span class="linenos"> 840</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_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">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-841"><a href="#Generator-841"><span class="linenos"> 841</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
+</span><span id="Generator-842"><a href="#Generator-842"><span class="linenos"> 842</span></a>
+</span><span id="Generator-843"><a href="#Generator-843"><span class="linenos"> 843</span></a> <span class="k">def</span> <span class="nf">transformcolumnconstraint_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">TransformColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-844"><a href="#Generator-844"><span class="linenos"> 844</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="Generator-845"><a href="#Generator-845"><span class="linenos"> 845</span></a>
+</span><span id="Generator-846"><a href="#Generator-846"><span class="linenos"> 846</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_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">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-847"><a href="#Generator-847"><span class="linenos"> 847</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
+</span><span id="Generator-848"><a href="#Generator-848"><span class="linenos"> 848</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-849"><a href="#Generator-849"><span class="linenos"> 849</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-850"><a href="#Generator-850"><span class="linenos"> 850</span></a> <span class="k">return</span> <span class="s2">&quot;PRIMARY KEY&quot;</span>
+</span><span id="Generator-851"><a href="#Generator-851"><span class="linenos"> 851</span></a>
+</span><span id="Generator-852"><a href="#Generator-852"><span class="linenos"> 852</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_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">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-853"><a href="#Generator-853"><span class="linenos"> 853</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-854"><a href="#Generator-854"><span class="linenos"> 854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-855"><a href="#Generator-855"><span class="linenos"> 855</span></a> <span class="n">index_type</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;index_type&quot;</span><span class="p">)</span>
+</span><span id="Generator-856"><a href="#Generator-856"><span class="linenos"> 856</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-857"><a href="#Generator-857"><span class="linenos"> 857</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-858"><a href="#Generator-858"><span class="linenos"> 858</span></a>
+</span><span id="Generator-859"><a href="#Generator-859"><span class="linenos"> 859</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-860"><a href="#Generator-860"><span class="linenos"> 860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-861"><a href="#Generator-861"><span class="linenos"> 861</span></a>
+</span><span id="Generator-862"><a href="#Generator-862"><span class="linenos"> 862</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-863"><a href="#Generator-863"><span class="linenos"> 863</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-864"><a href="#Generator-864"><span class="linenos"> 864</span></a> <span class="n">properties</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;properties&quot;</span><span class="p">)</span>
+</span><span id="Generator-865"><a href="#Generator-865"><span class="linenos"> 865</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
+</span><span id="Generator-866"><a href="#Generator-866"><span class="linenos"> 866</span></a>
+</span><span id="Generator-867"><a href="#Generator-867"><span class="linenos"> 867</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="Generator-868"><a href="#Generator-868"><span class="linenos"> 868</span></a>
+</span><span id="Generator-869"><a href="#Generator-869"><span class="linenos"> 869</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-870"><a href="#Generator-870"><span class="linenos"> 870</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+</span><span id="Generator-871"><a href="#Generator-871"><span class="linenos"> 871</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
+</span><span id="Generator-872"><a href="#Generator-872"><span class="linenos"> 872</span></a> <span class="p">):</span>
+</span><span id="Generator-873"><a href="#Generator-873"><span class="linenos"> 873</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-874"><a href="#Generator-874"><span class="linenos"> 874</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator-875"><a href="#Generator-875"><span class="linenos"> 875</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator-876"><a href="#Generator-876"><span class="linenos"> 876</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
+</span><span id="Generator-877"><a href="#Generator-877"><span class="linenos"> 877</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
+</span><span id="Generator-878"><a href="#Generator-878"><span class="linenos"> 878</span></a> <span class="p">]</span>
+</span><span id="Generator-879"><a href="#Generator-879"><span class="linenos"> 879</span></a> <span class="p">)</span>
+</span><span id="Generator-880"><a href="#Generator-880"><span class="linenos"> 880</span></a> <span class="p">)</span>
+</span><span id="Generator-881"><a href="#Generator-881"><span class="linenos"> 881</span></a>
+</span><span id="Generator-882"><a href="#Generator-882"><span class="linenos"> 882</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-883"><a href="#Generator-883"><span class="linenos"> 883</span></a> <span class="n">end</span> <span class="o">=</span> <span class="s2">&quot; END&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;end&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-884"><a href="#Generator-884"><span class="linenos"> 884</span></a>
-</span><span id="Generator-885"><a href="#Generator-885"><span class="linenos"> 885</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
-</span><span id="Generator-886"><a href="#Generator-886"><span class="linenos"> 886</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
-</span><span id="Generator-887"><a href="#Generator-887"><span class="linenos"> 887</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-888"><a href="#Generator-888"><span class="linenos"> 888</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator-889"><a href="#Generator-889"><span class="linenos"> 889</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
-</span><span id="Generator-890"><a href="#Generator-890"><span class="linenos"> 890</span></a> <span class="p">),</span>
-</span><span id="Generator-891"><a href="#Generator-891"><span class="linenos"> 891</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-892"><a href="#Generator-892"><span class="linenos"> 892</span></a> <span class="p">)</span>
-</span><span id="Generator-893"><a href="#Generator-893"><span class="linenos"> 893</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-894"><a href="#Generator-894"><span class="linenos"> 894</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-895"><a href="#Generator-895"><span class="linenos"> 895</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-896"><a href="#Generator-896"><span class="linenos"> 896</span></a>
-</span><span id="Generator-897"><a href="#Generator-897"><span class="linenos"> 897</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-898"><a href="#Generator-898"><span class="linenos"> 898</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
-</span><span id="Generator-899"><a href="#Generator-899"><span class="linenos"> 899</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-900"><a href="#Generator-900"><span class="linenos"> 900</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
-</span><span id="Generator-901"><a href="#Generator-901"><span class="linenos"> 901</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-902"><a href="#Generator-902"><span class="linenos"> 902</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-903"><a href="#Generator-903"><span class="linenos"> 903</span></a> <span class="p">)</span>
-</span><span id="Generator-904"><a href="#Generator-904"><span class="linenos"> 904</span></a>
-</span><span id="Generator-905"><a href="#Generator-905"><span class="linenos"> 905</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-906"><a href="#Generator-906"><span class="linenos"> 906</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-907"><a href="#Generator-907"><span class="linenos"> 907</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="Generator-885"><a href="#Generator-885"><span class="linenos"> 885</span></a> <span class="n">expression_sql</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="Generator-886"><a href="#Generator-886"><span class="linenos"> 886</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
+</span><span id="Generator-887"><a href="#Generator-887"><span class="linenos"> 887</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-888"><a href="#Generator-888"><span class="linenos"> 888</span></a>
+</span><span id="Generator-889"><a href="#Generator-889"><span class="linenos"> 889</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
+</span><span id="Generator-890"><a href="#Generator-890"><span class="linenos"> 890</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
+</span><span id="Generator-891"><a href="#Generator-891"><span class="linenos"> 891</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-892"><a href="#Generator-892"><span class="linenos"> 892</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator-893"><a href="#Generator-893"><span class="linenos"> 893</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
+</span><span id="Generator-894"><a href="#Generator-894"><span class="linenos"> 894</span></a> <span class="p">),</span>
+</span><span id="Generator-895"><a href="#Generator-895"><span class="linenos"> 895</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-896"><a href="#Generator-896"><span class="linenos"> 896</span></a> <span class="p">)</span>
+</span><span id="Generator-897"><a href="#Generator-897"><span class="linenos"> 897</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-898"><a href="#Generator-898"><span class="linenos"> 898</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-899"><a href="#Generator-899"><span class="linenos"> 899</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-900"><a href="#Generator-900"><span class="linenos"> 900</span></a>
+</span><span id="Generator-901"><a href="#Generator-901"><span class="linenos"> 901</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-902"><a href="#Generator-902"><span class="linenos"> 902</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
+</span><span id="Generator-903"><a href="#Generator-903"><span class="linenos"> 903</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-904"><a href="#Generator-904"><span class="linenos"> 904</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
+</span><span id="Generator-905"><a href="#Generator-905"><span class="linenos"> 905</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-906"><a href="#Generator-906"><span class="linenos"> 906</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator-907"><a href="#Generator-907"><span class="linenos"> 907</span></a> <span class="p">)</span>
</span><span id="Generator-908"><a href="#Generator-908"><span class="linenos"> 908</span></a>
-</span><span id="Generator-909"><a href="#Generator-909"><span class="linenos"> 909</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-910"><a href="#Generator-910"><span class="linenos"> 910</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-911"><a href="#Generator-911"><span class="linenos"> 911</span></a>
-</span><span id="Generator-912"><a href="#Generator-912"><span class="linenos"> 912</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-913"><a href="#Generator-913"><span class="linenos"> 913</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
-</span><span id="Generator-914"><a href="#Generator-914"><span class="linenos"> 914</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-915"><a href="#Generator-915"><span class="linenos"> 915</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
-</span><span id="Generator-916"><a href="#Generator-916"><span class="linenos"> 916</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-917"><a href="#Generator-917"><span class="linenos"> 917</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-918"><a href="#Generator-918"><span class="linenos"> 918</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-919"><a href="#Generator-919"><span class="linenos"> 919</span></a> <span class="p">)</span>
-</span><span id="Generator-920"><a href="#Generator-920"><span class="linenos"> 920</span></a>
-</span><span id="Generator-921"><a href="#Generator-921"><span class="linenos"> 921</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
-</span><span id="Generator-922"><a href="#Generator-922"><span class="linenos"> 922</span></a>
-</span><span id="Generator-923"><a href="#Generator-923"><span class="linenos"> 923</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-924"><a href="#Generator-924"><span class="linenos"> 924</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
-</span><span id="Generator-925"><a href="#Generator-925"><span class="linenos"> 925</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator-926"><a href="#Generator-926"><span class="linenos"> 926</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator-927"><a href="#Generator-927"><span class="linenos"> 927</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
-</span><span id="Generator-928"><a href="#Generator-928"><span class="linenos"> 928</span></a> <span class="p">),</span>
-</span><span id="Generator-929"><a href="#Generator-929"><span class="linenos"> 929</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-930"><a href="#Generator-930"><span class="linenos"> 930</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator-931"><a href="#Generator-931"><span class="linenos"> 931</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-932"><a href="#Generator-932"><span class="linenos"> 932</span></a> <span class="p">)</span>
-</span><span id="Generator-933"><a href="#Generator-933"><span class="linenos"> 933</span></a>
-</span><span id="Generator-934"><a href="#Generator-934"><span class="linenos"> 934</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-935"><a href="#Generator-935"><span class="linenos"> 935</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-936"><a href="#Generator-936"><span class="linenos"> 936</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-937"><a href="#Generator-937"><span class="linenos"> 937</span></a> <span class="p">)</span>
-</span><span id="Generator-938"><a href="#Generator-938"><span class="linenos"> 938</span></a>
-</span><span id="Generator-939"><a href="#Generator-939"><span class="linenos"> 939</span></a> <span class="n">clone</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;clone&quot;</span><span class="p">)</span>
-</span><span id="Generator-940"><a href="#Generator-940"><span class="linenos"> 940</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-941"><a href="#Generator-941"><span class="linenos"> 941</span></a>
-</span><span id="Generator-942"><a href="#Generator-942"><span class="linenos"> 942</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-943"><a href="#Generator-943"><span class="linenos"> 943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
-</span><span id="Generator-944"><a href="#Generator-944"><span class="linenos"> 944</span></a>
-</span><span id="Generator-945"><a href="#Generator-945"><span class="linenos"> 945</span></a> <span class="k">def</span> <span class="nf">clone_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">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-946"><a href="#Generator-946"><span class="linenos"> 946</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-947"><a href="#Generator-947"><span class="linenos"> 947</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-948"><a href="#Generator-948"><span class="linenos"> 948</span></a> <span class="n">keyword</span> <span class="o">=</span> <span class="s2">&quot;COPY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_COPY</span> <span class="k">else</span> <span class="s2">&quot;CLONE&quot;</span>
-</span><span id="Generator-949"><a href="#Generator-949"><span class="linenos"> 949</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">shallow</span><span class="si">}{</span><span class="n">keyword</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-950"><a href="#Generator-950"><span class="linenos"> 950</span></a>
-</span><span id="Generator-951"><a href="#Generator-951"><span class="linenos"> 951</span></a> <span class="k">def</span> <span class="nf">describe_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">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-952"><a href="#Generator-952"><span class="linenos"> 952</span></a> <span class="n">extended</span> <span class="o">=</span> <span class="s2">&quot; EXTENDED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;extended&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-953"><a href="#Generator-953"><span class="linenos"> 953</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE</span><span class="si">{</span><span class="n">extended</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-909"><a href="#Generator-909"><span class="linenos"> 909</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-910"><a href="#Generator-910"><span class="linenos"> 910</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-911"><a href="#Generator-911"><span class="linenos"> 911</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="Generator-912"><a href="#Generator-912"><span class="linenos"> 912</span></a>
+</span><span id="Generator-913"><a href="#Generator-913"><span class="linenos"> 913</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-914"><a href="#Generator-914"><span class="linenos"> 914</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-915"><a href="#Generator-915"><span class="linenos"> 915</span></a>
+</span><span id="Generator-916"><a href="#Generator-916"><span class="linenos"> 916</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-917"><a href="#Generator-917"><span class="linenos"> 917</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
+</span><span id="Generator-918"><a href="#Generator-918"><span class="linenos"> 918</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-919"><a href="#Generator-919"><span class="linenos"> 919</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
+</span><span id="Generator-920"><a href="#Generator-920"><span class="linenos"> 920</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator-921"><a href="#Generator-921"><span class="linenos"> 921</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator-922"><a href="#Generator-922"><span class="linenos"> 922</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-923"><a href="#Generator-923"><span class="linenos"> 923</span></a> <span class="p">)</span>
+</span><span id="Generator-924"><a href="#Generator-924"><span class="linenos"> 924</span></a>
+</span><span id="Generator-925"><a href="#Generator-925"><span class="linenos"> 925</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
+</span><span id="Generator-926"><a href="#Generator-926"><span class="linenos"> 926</span></a>
+</span><span id="Generator-927"><a href="#Generator-927"><span class="linenos"> 927</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-928"><a href="#Generator-928"><span class="linenos"> 928</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
+</span><span id="Generator-929"><a href="#Generator-929"><span class="linenos"> 929</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator-930"><a href="#Generator-930"><span class="linenos"> 930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator-931"><a href="#Generator-931"><span class="linenos"> 931</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
+</span><span id="Generator-932"><a href="#Generator-932"><span class="linenos"> 932</span></a> <span class="p">),</span>
+</span><span id="Generator-933"><a href="#Generator-933"><span class="linenos"> 933</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator-934"><a href="#Generator-934"><span class="linenos"> 934</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator-935"><a href="#Generator-935"><span class="linenos"> 935</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-936"><a href="#Generator-936"><span class="linenos"> 936</span></a> <span class="p">)</span>
+</span><span id="Generator-937"><a href="#Generator-937"><span class="linenos"> 937</span></a>
+</span><span id="Generator-938"><a href="#Generator-938"><span class="linenos"> 938</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-939"><a href="#Generator-939"><span class="linenos"> 939</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-940"><a href="#Generator-940"><span class="linenos"> 940</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-941"><a href="#Generator-941"><span class="linenos"> 941</span></a> <span class="p">)</span>
+</span><span id="Generator-942"><a href="#Generator-942"><span class="linenos"> 942</span></a>
+</span><span id="Generator-943"><a href="#Generator-943"><span class="linenos"> 943</span></a> <span class="n">clone</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;clone&quot;</span><span class="p">)</span>
+</span><span id="Generator-944"><a href="#Generator-944"><span class="linenos"> 944</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-945"><a href="#Generator-945"><span class="linenos"> 945</span></a>
+</span><span id="Generator-946"><a href="#Generator-946"><span class="linenos"> 946</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-947"><a href="#Generator-947"><span class="linenos"> 947</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
+</span><span id="Generator-948"><a href="#Generator-948"><span class="linenos"> 948</span></a>
+</span><span id="Generator-949"><a href="#Generator-949"><span class="linenos"> 949</span></a> <span class="k">def</span> <span class="nf">clone_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">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-950"><a href="#Generator-950"><span class="linenos"> 950</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-951"><a href="#Generator-951"><span class="linenos"> 951</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-952"><a href="#Generator-952"><span class="linenos"> 952</span></a> <span class="n">keyword</span> <span class="o">=</span> <span class="s2">&quot;COPY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_COPY</span> <span class="k">else</span> <span class="s2">&quot;CLONE&quot;</span>
+</span><span id="Generator-953"><a href="#Generator-953"><span class="linenos"> 953</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">shallow</span><span class="si">}{</span><span class="n">keyword</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-954"><a href="#Generator-954"><span class="linenos"> 954</span></a>
-</span><span id="Generator-955"><a href="#Generator-955"><span class="linenos"> 955</span></a> <span class="k">def</span> <span class="nf">heredoc_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">Heredoc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-956"><a href="#Generator-956"><span class="linenos"> 956</span></a> <span class="n">tag</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;tag&quot;</span><span class="p">)</span>
-</span><span id="Generator-957"><a href="#Generator-957"><span class="linenos"> 957</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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">$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$&quot;</span>
+</span><span id="Generator-955"><a href="#Generator-955"><span class="linenos"> 955</span></a> <span class="k">def</span> <span class="nf">describe_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">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-956"><a href="#Generator-956"><span class="linenos"> 956</span></a> <span class="n">extended</span> <span class="o">=</span> <span class="s2">&quot; EXTENDED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;extended&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-957"><a href="#Generator-957"><span class="linenos"> 957</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE</span><span class="si">{</span><span class="n">extended</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-958"><a href="#Generator-958"><span class="linenos"> 958</span></a>
-</span><span id="Generator-959"><a href="#Generator-959"><span class="linenos"> 959</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-960"><a href="#Generator-960"><span class="linenos"> 960</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
-</span><span id="Generator-961"><a href="#Generator-961"><span class="linenos"> 961</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="Generator-962"><a href="#Generator-962"><span class="linenos"> 962</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-963"><a href="#Generator-963"><span class="linenos"> 963</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-964"><a href="#Generator-964"><span class="linenos"> 964</span></a>
-</span><span id="Generator-965"><a href="#Generator-965"><span class="linenos"> 965</span></a> <span class="k">def</span> <span class="nf">with_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-966"><a href="#Generator-966"><span class="linenos"> 966</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-967"><a href="#Generator-967"><span class="linenos"> 967</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-968"><a href="#Generator-968"><span class="linenos"> 968</span></a> <span class="s2">&quot;RECURSIVE &quot;</span>
-</span><span id="Generator-969"><a href="#Generator-969"><span class="linenos"> 969</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CTE_RECURSIVE_KEYWORD_REQUIRED</span> <span class="ow">and</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;recursive&quot;</span><span class="p">)</span>
-</span><span id="Generator-970"><a href="#Generator-970"><span class="linenos"> 970</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-971"><a href="#Generator-971"><span class="linenos"> 971</span></a> <span class="p">)</span>
-</span><span id="Generator-972"><a href="#Generator-972"><span class="linenos"> 972</span></a>
-</span><span id="Generator-973"><a href="#Generator-973"><span class="linenos"> 973</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-974"><a href="#Generator-974"><span class="linenos"> 974</span></a>
-</span><span id="Generator-975"><a href="#Generator-975"><span class="linenos"> 975</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-976"><a href="#Generator-976"><span class="linenos"> 976</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-977"><a href="#Generator-977"><span class="linenos"> 977</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-959"><a href="#Generator-959"><span class="linenos"> 959</span></a> <span class="k">def</span> <span class="nf">heredoc_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">Heredoc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-960"><a href="#Generator-960"><span class="linenos"> 960</span></a> <span class="n">tag</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;tag&quot;</span><span class="p">)</span>
+</span><span id="Generator-961"><a href="#Generator-961"><span class="linenos"> 961</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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">$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$&quot;</span>
+</span><span id="Generator-962"><a href="#Generator-962"><span class="linenos"> 962</span></a>
+</span><span id="Generator-963"><a href="#Generator-963"><span class="linenos"> 963</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-964"><a href="#Generator-964"><span class="linenos"> 964</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
+</span><span id="Generator-965"><a href="#Generator-965"><span class="linenos"> 965</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="Generator-966"><a href="#Generator-966"><span class="linenos"> 966</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-967"><a href="#Generator-967"><span class="linenos"> 967</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-968"><a href="#Generator-968"><span class="linenos"> 968</span></a>
+</span><span id="Generator-969"><a href="#Generator-969"><span class="linenos"> 969</span></a> <span class="k">def</span> <span class="nf">with_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-970"><a href="#Generator-970"><span class="linenos"> 970</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-971"><a href="#Generator-971"><span class="linenos"> 971</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-972"><a href="#Generator-972"><span class="linenos"> 972</span></a> <span class="s2">&quot;RECURSIVE &quot;</span>
+</span><span id="Generator-973"><a href="#Generator-973"><span class="linenos"> 973</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CTE_RECURSIVE_KEYWORD_REQUIRED</span> <span class="ow">and</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;recursive&quot;</span><span class="p">)</span>
+</span><span id="Generator-974"><a href="#Generator-974"><span class="linenos"> 974</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-975"><a href="#Generator-975"><span class="linenos"> 975</span></a> <span class="p">)</span>
+</span><span id="Generator-976"><a href="#Generator-976"><span class="linenos"> 976</span></a>
+</span><span id="Generator-977"><a href="#Generator-977"><span class="linenos"> 977</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-978"><a href="#Generator-978"><span class="linenos"> 978</span></a>
-</span><span id="Generator-979"><a href="#Generator-979"><span class="linenos"> 979</span></a> <span class="k">def</span> <span class="nf">tablealias_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">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-980"><a href="#Generator-980"><span class="linenos"> 980</span></a> <span class="n">alias</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="Generator-981"><a href="#Generator-981"><span class="linenos"> 981</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-982"><a href="#Generator-982"><span class="linenos"> 982</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-983"><a href="#Generator-983"><span class="linenos"> 983</span></a>
-</span><span id="Generator-984"><a href="#Generator-984"><span class="linenos"> 984</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_ALIAS_COLUMNS</span><span class="p">:</span>
-</span><span id="Generator-985"><a href="#Generator-985"><span class="linenos"> 985</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-986"><a href="#Generator-986"><span class="linenos"> 986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Named columns are not supported in table alias.&quot;</span><span class="p">)</span>
+</span><span id="Generator-979"><a href="#Generator-979"><span class="linenos"> 979</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-980"><a href="#Generator-980"><span class="linenos"> 980</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-981"><a href="#Generator-981"><span class="linenos"> 981</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-982"><a href="#Generator-982"><span class="linenos"> 982</span></a>
+</span><span id="Generator-983"><a href="#Generator-983"><span class="linenos"> 983</span></a> <span class="k">def</span> <span class="nf">tablealias_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">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-984"><a href="#Generator-984"><span class="linenos"> 984</span></a> <span class="n">alias</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="Generator-985"><a href="#Generator-985"><span class="linenos"> 985</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-986"><a href="#Generator-986"><span class="linenos"> 986</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-987"><a href="#Generator-987"><span class="linenos"> 987</span></a>
-</span><span id="Generator-988"><a href="#Generator-988"><span class="linenos"> 988</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="Generator-989"><a href="#Generator-989"><span class="linenos"> 989</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;_t&quot;</span>
-</span><span id="Generator-990"><a href="#Generator-990"><span class="linenos"> 990</span></a>
-</span><span id="Generator-991"><a href="#Generator-991"><span class="linenos"> 991</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-992"><a href="#Generator-992"><span class="linenos"> 992</span></a>
-</span><span id="Generator-993"><a href="#Generator-993"><span class="linenos"> 993</span></a> <span class="k">def</span> <span class="nf">bitstring_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">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-994"><a href="#Generator-994"><span class="linenos"> 994</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-995"><a href="#Generator-995"><span class="linenos"> 995</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
-</span><span id="Generator-996"><a href="#Generator-996"><span class="linenos"> 996</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-997"><a href="#Generator-997"><span class="linenos"> 997</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-998"><a href="#Generator-998"><span class="linenos"> 998</span></a>
-</span><span id="Generator-999"><a href="#Generator-999"><span class="linenos"> 999</span></a> <span class="k">def</span> <span class="nf">hexstring_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">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1000"><a href="#Generator-1000"><span class="linenos">1000</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1001"><a href="#Generator-1001"><span class="linenos">1001</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
-</span><span id="Generator-1002"><a href="#Generator-1002"><span class="linenos">1002</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1003"><a href="#Generator-1003"><span class="linenos">1003</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1004"><a href="#Generator-1004"><span class="linenos">1004</span></a>
-</span><span id="Generator-1005"><a href="#Generator-1005"><span class="linenos">1005</span></a> <span class="k">def</span> <span class="nf">bytestring_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">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1006"><a href="#Generator-1006"><span class="linenos">1006</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1007"><a href="#Generator-1007"><span class="linenos">1007</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
-</span><span id="Generator-1008"><a href="#Generator-1008"><span class="linenos">1008</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1009"><a href="#Generator-1009"><span class="linenos">1009</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Generator-1010"><a href="#Generator-1010"><span class="linenos">1010</span></a>
-</span><span id="Generator-1011"><a href="#Generator-1011"><span class="linenos">1011</span></a> <span class="k">def</span> <span class="nf">unicodestring_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">UnicodeString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1012"><a href="#Generator-1012"><span class="linenos">1012</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1013"><a href="#Generator-1013"><span class="linenos">1013</span></a> <span class="n">escape</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;escape&quot;</span><span class="p">)</span>
+</span><span id="Generator-988"><a href="#Generator-988"><span class="linenos"> 988</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_ALIAS_COLUMNS</span><span class="p">:</span>
+</span><span id="Generator-989"><a href="#Generator-989"><span class="linenos"> 989</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-990"><a href="#Generator-990"><span class="linenos"> 990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Named columns are not supported in table alias.&quot;</span><span class="p">)</span>
+</span><span id="Generator-991"><a href="#Generator-991"><span class="linenos"> 991</span></a>
+</span><span id="Generator-992"><a href="#Generator-992"><span class="linenos"> 992</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="Generator-993"><a href="#Generator-993"><span class="linenos"> 993</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;_t&quot;</span>
+</span><span id="Generator-994"><a href="#Generator-994"><span class="linenos"> 994</span></a>
+</span><span id="Generator-995"><a href="#Generator-995"><span class="linenos"> 995</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-996"><a href="#Generator-996"><span class="linenos"> 996</span></a>
+</span><span id="Generator-997"><a href="#Generator-997"><span class="linenos"> 997</span></a> <span class="k">def</span> <span class="nf">bitstring_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">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-998"><a href="#Generator-998"><span class="linenos"> 998</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-999"><a href="#Generator-999"><span class="linenos"> 999</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
+</span><span id="Generator-1000"><a href="#Generator-1000"><span class="linenos">1000</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1001"><a href="#Generator-1001"><span class="linenos">1001</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1002"><a href="#Generator-1002"><span class="linenos">1002</span></a>
+</span><span id="Generator-1003"><a href="#Generator-1003"><span class="linenos">1003</span></a> <span class="k">def</span> <span class="nf">hexstring_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">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1004"><a href="#Generator-1004"><span class="linenos">1004</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1005"><a href="#Generator-1005"><span class="linenos">1005</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
+</span><span id="Generator-1006"><a href="#Generator-1006"><span class="linenos">1006</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1007"><a href="#Generator-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1008"><a href="#Generator-1008"><span class="linenos">1008</span></a>
+</span><span id="Generator-1009"><a href="#Generator-1009"><span class="linenos">1009</span></a> <span class="k">def</span> <span class="nf">bytestring_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">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1010"><a href="#Generator-1010"><span class="linenos">1010</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1011"><a href="#Generator-1011"><span class="linenos">1011</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
+</span><span id="Generator-1012"><a href="#Generator-1012"><span class="linenos">1012</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1013"><a href="#Generator-1013"><span class="linenos">1013</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Generator-1014"><a href="#Generator-1014"><span class="linenos">1014</span></a>
-</span><span id="Generator-1015"><a href="#Generator-1015"><span class="linenos">1015</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">:</span>
-</span><span id="Generator-1016"><a href="#Generator-1016"><span class="linenos">1016</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; UESCAPE </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">escape</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escape</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1017"><a href="#Generator-1017"><span class="linenos">1017</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_END</span><span class="si">}{</span><span class="n">escape</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1015"><a href="#Generator-1015"><span class="linenos">1015</span></a> <span class="k">def</span> <span class="nf">unicodestring_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">UnicodeString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1016"><a href="#Generator-1016"><span class="linenos">1016</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1017"><a href="#Generator-1017"><span class="linenos">1017</span></a> <span class="n">escape</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;escape&quot;</span><span class="p">)</span>
</span><span id="Generator-1018"><a href="#Generator-1018"><span class="linenos">1018</span></a>
-</span><span id="Generator-1019"><a href="#Generator-1019"><span class="linenos">1019</span></a> <span class="k">if</span> <span class="n">escape</span><span class="p">:</span>
-</span><span id="Generator-1020"><a href="#Generator-1020"><span class="linenos">1020</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rf</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">escape</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(\d+)&quot;</span><span class="p">)</span>
-</span><span id="Generator-1021"><a href="#Generator-1021"><span class="linenos">1021</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1022"><a href="#Generator-1022"><span class="linenos">1022</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">ESCAPED_UNICODE_RE</span>
-</span><span id="Generator-1023"><a href="#Generator-1023"><span class="linenos">1023</span></a>
-</span><span id="Generator-1024"><a href="#Generator-1024"><span class="linenos">1024</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">u\1&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-1025"><a href="#Generator-1025"><span class="linenos">1025</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1026"><a href="#Generator-1026"><span class="linenos">1026</span></a>
-</span><span id="Generator-1027"><a href="#Generator-1027"><span class="linenos">1027</span></a> <span class="k">def</span> <span class="nf">rawstring_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">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1028"><a href="#Generator-1028"><span class="linenos">1028</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="Generator-1029"><a href="#Generator-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">string</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1019"><a href="#Generator-1019"><span class="linenos">1019</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">:</span>
+</span><span id="Generator-1020"><a href="#Generator-1020"><span class="linenos">1020</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; UESCAPE </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">escape</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escape</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1021"><a href="#Generator-1021"><span class="linenos">1021</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_END</span><span class="si">}{</span><span class="n">escape</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1022"><a href="#Generator-1022"><span class="linenos">1022</span></a>
+</span><span id="Generator-1023"><a href="#Generator-1023"><span class="linenos">1023</span></a> <span class="k">if</span> <span class="n">escape</span><span class="p">:</span>
+</span><span id="Generator-1024"><a href="#Generator-1024"><span class="linenos">1024</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rf</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">escape</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(\d+)&quot;</span><span class="p">)</span>
+</span><span id="Generator-1025"><a href="#Generator-1025"><span class="linenos">1025</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1026"><a href="#Generator-1026"><span class="linenos">1026</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">ESCAPED_UNICODE_RE</span>
+</span><span id="Generator-1027"><a href="#Generator-1027"><span class="linenos">1027</span></a>
+</span><span id="Generator-1028"><a href="#Generator-1028"><span class="linenos">1028</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">u\1&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-1029"><a href="#Generator-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1030"><a href="#Generator-1030"><span class="linenos">1030</span></a>
-</span><span id="Generator-1031"><a href="#Generator-1031"><span class="linenos">1031</span></a> <span class="k">def</span> <span class="nf">datatypeparam_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">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1032"><a href="#Generator-1032"><span class="linenos">1032</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1033"><a href="#Generator-1033"><span class="linenos">1033</span></a> <span class="n">specifier</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="Generator-1034"><a href="#Generator-1034"><span class="linenos">1034</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DATA_TYPE_SPECIFIERS_ALLOWED</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1035"><a href="#Generator-1035"><span class="linenos">1035</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1036"><a href="#Generator-1036"><span class="linenos">1036</span></a>
-</span><span id="Generator-1037"><a href="#Generator-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1038"><a href="#Generator-1038"><span class="linenos">1038</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-1039"><a href="#Generator-1039"><span class="linenos">1039</span></a>
-</span><span id="Generator-1040"><a href="#Generator-1040"><span class="linenos">1040</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
-</span><span id="Generator-1041"><a href="#Generator-1041"><span class="linenos">1041</span></a> <span class="n">type_sql</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-1042"><a href="#Generator-1042"><span class="linenos">1042</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1043"><a href="#Generator-1043"><span class="linenos">1043</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1044"><a href="#Generator-1044"><span class="linenos">1044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator-1045"><a href="#Generator-1045"><span class="linenos">1045</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
-</span><span id="Generator-1046"><a href="#Generator-1046"><span class="linenos">1046</span></a> <span class="k">else</span> <span class="n">type_value</span>
-</span><span id="Generator-1047"><a href="#Generator-1047"><span class="linenos">1047</span></a> <span class="p">)</span>
-</span><span id="Generator-1048"><a href="#Generator-1048"><span class="linenos">1048</span></a>
-</span><span id="Generator-1049"><a href="#Generator-1049"><span class="linenos">1049</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1050"><a href="#Generator-1050"><span class="linenos">1050</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1051"><a href="#Generator-1051"><span class="linenos">1051</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1031"><a href="#Generator-1031"><span class="linenos">1031</span></a> <span class="k">def</span> <span class="nf">rawstring_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">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1032"><a href="#Generator-1032"><span class="linenos">1032</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="Generator-1033"><a href="#Generator-1033"><span class="linenos">1033</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">string</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1034"><a href="#Generator-1034"><span class="linenos">1034</span></a>
+</span><span id="Generator-1035"><a href="#Generator-1035"><span class="linenos">1035</span></a> <span class="k">def</span> <span class="nf">datatypeparam_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">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1036"><a href="#Generator-1036"><span class="linenos">1036</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1037"><a href="#Generator-1037"><span class="linenos">1037</span></a> <span class="n">specifier</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="Generator-1038"><a href="#Generator-1038"><span class="linenos">1038</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DATA_TYPE_SPECIFIERS_ALLOWED</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1039"><a href="#Generator-1039"><span class="linenos">1039</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1040"><a href="#Generator-1040"><span class="linenos">1040</span></a>
+</span><span id="Generator-1041"><a href="#Generator-1041"><span class="linenos">1041</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1042"><a href="#Generator-1042"><span class="linenos">1042</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-1043"><a href="#Generator-1043"><span class="linenos">1043</span></a>
+</span><span id="Generator-1044"><a href="#Generator-1044"><span class="linenos">1044</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
+</span><span id="Generator-1045"><a href="#Generator-1045"><span class="linenos">1045</span></a> <span class="n">type_sql</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-1046"><a href="#Generator-1046"><span class="linenos">1046</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1047"><a href="#Generator-1047"><span class="linenos">1047</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1048"><a href="#Generator-1048"><span class="linenos">1048</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator-1049"><a href="#Generator-1049"><span class="linenos">1049</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
+</span><span id="Generator-1050"><a href="#Generator-1050"><span class="linenos">1050</span></a> <span class="k">else</span> <span class="n">type_value</span>
+</span><span id="Generator-1051"><a href="#Generator-1051"><span class="linenos">1051</span></a> <span class="p">)</span>
</span><span id="Generator-1052"><a href="#Generator-1052"><span class="linenos">1052</span></a>
-</span><span id="Generator-1053"><a href="#Generator-1053"><span class="linenos">1053</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
-</span><span id="Generator-1054"><a href="#Generator-1054"><span class="linenos">1054</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
-</span><span id="Generator-1055"><a href="#Generator-1055"><span class="linenos">1055</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1056"><a href="#Generator-1056"><span class="linenos">1056</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1057"><a href="#Generator-1057"><span class="linenos">1057</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</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="Generator-1058"><a href="#Generator-1058"><span class="linenos">1058</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1059"><a href="#Generator-1059"><span class="linenos">1059</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1060"><a href="#Generator-1060"><span class="linenos">1060</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
-</span><span id="Generator-1061"><a href="#Generator-1061"><span class="linenos">1061</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1062"><a href="#Generator-1062"><span class="linenos">1062</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1063"><a href="#Generator-1063"><span class="linenos">1063</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1064"><a href="#Generator-1064"><span class="linenos">1064</span></a>
-</span><span id="Generator-1065"><a href="#Generator-1065"><span class="linenos">1065</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1066"><a href="#Generator-1066"><span class="linenos">1066</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator-1067"><a href="#Generator-1067"><span class="linenos">1067</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
-</span><span id="Generator-1068"><a href="#Generator-1068"><span class="linenos">1068</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Generator-1069"><a href="#Generator-1069"><span class="linenos">1069</span></a> <span class="p">):</span>
-</span><span id="Generator-1070"><a href="#Generator-1070"><span class="linenos">1070</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
-</span><span id="Generator-1071"><a href="#Generator-1071"><span class="linenos">1071</span></a>
-</span><span id="Generator-1072"><a href="#Generator-1072"><span class="linenos">1072</span></a> <span class="k">return</span> <span class="n">type_sql</span>
-</span><span id="Generator-1073"><a href="#Generator-1073"><span class="linenos">1073</span></a>
-</span><span id="Generator-1074"><a href="#Generator-1074"><span class="linenos">1074</span></a> <span class="k">def</span> <span class="nf">directory_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">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1075"><a href="#Generator-1075"><span class="linenos">1075</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1076"><a href="#Generator-1076"><span class="linenos">1076</span></a> <span class="n">row_format</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;row_format&quot;</span><span class="p">)</span>
-</span><span id="Generator-1077"><a href="#Generator-1077"><span class="linenos">1077</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1078"><a href="#Generator-1078"><span class="linenos">1078</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </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="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1079"><a href="#Generator-1079"><span class="linenos">1079</span></a>
-</span><span id="Generator-1080"><a href="#Generator-1080"><span class="linenos">1080</span></a> <span class="k">def</span> <span class="nf">delete_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">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1081"><a href="#Generator-1081"><span class="linenos">1081</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1082"><a href="#Generator-1082"><span class="linenos">1082</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1083"><a href="#Generator-1083"><span class="linenos">1083</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator-1084"><a href="#Generator-1084"><span class="linenos">1084</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1085"><a href="#Generator-1085"><span class="linenos">1085</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-1086"><a href="#Generator-1086"><span class="linenos">1086</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator-1087"><a href="#Generator-1087"><span class="linenos">1087</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator-1088"><a href="#Generator-1088"><span class="linenos">1088</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
-</span><span id="Generator-1089"><a href="#Generator-1089"><span class="linenos">1089</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1090"><a href="#Generator-1090"><span class="linenos">1090</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator-1091"><a href="#Generator-1091"><span class="linenos">1091</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1092"><a href="#Generator-1092"><span class="linenos">1092</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1093"><a href="#Generator-1093"><span class="linenos">1093</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1094"><a href="#Generator-1094"><span class="linenos">1094</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-1095"><a href="#Generator-1095"><span class="linenos">1095</span></a>
-</span><span id="Generator-1096"><a href="#Generator-1096"><span class="linenos">1096</span></a> <span class="k">def</span> <span class="nf">drop_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">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1097"><a href="#Generator-1097"><span class="linenos">1097</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1098"><a href="#Generator-1098"><span class="linenos">1098</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="Generator-1099"><a href="#Generator-1099"><span class="linenos">1099</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator-1100"><a href="#Generator-1100"><span class="linenos">1100</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1101"><a href="#Generator-1101"><span class="linenos">1101</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1102"><a href="#Generator-1102"><span class="linenos">1102</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1103"><a href="#Generator-1103"><span class="linenos">1103</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1104"><a href="#Generator-1104"><span class="linenos">1104</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1105"><a href="#Generator-1105"><span class="linenos">1105</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator-1106"><a href="#Generator-1106"><span class="linenos">1106</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1107"><a href="#Generator-1107"><span class="linenos">1107</span></a> <span class="p">)</span>
-</span><span id="Generator-1108"><a href="#Generator-1108"><span class="linenos">1108</span></a>
-</span><span id="Generator-1109"><a href="#Generator-1109"><span class="linenos">1109</span></a> <span class="k">def</span> <span class="nf">except_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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1110"><a href="#Generator-1110"><span class="linenos">1110</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator-1111"><a href="#Generator-1111"><span class="linenos">1111</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-1112"><a href="#Generator-1112"><span class="linenos">1112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator-1113"><a href="#Generator-1113"><span class="linenos">1113</span></a> <span class="p">)</span>
-</span><span id="Generator-1114"><a href="#Generator-1114"><span class="linenos">1114</span></a>
-</span><span id="Generator-1115"><a href="#Generator-1115"><span class="linenos">1115</span></a> <span class="k">def</span> <span class="nf">except_op</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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1116"><a href="#Generator-1116"><span class="linenos">1116</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1117"><a href="#Generator-1117"><span class="linenos">1117</span></a>
-</span><span id="Generator-1118"><a href="#Generator-1118"><span class="linenos">1118</span></a> <span class="k">def</span> <span class="nf">fetch_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">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1119"><a href="#Generator-1119"><span class="linenos">1119</span></a> <span class="n">direction</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;direction&quot;</span><span class="p">)</span>
-</span><span id="Generator-1120"><a href="#Generator-1120"><span class="linenos">1120</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1121"><a href="#Generator-1121"><span class="linenos">1121</span></a> <span class="n">count</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;count&quot;</span><span class="p">)</span>
-</span><span id="Generator-1122"><a href="#Generator-1122"><span class="linenos">1122</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1123"><a href="#Generator-1123"><span class="linenos">1123</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
-</span><span id="Generator-1124"><a href="#Generator-1124"><span class="linenos">1124</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
-</span><span id="Generator-1125"><a href="#Generator-1125"><span class="linenos">1125</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
-</span><span id="Generator-1126"><a href="#Generator-1126"><span class="linenos">1126</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1127"><a href="#Generator-1127"><span class="linenos">1127</span></a>
-</span><span id="Generator-1128"><a href="#Generator-1128"><span class="linenos">1128</span></a> <span class="k">def</span> <span class="nf">filter_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">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1129"><a href="#Generator-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_FILTER_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-1130"><a href="#Generator-1130"><span class="linenos">1130</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1131"><a href="#Generator-1131"><span class="linenos">1131</span></a> <span class="n">where</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 class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator-1132"><a href="#Generator-1132"><span class="linenos">1132</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1133"><a href="#Generator-1133"><span class="linenos">1133</span></a>
-</span><span id="Generator-1134"><a href="#Generator-1134"><span class="linenos">1134</span></a> <span class="n">agg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-1135"><a href="#Generator-1135"><span class="linenos">1135</span></a> <span class="n">agg_arg</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-1136"><a href="#Generator-1136"><span class="linenos">1136</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-1137"><a href="#Generator-1137"><span class="linenos">1137</span></a> <span class="n">agg_arg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">true</span><span class="o">=</span><span class="n">agg_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()))</span>
-</span><span id="Generator-1138"><a href="#Generator-1138"><span class="linenos">1138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">agg</span><span class="p">)</span>
-</span><span id="Generator-1139"><a href="#Generator-1139"><span class="linenos">1139</span></a>
-</span><span id="Generator-1140"><a href="#Generator-1140"><span class="linenos">1140</span></a> <span class="k">def</span> <span class="nf">hint_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">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1141"><a href="#Generator-1141"><span class="linenos">1141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
-</span><span id="Generator-1142"><a href="#Generator-1142"><span class="linenos">1142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
-</span><span id="Generator-1143"><a href="#Generator-1143"><span class="linenos">1143</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1144"><a href="#Generator-1144"><span class="linenos">1144</span></a>
-</span><span id="Generator-1145"><a href="#Generator-1145"><span class="linenos">1145</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
-</span><span id="Generator-1146"><a href="#Generator-1146"><span class="linenos">1146</span></a>
-</span><span id="Generator-1147"><a href="#Generator-1147"><span class="linenos">1147</span></a> <span class="k">def</span> <span class="nf">index_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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1148"><a href="#Generator-1148"><span class="linenos">1148</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1149"><a href="#Generator-1149"><span class="linenos">1149</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1150"><a href="#Generator-1150"><span class="linenos">1150</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1151"><a href="#Generator-1151"><span class="linenos">1151</span></a> <span class="n">name</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="Generator-1152"><a href="#Generator-1152"><span class="linenos">1152</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1153"><a href="#Generator-1153"><span class="linenos">1153</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
-</span><span id="Generator-1154"><a href="#Generator-1154"><span class="linenos">1154</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="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </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="Generator-1155"><a href="#Generator-1155"><span class="linenos">1155</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator-1156"><a href="#Generator-1156"><span class="linenos">1156</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1157"><a href="#Generator-1157"><span class="linenos">1157</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1158"><a href="#Generator-1158"><span class="linenos">1158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1159"><a href="#Generator-1159"><span class="linenos">1159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1160"><a href="#Generator-1160"><span class="linenos">1160</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1161"><a href="#Generator-1161"><span class="linenos">1161</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1162"><a href="#Generator-1162"><span class="linenos">1162</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-1163"><a href="#Generator-1163"><span class="linenos">1163</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;include&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1164"><a href="#Generator-1164"><span class="linenos">1164</span></a> <span class="k">if</span> <span class="n">include</span><span class="p">:</span>
-</span><span id="Generator-1165"><a href="#Generator-1165"><span class="linenos">1165</span></a> <span class="n">include</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCLUDE (</span><span class="si">{</span><span class="n">include</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1166"><a href="#Generator-1166"><span class="linenos">1166</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">include</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1167"><a href="#Generator-1167"><span class="linenos">1167</span></a>
-</span><span id="Generator-1168"><a href="#Generator-1168"><span class="linenos">1168</span></a> <span class="k">def</span> <span class="nf">identifier_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">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1169"><a href="#Generator-1169"><span class="linenos">1169</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator-1170"><a href="#Generator-1170"><span class="linenos">1170</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator-1171"><a href="#Generator-1171"><span class="linenos">1171</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="Generator-1172"><a href="#Generator-1172"><span class="linenos">1172</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
-</span><span id="Generator-1173"><a href="#Generator-1173"><span class="linenos">1173</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Generator-1174"><a href="#Generator-1174"><span class="linenos">1174</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Generator-1175"><a href="#Generator-1175"><span class="linenos">1175</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
-</span><span id="Generator-1176"><a href="#Generator-1176"><span class="linenos">1176</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
-</span><span id="Generator-1177"><a href="#Generator-1177"><span class="linenos">1177</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
-</span><span id="Generator-1178"><a href="#Generator-1178"><span class="linenos">1178</span></a> <span class="p">):</span>
-</span><span id="Generator-1179"><a href="#Generator-1179"><span class="linenos">1179</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1180"><a href="#Generator-1180"><span class="linenos">1180</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="Generator-1181"><a href="#Generator-1181"><span class="linenos">1181</span></a>
-</span><span id="Generator-1182"><a href="#Generator-1182"><span class="linenos">1182</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_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">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1183"><a href="#Generator-1183"><span class="linenos">1183</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
-</span><span id="Generator-1184"><a href="#Generator-1184"><span class="linenos">1184</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1185"><a href="#Generator-1185"><span class="linenos">1185</span></a> <span class="n">output_format</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;output_format&quot;</span><span class="p">)</span>
-</span><span id="Generator-1186"><a href="#Generator-1186"><span class="linenos">1186</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1187"><a href="#Generator-1187"><span class="linenos">1187</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
-</span><span id="Generator-1188"><a href="#Generator-1188"><span class="linenos">1188</span></a>
-</span><span id="Generator-1189"><a href="#Generator-1189"><span class="linenos">1189</span></a> <span class="k">def</span> <span class="nf">national_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">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1190"><a href="#Generator-1190"><span class="linenos">1190</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-</span><span id="Generator-1191"><a href="#Generator-1191"><span class="linenos">1191</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1053"><a href="#Generator-1053"><span class="linenos">1053</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1054"><a href="#Generator-1054"><span class="linenos">1054</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1055"><a href="#Generator-1055"><span class="linenos">1055</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1056"><a href="#Generator-1056"><span class="linenos">1056</span></a>
+</span><span id="Generator-1057"><a href="#Generator-1057"><span class="linenos">1057</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
+</span><span id="Generator-1058"><a href="#Generator-1058"><span class="linenos">1058</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
+</span><span id="Generator-1059"><a href="#Generator-1059"><span class="linenos">1059</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1060"><a href="#Generator-1060"><span class="linenos">1060</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1061"><a href="#Generator-1061"><span class="linenos">1061</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</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="Generator-1062"><a href="#Generator-1062"><span class="linenos">1062</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1063"><a href="#Generator-1063"><span class="linenos">1063</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1064"><a href="#Generator-1064"><span class="linenos">1064</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="Generator-1065"><a href="#Generator-1065"><span class="linenos">1065</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1066"><a href="#Generator-1066"><span class="linenos">1066</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1067"><a href="#Generator-1067"><span class="linenos">1067</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1068"><a href="#Generator-1068"><span class="linenos">1068</span></a>
+</span><span id="Generator-1069"><a href="#Generator-1069"><span class="linenos">1069</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1070"><a href="#Generator-1070"><span class="linenos">1070</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator-1071"><a href="#Generator-1071"><span class="linenos">1071</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="Generator-1072"><a href="#Generator-1072"><span class="linenos">1072</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Generator-1073"><a href="#Generator-1073"><span class="linenos">1073</span></a> <span class="p">):</span>
+</span><span id="Generator-1074"><a href="#Generator-1074"><span class="linenos">1074</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
+</span><span id="Generator-1075"><a href="#Generator-1075"><span class="linenos">1075</span></a>
+</span><span id="Generator-1076"><a href="#Generator-1076"><span class="linenos">1076</span></a> <span class="k">return</span> <span class="n">type_sql</span>
+</span><span id="Generator-1077"><a href="#Generator-1077"><span class="linenos">1077</span></a>
+</span><span id="Generator-1078"><a href="#Generator-1078"><span class="linenos">1078</span></a> <span class="k">def</span> <span class="nf">directory_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">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1079"><a href="#Generator-1079"><span class="linenos">1079</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1080"><a href="#Generator-1080"><span class="linenos">1080</span></a> <span class="n">row_format</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;row_format&quot;</span><span class="p">)</span>
+</span><span id="Generator-1081"><a href="#Generator-1081"><span class="linenos">1081</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1082"><a href="#Generator-1082"><span class="linenos">1082</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </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="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1083"><a href="#Generator-1083"><span class="linenos">1083</span></a>
+</span><span id="Generator-1084"><a href="#Generator-1084"><span class="linenos">1084</span></a> <span class="k">def</span> <span class="nf">delete_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">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1085"><a href="#Generator-1085"><span class="linenos">1085</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1086"><a href="#Generator-1086"><span class="linenos">1086</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1087"><a href="#Generator-1087"><span class="linenos">1087</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator-1088"><a href="#Generator-1088"><span class="linenos">1088</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1089"><a href="#Generator-1089"><span class="linenos">1089</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-1090"><a href="#Generator-1090"><span class="linenos">1090</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator-1091"><a href="#Generator-1091"><span class="linenos">1091</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator-1092"><a href="#Generator-1092"><span class="linenos">1092</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
+</span><span id="Generator-1093"><a href="#Generator-1093"><span class="linenos">1093</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1094"><a href="#Generator-1094"><span class="linenos">1094</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator-1095"><a href="#Generator-1095"><span class="linenos">1095</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1096"><a href="#Generator-1096"><span class="linenos">1096</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1097"><a href="#Generator-1097"><span class="linenos">1097</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1098"><a href="#Generator-1098"><span class="linenos">1098</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1099"><a href="#Generator-1099"><span class="linenos">1099</span></a>
+</span><span id="Generator-1100"><a href="#Generator-1100"><span class="linenos">1100</span></a> <span class="k">def</span> <span class="nf">drop_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">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1101"><a href="#Generator-1101"><span class="linenos">1101</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1102"><a href="#Generator-1102"><span class="linenos">1102</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="Generator-1103"><a href="#Generator-1103"><span class="linenos">1103</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator-1104"><a href="#Generator-1104"><span class="linenos">1104</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1105"><a href="#Generator-1105"><span class="linenos">1105</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1106"><a href="#Generator-1106"><span class="linenos">1106</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1107"><a href="#Generator-1107"><span class="linenos">1107</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1108"><a href="#Generator-1108"><span class="linenos">1108</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1109"><a href="#Generator-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator-1110"><a href="#Generator-1110"><span class="linenos">1110</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1111"><a href="#Generator-1111"><span class="linenos">1111</span></a> <span class="p">)</span>
+</span><span id="Generator-1112"><a href="#Generator-1112"><span class="linenos">1112</span></a>
+</span><span id="Generator-1113"><a href="#Generator-1113"><span class="linenos">1113</span></a> <span class="k">def</span> <span class="nf">except_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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1114"><a href="#Generator-1114"><span class="linenos">1114</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator-1115"><a href="#Generator-1115"><span class="linenos">1115</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1116"><a href="#Generator-1116"><span class="linenos">1116</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator-1117"><a href="#Generator-1117"><span class="linenos">1117</span></a> <span class="p">)</span>
+</span><span id="Generator-1118"><a href="#Generator-1118"><span class="linenos">1118</span></a>
+</span><span id="Generator-1119"><a href="#Generator-1119"><span class="linenos">1119</span></a> <span class="k">def</span> <span class="nf">except_op</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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1120"><a href="#Generator-1120"><span class="linenos">1120</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1121"><a href="#Generator-1121"><span class="linenos">1121</span></a>
+</span><span id="Generator-1122"><a href="#Generator-1122"><span class="linenos">1122</span></a> <span class="k">def</span> <span class="nf">fetch_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">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1123"><a href="#Generator-1123"><span class="linenos">1123</span></a> <span class="n">direction</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;direction&quot;</span><span class="p">)</span>
+</span><span id="Generator-1124"><a href="#Generator-1124"><span class="linenos">1124</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1125"><a href="#Generator-1125"><span class="linenos">1125</span></a> <span class="n">count</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;count&quot;</span><span class="p">)</span>
+</span><span id="Generator-1126"><a href="#Generator-1126"><span class="linenos">1126</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1127"><a href="#Generator-1127"><span class="linenos">1127</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
+</span><span id="Generator-1128"><a href="#Generator-1128"><span class="linenos">1128</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="Generator-1129"><a href="#Generator-1129"><span class="linenos">1129</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
+</span><span id="Generator-1130"><a href="#Generator-1130"><span class="linenos">1130</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1131"><a href="#Generator-1131"><span class="linenos">1131</span></a>
+</span><span id="Generator-1132"><a href="#Generator-1132"><span class="linenos">1132</span></a> <span class="k">def</span> <span class="nf">filter_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">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1133"><a href="#Generator-1133"><span class="linenos">1133</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_FILTER_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-1134"><a href="#Generator-1134"><span class="linenos">1134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1135"><a href="#Generator-1135"><span class="linenos">1135</span></a> <span class="n">where</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 class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator-1136"><a href="#Generator-1136"><span class="linenos">1136</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1137"><a href="#Generator-1137"><span class="linenos">1137</span></a>
+</span><span id="Generator-1138"><a href="#Generator-1138"><span class="linenos">1138</span></a> <span class="n">agg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-1139"><a href="#Generator-1139"><span class="linenos">1139</span></a> <span class="n">agg_arg</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-1140"><a href="#Generator-1140"><span class="linenos">1140</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-1141"><a href="#Generator-1141"><span class="linenos">1141</span></a> <span class="n">agg_arg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">true</span><span class="o">=</span><span class="n">agg_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()))</span>
+</span><span id="Generator-1142"><a href="#Generator-1142"><span class="linenos">1142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">agg</span><span class="p">)</span>
+</span><span id="Generator-1143"><a href="#Generator-1143"><span class="linenos">1143</span></a>
+</span><span id="Generator-1144"><a href="#Generator-1144"><span class="linenos">1144</span></a> <span class="k">def</span> <span class="nf">hint_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">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1145"><a href="#Generator-1145"><span class="linenos">1145</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
+</span><span id="Generator-1146"><a href="#Generator-1146"><span class="linenos">1146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
+</span><span id="Generator-1147"><a href="#Generator-1147"><span class="linenos">1147</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1148"><a href="#Generator-1148"><span class="linenos">1148</span></a>
+</span><span id="Generator-1149"><a href="#Generator-1149"><span class="linenos">1149</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
+</span><span id="Generator-1150"><a href="#Generator-1150"><span class="linenos">1150</span></a>
+</span><span id="Generator-1151"><a href="#Generator-1151"><span class="linenos">1151</span></a> <span class="k">def</span> <span class="nf">index_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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1152"><a href="#Generator-1152"><span class="linenos">1152</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1153"><a href="#Generator-1153"><span class="linenos">1153</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1154"><a href="#Generator-1154"><span class="linenos">1154</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1155"><a href="#Generator-1155"><span class="linenos">1155</span></a> <span class="n">name</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="Generator-1156"><a href="#Generator-1156"><span class="linenos">1156</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1157"><a href="#Generator-1157"><span class="linenos">1157</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
+</span><span id="Generator-1158"><a href="#Generator-1158"><span class="linenos">1158</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="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </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="Generator-1159"><a href="#Generator-1159"><span class="linenos">1159</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator-1160"><a href="#Generator-1160"><span class="linenos">1160</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1161"><a href="#Generator-1161"><span class="linenos">1161</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1162"><a href="#Generator-1162"><span class="linenos">1162</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1163"><a href="#Generator-1163"><span class="linenos">1163</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1164"><a href="#Generator-1164"><span class="linenos">1164</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1165"><a href="#Generator-1165"><span class="linenos">1165</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1166"><a href="#Generator-1166"><span class="linenos">1166</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-1167"><a href="#Generator-1167"><span class="linenos">1167</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;include&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1168"><a href="#Generator-1168"><span class="linenos">1168</span></a> <span class="k">if</span> <span class="n">include</span><span class="p">:</span>
+</span><span id="Generator-1169"><a href="#Generator-1169"><span class="linenos">1169</span></a> <span class="n">include</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCLUDE (</span><span class="si">{</span><span class="n">include</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1170"><a href="#Generator-1170"><span class="linenos">1170</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">include</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1171"><a href="#Generator-1171"><span class="linenos">1171</span></a>
+</span><span id="Generator-1172"><a href="#Generator-1172"><span class="linenos">1172</span></a> <span class="k">def</span> <span class="nf">identifier_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">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1173"><a href="#Generator-1173"><span class="linenos">1173</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator-1174"><a href="#Generator-1174"><span class="linenos">1174</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator-1175"><a href="#Generator-1175"><span class="linenos">1175</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="Generator-1176"><a href="#Generator-1176"><span class="linenos">1176</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
+</span><span id="Generator-1177"><a href="#Generator-1177"><span class="linenos">1177</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Generator-1178"><a href="#Generator-1178"><span class="linenos">1178</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Generator-1179"><a href="#Generator-1179"><span class="linenos">1179</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
+</span><span id="Generator-1180"><a href="#Generator-1180"><span class="linenos">1180</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
+</span><span id="Generator-1181"><a href="#Generator-1181"><span class="linenos">1181</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
+</span><span id="Generator-1182"><a href="#Generator-1182"><span class="linenos">1182</span></a> <span class="p">):</span>
+</span><span id="Generator-1183"><a href="#Generator-1183"><span class="linenos">1183</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1184"><a href="#Generator-1184"><span class="linenos">1184</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Generator-1185"><a href="#Generator-1185"><span class="linenos">1185</span></a>
+</span><span id="Generator-1186"><a href="#Generator-1186"><span class="linenos">1186</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_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">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1187"><a href="#Generator-1187"><span class="linenos">1187</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
+</span><span id="Generator-1188"><a href="#Generator-1188"><span class="linenos">1188</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1189"><a href="#Generator-1189"><span class="linenos">1189</span></a> <span class="n">output_format</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;output_format&quot;</span><span class="p">)</span>
+</span><span id="Generator-1190"><a href="#Generator-1190"><span class="linenos">1190</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1191"><a href="#Generator-1191"><span class="linenos">1191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
</span><span id="Generator-1192"><a href="#Generator-1192"><span class="linenos">1192</span></a>
-</span><span id="Generator-1193"><a href="#Generator-1193"><span class="linenos">1193</span></a> <span class="k">def</span> <span class="nf">partition_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">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1194"><a href="#Generator-1194"><span class="linenos">1194</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1195"><a href="#Generator-1195"><span class="linenos">1195</span></a>
-</span><span id="Generator-1196"><a href="#Generator-1196"><span class="linenos">1196</span></a> <span class="k">def</span> <span class="nf">properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1197"><a href="#Generator-1197"><span class="linenos">1197</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-1198"><a href="#Generator-1198"><span class="linenos">1198</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-1193"><a href="#Generator-1193"><span class="linenos">1193</span></a> <span class="k">def</span> <span class="nf">national_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">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1194"><a href="#Generator-1194"><span class="linenos">1194</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</span><span id="Generator-1195"><a href="#Generator-1195"><span class="linenos">1195</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1196"><a href="#Generator-1196"><span class="linenos">1196</span></a>
+</span><span id="Generator-1197"><a href="#Generator-1197"><span class="linenos">1197</span></a> <span class="k">def</span> <span class="nf">partition_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">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1198"><a href="#Generator-1198"><span class="linenos">1198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="Generator-1199"><a href="#Generator-1199"><span class="linenos">1199</span></a>
-</span><span id="Generator-1200"><a href="#Generator-1200"><span class="linenos">1200</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1201"><a href="#Generator-1201"><span class="linenos">1201</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator-1202"><a href="#Generator-1202"><span class="linenos">1202</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
-</span><span id="Generator-1203"><a href="#Generator-1203"><span class="linenos">1203</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="Generator-1204"><a href="#Generator-1204"><span class="linenos">1204</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
-</span><span id="Generator-1205"><a href="#Generator-1205"><span class="linenos">1205</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="Generator-1206"><a href="#Generator-1206"><span class="linenos">1206</span></a>
-</span><span id="Generator-1207"><a href="#Generator-1207"><span class="linenos">1207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
-</span><span id="Generator-1208"><a href="#Generator-1208"><span class="linenos">1208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
-</span><span id="Generator-1209"><a href="#Generator-1209"><span class="linenos">1209</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+</span><span id="Generator-1200"><a href="#Generator-1200"><span class="linenos">1200</span></a> <span class="k">def</span> <span class="nf">properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1201"><a href="#Generator-1201"><span class="linenos">1201</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-1202"><a href="#Generator-1202"><span class="linenos">1202</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-1203"><a href="#Generator-1203"><span class="linenos">1203</span></a>
+</span><span id="Generator-1204"><a href="#Generator-1204"><span class="linenos">1204</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1205"><a href="#Generator-1205"><span class="linenos">1205</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator-1206"><a href="#Generator-1206"><span class="linenos">1206</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
+</span><span id="Generator-1207"><a href="#Generator-1207"><span class="linenos">1207</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+</span><span id="Generator-1208"><a href="#Generator-1208"><span class="linenos">1208</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
+</span><span id="Generator-1209"><a href="#Generator-1209"><span class="linenos">1209</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="Generator-1210"><a href="#Generator-1210"><span class="linenos">1210</span></a>
-</span><span id="Generator-1211"><a href="#Generator-1211"><span class="linenos">1211</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1212"><a href="#Generator-1212"><span class="linenos">1212</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1213"><a href="#Generator-1213"><span class="linenos">1213</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-1214"><a href="#Generator-1214"><span class="linenos">1214</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1215"><a href="#Generator-1215"><span class="linenos">1215</span></a>
-</span><span id="Generator-1216"><a href="#Generator-1216"><span class="linenos">1216</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
-</span><span id="Generator-1217"><a href="#Generator-1217"><span class="linenos">1217</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-1218"><a href="#Generator-1218"><span class="linenos">1218</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
-</span><span id="Generator-1219"><a href="#Generator-1219"><span class="linenos">1219</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-1220"><a href="#Generator-1220"><span class="linenos">1220</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
-</span><span id="Generator-1221"><a href="#Generator-1221"><span class="linenos">1221</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-1222"><a href="#Generator-1222"><span class="linenos">1222</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator-1223"><a href="#Generator-1223"><span class="linenos">1223</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1224"><a href="#Generator-1224"><span class="linenos">1224</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1225"><a href="#Generator-1225"><span class="linenos">1225</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-1226"><a href="#Generator-1226"><span class="linenos">1226</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1227"><a href="#Generator-1227"><span class="linenos">1227</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="Generator-1228"><a href="#Generator-1228"><span class="linenos">1228</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1229"><a href="#Generator-1229"><span class="linenos">1229</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1230"><a href="#Generator-1230"><span class="linenos">1230</span></a>
-</span><span id="Generator-1231"><a href="#Generator-1231"><span class="linenos">1231</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1232"><a href="#Generator-1232"><span class="linenos">1232</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
-</span><span id="Generator-1233"><a href="#Generator-1233"><span class="linenos">1233</span></a>
-</span><span id="Generator-1234"><a href="#Generator-1234"><span class="linenos">1234</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
-</span><span id="Generator-1235"><a href="#Generator-1235"><span class="linenos">1235</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
-</span><span id="Generator-1236"><a href="#Generator-1236"><span class="linenos">1236</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1237"><a href="#Generator-1237"><span class="linenos">1237</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator-1238"><a href="#Generator-1238"><span class="linenos">1238</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</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="Generator-1239"><a href="#Generator-1239"><span class="linenos">1239</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="Generator-1240"><a href="#Generator-1240"><span class="linenos">1240</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1241"><a href="#Generator-1241"><span class="linenos">1241</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-1242"><a href="#Generator-1242"><span class="linenos">1242</span></a>
-</span><span id="Generator-1243"><a href="#Generator-1243"><span class="linenos">1243</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
-</span><span id="Generator-1244"><a href="#Generator-1244"><span class="linenos">1244</span></a>
-</span><span id="Generator-1245"><a href="#Generator-1245"><span class="linenos">1245</span></a> <span class="k">def</span> <span class="nf">property_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">string_key</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1246"><a href="#Generator-1246"><span class="linenos">1246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Generator-1247"><a href="#Generator-1247"><span class="linenos">1247</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1248"><a href="#Generator-1248"><span class="linenos">1248</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">string_key</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator-1249"><a href="#Generator-1249"><span class="linenos">1249</span></a>
-</span><span id="Generator-1250"><a href="#Generator-1250"><span class="linenos">1250</span></a> <span class="k">def</span> <span class="nf">property_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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1251"><a href="#Generator-1251"><span class="linenos">1251</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="Generator-1252"><a href="#Generator-1252"><span class="linenos">1252</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
-</span><span id="Generator-1253"><a href="#Generator-1253"><span class="linenos">1253</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">property_name</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1254"><a href="#Generator-1254"><span class="linenos">1254</span></a>
-</span><span id="Generator-1255"><a href="#Generator-1255"><span class="linenos">1255</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
-</span><span id="Generator-1256"><a href="#Generator-1256"><span class="linenos">1256</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
-</span><span id="Generator-1257"><a href="#Generator-1257"><span class="linenos">1257</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1211"><a href="#Generator-1211"><span class="linenos">1211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
+</span><span id="Generator-1212"><a href="#Generator-1212"><span class="linenos">1212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
+</span><span id="Generator-1213"><a href="#Generator-1213"><span class="linenos">1213</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+</span><span id="Generator-1214"><a href="#Generator-1214"><span class="linenos">1214</span></a>
+</span><span id="Generator-1215"><a href="#Generator-1215"><span class="linenos">1215</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1216"><a href="#Generator-1216"><span class="linenos">1216</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1217"><a href="#Generator-1217"><span class="linenos">1217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-1218"><a href="#Generator-1218"><span class="linenos">1218</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1219"><a href="#Generator-1219"><span class="linenos">1219</span></a>
+</span><span id="Generator-1220"><a href="#Generator-1220"><span class="linenos">1220</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
+</span><span id="Generator-1221"><a href="#Generator-1221"><span class="linenos">1221</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-1222"><a href="#Generator-1222"><span class="linenos">1222</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
+</span><span id="Generator-1223"><a href="#Generator-1223"><span class="linenos">1223</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-1224"><a href="#Generator-1224"><span class="linenos">1224</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
+</span><span id="Generator-1225"><a href="#Generator-1225"><span class="linenos">1225</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-1226"><a href="#Generator-1226"><span class="linenos">1226</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-1227"><a href="#Generator-1227"><span class="linenos">1227</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1228"><a href="#Generator-1228"><span class="linenos">1228</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1229"><a href="#Generator-1229"><span class="linenos">1229</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-1230"><a href="#Generator-1230"><span class="linenos">1230</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1231"><a href="#Generator-1231"><span class="linenos">1231</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="Generator-1232"><a href="#Generator-1232"><span class="linenos">1232</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1233"><a href="#Generator-1233"><span class="linenos">1233</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1234"><a href="#Generator-1234"><span class="linenos">1234</span></a>
+</span><span id="Generator-1235"><a href="#Generator-1235"><span class="linenos">1235</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1236"><a href="#Generator-1236"><span class="linenos">1236</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
+</span><span id="Generator-1237"><a href="#Generator-1237"><span class="linenos">1237</span></a>
+</span><span id="Generator-1238"><a href="#Generator-1238"><span class="linenos">1238</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
+</span><span id="Generator-1239"><a href="#Generator-1239"><span class="linenos">1239</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Generator-1240"><a href="#Generator-1240"><span class="linenos">1240</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1241"><a href="#Generator-1241"><span class="linenos">1241</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator-1242"><a href="#Generator-1242"><span class="linenos">1242</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</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="Generator-1243"><a href="#Generator-1243"><span class="linenos">1243</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+</span><span id="Generator-1244"><a href="#Generator-1244"><span class="linenos">1244</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1245"><a href="#Generator-1245"><span class="linenos">1245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1246"><a href="#Generator-1246"><span class="linenos">1246</span></a>
+</span><span id="Generator-1247"><a href="#Generator-1247"><span class="linenos">1247</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
+</span><span id="Generator-1248"><a href="#Generator-1248"><span class="linenos">1248</span></a>
+</span><span id="Generator-1249"><a href="#Generator-1249"><span class="linenos">1249</span></a> <span class="k">def</span> <span class="nf">property_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">string_key</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1250"><a href="#Generator-1250"><span class="linenos">1250</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Generator-1251"><a href="#Generator-1251"><span class="linenos">1251</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1252"><a href="#Generator-1252"><span class="linenos">1252</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">string_key</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator-1253"><a href="#Generator-1253"><span class="linenos">1253</span></a>
+</span><span id="Generator-1254"><a href="#Generator-1254"><span class="linenos">1254</span></a> <span class="k">def</span> <span class="nf">property_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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1255"><a href="#Generator-1255"><span class="linenos">1255</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="Generator-1256"><a href="#Generator-1256"><span class="linenos">1256</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
+</span><span id="Generator-1257"><a href="#Generator-1257"><span class="linenos">1257</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">property_name</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1258"><a href="#Generator-1258"><span class="linenos">1258</span></a>
-</span><span id="Generator-1259"><a href="#Generator-1259"><span class="linenos">1259</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1260"><a href="#Generator-1260"><span class="linenos">1260</span></a>
-</span><span id="Generator-1261"><a href="#Generator-1261"><span class="linenos">1261</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1262"><a href="#Generator-1262"><span class="linenos">1262</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_CREATE_TABLE_LIKE</span><span class="p">:</span>
-</span><span id="Generator-1263"><a href="#Generator-1263"><span class="linenos">1263</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-1264"><a href="#Generator-1264"><span class="linenos">1264</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1265"><a href="#Generator-1265"><span class="linenos">1265</span></a>
-</span><span id="Generator-1266"><a href="#Generator-1266"><span class="linenos">1266</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;LIKE </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="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1267"><a href="#Generator-1267"><span class="linenos">1267</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="Generator-1268"><a href="#Generator-1268"><span class="linenos">1268</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">like</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1259"><a href="#Generator-1259"><span class="linenos">1259</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
+</span><span id="Generator-1260"><a href="#Generator-1260"><span class="linenos">1260</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
+</span><span id="Generator-1261"><a href="#Generator-1261"><span class="linenos">1261</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1262"><a href="#Generator-1262"><span class="linenos">1262</span></a>
+</span><span id="Generator-1263"><a href="#Generator-1263"><span class="linenos">1263</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1264"><a href="#Generator-1264"><span class="linenos">1264</span></a>
+</span><span id="Generator-1265"><a href="#Generator-1265"><span class="linenos">1265</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1266"><a href="#Generator-1266"><span class="linenos">1266</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_CREATE_TABLE_LIKE</span><span class="p">:</span>
+</span><span id="Generator-1267"><a href="#Generator-1267"><span class="linenos">1267</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-1268"><a href="#Generator-1268"><span class="linenos">1268</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-1269"><a href="#Generator-1269"><span class="linenos">1269</span></a>
-</span><span id="Generator-1270"><a href="#Generator-1270"><span class="linenos">1270</span></a> <span class="k">return</span> <span class="n">like</span>
-</span><span id="Generator-1271"><a href="#Generator-1271"><span class="linenos">1271</span></a>
-</span><span id="Generator-1272"><a href="#Generator-1272"><span class="linenos">1272</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1273"><a href="#Generator-1273"><span class="linenos">1273</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Transpilation of LIKE property options is unsupported&quot;</span><span class="p">)</span>
-</span><span id="Generator-1274"><a href="#Generator-1274"><span class="linenos">1274</span></a>
-</span><span id="Generator-1275"><a href="#Generator-1275"><span class="linenos">1275</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="Generator-1276"><a href="#Generator-1276"><span class="linenos">1276</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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">select</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1277"><a href="#Generator-1277"><span class="linenos">1277</span></a>
-</span><span id="Generator-1278"><a href="#Generator-1278"><span class="linenos">1278</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_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">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1279"><a href="#Generator-1279"><span class="linenos">1279</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1280"><a href="#Generator-1280"><span class="linenos">1280</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1281"><a href="#Generator-1281"><span class="linenos">1281</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1282"><a href="#Generator-1282"><span class="linenos">1282</span></a>
-</span><span id="Generator-1283"><a href="#Generator-1283"><span class="linenos">1283</span></a> <span class="k">def</span> <span class="nf">journalproperty_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">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1284"><a href="#Generator-1284"><span class="linenos">1284</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1285"><a href="#Generator-1285"><span class="linenos">1285</span></a> <span class="n">local</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;local&quot;</span><span class="p">)</span>
-</span><span id="Generator-1286"><a href="#Generator-1286"><span class="linenos">1286</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1287"><a href="#Generator-1287"><span class="linenos">1287</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1288"><a href="#Generator-1288"><span class="linenos">1288</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1289"><a href="#Generator-1289"><span class="linenos">1289</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1290"><a href="#Generator-1290"><span class="linenos">1290</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
-</span><span id="Generator-1291"><a href="#Generator-1291"><span class="linenos">1291</span></a>
-</span><span id="Generator-1292"><a href="#Generator-1292"><span class="linenos">1292</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_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">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1293"><a href="#Generator-1293"><span class="linenos">1293</span></a> <span class="n">freespace</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="Generator-1294"><a href="#Generator-1294"><span class="linenos">1294</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1295"><a href="#Generator-1295"><span class="linenos">1295</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1296"><a href="#Generator-1296"><span class="linenos">1296</span></a>
-</span><span id="Generator-1297"><a href="#Generator-1297"><span class="linenos">1297</span></a> <span class="k">def</span> <span class="nf">checksumproperty_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">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1298"><a href="#Generator-1298"><span class="linenos">1298</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator-1299"><a href="#Generator-1299"><span class="linenos">1299</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator-1300"><a href="#Generator-1300"><span class="linenos">1300</span></a> <span class="k">elif</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;on&quot;</span><span class="p">):</span>
-</span><span id="Generator-1301"><a href="#Generator-1301"><span class="linenos">1301</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
-</span><span id="Generator-1302"><a href="#Generator-1302"><span class="linenos">1302</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1303"><a href="#Generator-1303"><span class="linenos">1303</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
-</span><span id="Generator-1304"><a href="#Generator-1304"><span class="linenos">1304</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1305"><a href="#Generator-1305"><span class="linenos">1305</span></a>
-</span><span id="Generator-1306"><a href="#Generator-1306"><span class="linenos">1306</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_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">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1307"><a href="#Generator-1307"><span class="linenos">1307</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
-</span><span id="Generator-1308"><a href="#Generator-1308"><span class="linenos">1308</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator-1309"><a href="#Generator-1309"><span class="linenos">1309</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator-1310"><a href="#Generator-1310"><span class="linenos">1310</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator-1311"><a href="#Generator-1311"><span class="linenos">1311</span></a>
-</span><span id="Generator-1312"><a href="#Generator-1312"><span class="linenos">1312</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1313"><a href="#Generator-1313"><span class="linenos">1313</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</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="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1314"><a href="#Generator-1314"><span class="linenos">1314</span></a>
-</span><span id="Generator-1315"><a href="#Generator-1315"><span class="linenos">1315</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_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">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1316"><a href="#Generator-1316"><span class="linenos">1316</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator-1317"><a href="#Generator-1317"><span class="linenos">1317</span></a> <span class="n">minimum</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;minimum&quot;</span><span class="p">)</span>
-</span><span id="Generator-1318"><a href="#Generator-1318"><span class="linenos">1318</span></a> <span class="n">maximum</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;maximum&quot;</span><span class="p">)</span>
-</span><span id="Generator-1319"><a href="#Generator-1319"><span class="linenos">1319</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
-</span><span id="Generator-1320"><a href="#Generator-1320"><span class="linenos">1320</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-1321"><a href="#Generator-1321"><span class="linenos">1321</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator-1322"><a href="#Generator-1322"><span class="linenos">1322</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
-</span><span id="Generator-1323"><a href="#Generator-1323"><span class="linenos">1323</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
-</span><span id="Generator-1324"><a href="#Generator-1324"><span class="linenos">1324</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1325"><a href="#Generator-1325"><span class="linenos">1325</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
-</span><span id="Generator-1326"><a href="#Generator-1326"><span class="linenos">1326</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
-</span><span id="Generator-1327"><a href="#Generator-1327"><span class="linenos">1327</span></a> <span class="n">units</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;units&quot;</span><span class="p">)</span>
-</span><span id="Generator-1328"><a href="#Generator-1328"><span class="linenos">1328</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1329"><a href="#Generator-1329"><span class="linenos">1329</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</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;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1330"><a href="#Generator-1330"><span class="linenos">1330</span></a>
-</span><span id="Generator-1331"><a href="#Generator-1331"><span class="linenos">1331</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_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">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1332"><a href="#Generator-1332"><span class="linenos">1332</span></a> <span class="n">autotemp</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;autotemp&quot;</span><span class="p">)</span>
-</span><span id="Generator-1333"><a href="#Generator-1333"><span class="linenos">1333</span></a> <span class="n">always</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;always&quot;</span><span class="p">)</span>
-</span><span id="Generator-1334"><a href="#Generator-1334"><span class="linenos">1334</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator-1335"><a href="#Generator-1335"><span class="linenos">1335</span></a> <span class="n">manual</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;manual&quot;</span><span class="p">)</span>
-</span><span id="Generator-1336"><a href="#Generator-1336"><span class="linenos">1336</span></a> <span class="n">never</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;never&quot;</span><span class="p">)</span>
-</span><span id="Generator-1337"><a href="#Generator-1337"><span class="linenos">1337</span></a>
-</span><span id="Generator-1338"><a href="#Generator-1338"><span class="linenos">1338</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1339"><a href="#Generator-1339"><span class="linenos">1339</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1340"><a href="#Generator-1340"><span class="linenos">1340</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
-</span><span id="Generator-1341"><a href="#Generator-1341"><span class="linenos">1341</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
-</span><span id="Generator-1342"><a href="#Generator-1342"><span class="linenos">1342</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-1343"><a href="#Generator-1343"><span class="linenos">1343</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator-1344"><a href="#Generator-1344"><span class="linenos">1344</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
-</span><span id="Generator-1345"><a href="#Generator-1345"><span class="linenos">1345</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
-</span><span id="Generator-1346"><a href="#Generator-1346"><span class="linenos">1346</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
-</span><span id="Generator-1347"><a href="#Generator-1347"><span class="linenos">1347</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
-</span><span id="Generator-1348"><a href="#Generator-1348"><span class="linenos">1348</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1349"><a href="#Generator-1349"><span class="linenos">1349</span></a>
-</span><span id="Generator-1350"><a href="#Generator-1350"><span class="linenos">1350</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_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">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1351"><a href="#Generator-1351"><span class="linenos">1351</span></a> <span class="n">no</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;no&quot;</span><span class="p">)</span>
-</span><span id="Generator-1352"><a href="#Generator-1352"><span class="linenos">1352</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1353"><a href="#Generator-1353"><span class="linenos">1353</span></a> <span class="n">concurrent</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;concurrent&quot;</span><span class="p">)</span>
-</span><span id="Generator-1354"><a href="#Generator-1354"><span class="linenos">1354</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1355"><a href="#Generator-1355"><span class="linenos">1355</span></a>
-</span><span id="Generator-1356"><a href="#Generator-1356"><span class="linenos">1356</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1357"><a href="#Generator-1357"><span class="linenos">1357</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
-</span><span id="Generator-1358"><a href="#Generator-1358"><span class="linenos">1358</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
-</span><span id="Generator-1359"><a href="#Generator-1359"><span class="linenos">1359</span></a> <span class="k">elif</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;for_insert&quot;</span><span class="p">):</span>
-</span><span id="Generator-1360"><a href="#Generator-1360"><span class="linenos">1360</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
-</span><span id="Generator-1361"><a href="#Generator-1361"><span class="linenos">1361</span></a> <span class="k">elif</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;for_none&quot;</span><span class="p">):</span>
-</span><span id="Generator-1362"><a href="#Generator-1362"><span class="linenos">1362</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
-</span><span id="Generator-1363"><a href="#Generator-1363"><span class="linenos">1363</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1364"><a href="#Generator-1364"><span class="linenos">1364</span></a>
-</span><span id="Generator-1365"><a href="#Generator-1365"><span class="linenos">1365</span></a> <span class="k">def</span> <span class="nf">partitionboundspec_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">PartitionBoundSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1366"><a href="#Generator-1366"><span class="linenos">1366</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator-1367"><a href="#Generator-1367"><span class="linenos">1367</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IN (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1368"><a href="#Generator-1368"><span class="linenos">1368</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Generator-1369"><a href="#Generator-1369"><span class="linenos">1369</span></a> <span class="n">modulus</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="Generator-1370"><a href="#Generator-1370"><span class="linenos">1370</span></a> <span class="n">remainder</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="Generator-1371"><a href="#Generator-1371"><span class="linenos">1371</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (MODULUS </span><span class="si">{</span><span class="n">modulus</span><span class="si">}</span><span class="s2">, REMAINDER </span><span class="si">{</span><span class="n">remainder</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1372"><a href="#Generator-1372"><span class="linenos">1372</span></a>
-</span><span id="Generator-1373"><a href="#Generator-1373"><span class="linenos">1373</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;from_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1374"><a href="#Generator-1374"><span class="linenos">1374</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;to_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1375"><a href="#Generator-1375"><span class="linenos">1375</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FROM (</span><span class="si">{</span><span class="n">from_expressions</span><span class="si">}</span><span class="s2">) TO (</span><span class="si">{</span><span class="n">to_expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1270"><a href="#Generator-1270"><span class="linenos">1270</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;LIKE </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="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1271"><a href="#Generator-1271"><span class="linenos">1271</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="Generator-1272"><a href="#Generator-1272"><span class="linenos">1272</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">like</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1273"><a href="#Generator-1273"><span class="linenos">1273</span></a>
+</span><span id="Generator-1274"><a href="#Generator-1274"><span class="linenos">1274</span></a> <span class="k">return</span> <span class="n">like</span>
+</span><span id="Generator-1275"><a href="#Generator-1275"><span class="linenos">1275</span></a>
+</span><span id="Generator-1276"><a href="#Generator-1276"><span class="linenos">1276</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1277"><a href="#Generator-1277"><span class="linenos">1277</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Transpilation of LIKE property options is unsupported&quot;</span><span class="p">)</span>
+</span><span id="Generator-1278"><a href="#Generator-1278"><span class="linenos">1278</span></a>
+</span><span id="Generator-1279"><a href="#Generator-1279"><span class="linenos">1279</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="Generator-1280"><a href="#Generator-1280"><span class="linenos">1280</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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">select</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1281"><a href="#Generator-1281"><span class="linenos">1281</span></a>
+</span><span id="Generator-1282"><a href="#Generator-1282"><span class="linenos">1282</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_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">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1283"><a href="#Generator-1283"><span class="linenos">1283</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1284"><a href="#Generator-1284"><span class="linenos">1284</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1285"><a href="#Generator-1285"><span class="linenos">1285</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1286"><a href="#Generator-1286"><span class="linenos">1286</span></a>
+</span><span id="Generator-1287"><a href="#Generator-1287"><span class="linenos">1287</span></a> <span class="k">def</span> <span class="nf">journalproperty_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">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1288"><a href="#Generator-1288"><span class="linenos">1288</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1289"><a href="#Generator-1289"><span class="linenos">1289</span></a> <span class="n">local</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;local&quot;</span><span class="p">)</span>
+</span><span id="Generator-1290"><a href="#Generator-1290"><span class="linenos">1290</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1291"><a href="#Generator-1291"><span class="linenos">1291</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1292"><a href="#Generator-1292"><span class="linenos">1292</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1293"><a href="#Generator-1293"><span class="linenos">1293</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1294"><a href="#Generator-1294"><span class="linenos">1294</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
+</span><span id="Generator-1295"><a href="#Generator-1295"><span class="linenos">1295</span></a>
+</span><span id="Generator-1296"><a href="#Generator-1296"><span class="linenos">1296</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_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">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1297"><a href="#Generator-1297"><span class="linenos">1297</span></a> <span class="n">freespace</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="Generator-1298"><a href="#Generator-1298"><span class="linenos">1298</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1299"><a href="#Generator-1299"><span class="linenos">1299</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1300"><a href="#Generator-1300"><span class="linenos">1300</span></a>
+</span><span id="Generator-1301"><a href="#Generator-1301"><span class="linenos">1301</span></a> <span class="k">def</span> <span class="nf">checksumproperty_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">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1302"><a href="#Generator-1302"><span class="linenos">1302</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator-1303"><a href="#Generator-1303"><span class="linenos">1303</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator-1304"><a href="#Generator-1304"><span class="linenos">1304</span></a> <span class="k">elif</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;on&quot;</span><span class="p">):</span>
+</span><span id="Generator-1305"><a href="#Generator-1305"><span class="linenos">1305</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="Generator-1306"><a href="#Generator-1306"><span class="linenos">1306</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1307"><a href="#Generator-1307"><span class="linenos">1307</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
+</span><span id="Generator-1308"><a href="#Generator-1308"><span class="linenos">1308</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1309"><a href="#Generator-1309"><span class="linenos">1309</span></a>
+</span><span id="Generator-1310"><a href="#Generator-1310"><span class="linenos">1310</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_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">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1311"><a href="#Generator-1311"><span class="linenos">1311</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
+</span><span id="Generator-1312"><a href="#Generator-1312"><span class="linenos">1312</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator-1313"><a href="#Generator-1313"><span class="linenos">1313</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator-1314"><a href="#Generator-1314"><span class="linenos">1314</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator-1315"><a href="#Generator-1315"><span class="linenos">1315</span></a>
+</span><span id="Generator-1316"><a href="#Generator-1316"><span class="linenos">1316</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1317"><a href="#Generator-1317"><span class="linenos">1317</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</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="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1318"><a href="#Generator-1318"><span class="linenos">1318</span></a>
+</span><span id="Generator-1319"><a href="#Generator-1319"><span class="linenos">1319</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_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">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1320"><a href="#Generator-1320"><span class="linenos">1320</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator-1321"><a href="#Generator-1321"><span class="linenos">1321</span></a> <span class="n">minimum</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;minimum&quot;</span><span class="p">)</span>
+</span><span id="Generator-1322"><a href="#Generator-1322"><span class="linenos">1322</span></a> <span class="n">maximum</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;maximum&quot;</span><span class="p">)</span>
+</span><span id="Generator-1323"><a href="#Generator-1323"><span class="linenos">1323</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
+</span><span id="Generator-1324"><a href="#Generator-1324"><span class="linenos">1324</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-1325"><a href="#Generator-1325"><span class="linenos">1325</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator-1326"><a href="#Generator-1326"><span class="linenos">1326</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
+</span><span id="Generator-1327"><a href="#Generator-1327"><span class="linenos">1327</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
+</span><span id="Generator-1328"><a href="#Generator-1328"><span class="linenos">1328</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1329"><a href="#Generator-1329"><span class="linenos">1329</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
+</span><span id="Generator-1330"><a href="#Generator-1330"><span class="linenos">1330</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
+</span><span id="Generator-1331"><a href="#Generator-1331"><span class="linenos">1331</span></a> <span class="n">units</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;units&quot;</span><span class="p">)</span>
+</span><span id="Generator-1332"><a href="#Generator-1332"><span class="linenos">1332</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1333"><a href="#Generator-1333"><span class="linenos">1333</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</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;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1334"><a href="#Generator-1334"><span class="linenos">1334</span></a>
+</span><span id="Generator-1335"><a href="#Generator-1335"><span class="linenos">1335</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_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">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1336"><a href="#Generator-1336"><span class="linenos">1336</span></a> <span class="n">autotemp</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;autotemp&quot;</span><span class="p">)</span>
+</span><span id="Generator-1337"><a href="#Generator-1337"><span class="linenos">1337</span></a> <span class="n">always</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;always&quot;</span><span class="p">)</span>
+</span><span id="Generator-1338"><a href="#Generator-1338"><span class="linenos">1338</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator-1339"><a href="#Generator-1339"><span class="linenos">1339</span></a> <span class="n">manual</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;manual&quot;</span><span class="p">)</span>
+</span><span id="Generator-1340"><a href="#Generator-1340"><span class="linenos">1340</span></a> <span class="n">never</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;never&quot;</span><span class="p">)</span>
+</span><span id="Generator-1341"><a href="#Generator-1341"><span class="linenos">1341</span></a>
+</span><span id="Generator-1342"><a href="#Generator-1342"><span class="linenos">1342</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1343"><a href="#Generator-1343"><span class="linenos">1343</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1344"><a href="#Generator-1344"><span class="linenos">1344</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
+</span><span id="Generator-1345"><a href="#Generator-1345"><span class="linenos">1345</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
+</span><span id="Generator-1346"><a href="#Generator-1346"><span class="linenos">1346</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-1347"><a href="#Generator-1347"><span class="linenos">1347</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator-1348"><a href="#Generator-1348"><span class="linenos">1348</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
+</span><span id="Generator-1349"><a href="#Generator-1349"><span class="linenos">1349</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
+</span><span id="Generator-1350"><a href="#Generator-1350"><span class="linenos">1350</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
+</span><span id="Generator-1351"><a href="#Generator-1351"><span class="linenos">1351</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
+</span><span id="Generator-1352"><a href="#Generator-1352"><span class="linenos">1352</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1353"><a href="#Generator-1353"><span class="linenos">1353</span></a>
+</span><span id="Generator-1354"><a href="#Generator-1354"><span class="linenos">1354</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_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">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1355"><a href="#Generator-1355"><span class="linenos">1355</span></a> <span class="n">no</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;no&quot;</span><span class="p">)</span>
+</span><span id="Generator-1356"><a href="#Generator-1356"><span class="linenos">1356</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1357"><a href="#Generator-1357"><span class="linenos">1357</span></a> <span class="n">concurrent</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;concurrent&quot;</span><span class="p">)</span>
+</span><span id="Generator-1358"><a href="#Generator-1358"><span class="linenos">1358</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1359"><a href="#Generator-1359"><span class="linenos">1359</span></a>
+</span><span id="Generator-1360"><a href="#Generator-1360"><span class="linenos">1360</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1361"><a href="#Generator-1361"><span class="linenos">1361</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
+</span><span id="Generator-1362"><a href="#Generator-1362"><span class="linenos">1362</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
+</span><span id="Generator-1363"><a href="#Generator-1363"><span class="linenos">1363</span></a> <span class="k">elif</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;for_insert&quot;</span><span class="p">):</span>
+</span><span id="Generator-1364"><a href="#Generator-1364"><span class="linenos">1364</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
+</span><span id="Generator-1365"><a href="#Generator-1365"><span class="linenos">1365</span></a> <span class="k">elif</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;for_none&quot;</span><span class="p">):</span>
+</span><span id="Generator-1366"><a href="#Generator-1366"><span class="linenos">1366</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
+</span><span id="Generator-1367"><a href="#Generator-1367"><span class="linenos">1367</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1368"><a href="#Generator-1368"><span class="linenos">1368</span></a>
+</span><span id="Generator-1369"><a href="#Generator-1369"><span class="linenos">1369</span></a> <span class="k">def</span> <span class="nf">partitionboundspec_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">PartitionBoundSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1370"><a href="#Generator-1370"><span class="linenos">1370</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator-1371"><a href="#Generator-1371"><span class="linenos">1371</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IN (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1372"><a href="#Generator-1372"><span class="linenos">1372</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-1373"><a href="#Generator-1373"><span class="linenos">1373</span></a> <span class="n">modulus</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="Generator-1374"><a href="#Generator-1374"><span class="linenos">1374</span></a> <span class="n">remainder</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="Generator-1375"><a href="#Generator-1375"><span class="linenos">1375</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (MODULUS </span><span class="si">{</span><span class="n">modulus</span><span class="si">}</span><span class="s2">, REMAINDER </span><span class="si">{</span><span class="n">remainder</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="Generator-1376"><a href="#Generator-1376"><span class="linenos">1376</span></a>
-</span><span id="Generator-1377"><a href="#Generator-1377"><span class="linenos">1377</span></a> <span class="k">def</span> <span class="nf">partitionedofproperty_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">PartitionedOfProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1378"><a href="#Generator-1378"><span class="linenos">1378</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1379"><a href="#Generator-1379"><span class="linenos">1379</span></a>
-</span><span id="Generator-1380"><a href="#Generator-1380"><span class="linenos">1380</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Generator-1381"><a href="#Generator-1381"><span class="linenos">1381</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">for_values_or_default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">):</span>
-</span><span id="Generator-1382"><a href="#Generator-1382"><span class="linenos">1382</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR VALUES </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">for_values_or_default</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1383"><a href="#Generator-1383"><span class="linenos">1383</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1384"><a href="#Generator-1384"><span class="linenos">1384</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="s2">&quot; DEFAULT&quot;</span>
-</span><span id="Generator-1385"><a href="#Generator-1385"><span class="linenos">1385</span></a>
-</span><span id="Generator-1386"><a href="#Generator-1386"><span class="linenos">1386</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION OF </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_values_or_default</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1387"><a href="#Generator-1387"><span class="linenos">1387</span></a>
-</span><span id="Generator-1388"><a href="#Generator-1388"><span class="linenos">1388</span></a> <span class="k">def</span> <span class="nf">lockingproperty_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">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1389"><a href="#Generator-1389"><span class="linenos">1389</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-1390"><a href="#Generator-1390"><span class="linenos">1390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="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 class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1391"><a href="#Generator-1391"><span class="linenos">1391</span></a> <span class="n">for_or_in</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;for_or_in&quot;</span><span class="p">)</span>
-</span><span id="Generator-1392"><a href="#Generator-1392"><span class="linenos">1392</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">for_or_in</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1393"><a href="#Generator-1393"><span class="linenos">1393</span></a> <span class="n">lock_type</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;lock_type&quot;</span><span class="p">)</span>
-</span><span id="Generator-1394"><a href="#Generator-1394"><span class="linenos">1394</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1395"><a href="#Generator-1395"><span class="linenos">1395</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1396"><a href="#Generator-1396"><span class="linenos">1396</span></a>
-</span><span id="Generator-1397"><a href="#Generator-1397"><span class="linenos">1397</span></a> <span class="k">def</span> <span class="nf">withdataproperty_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">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1398"><a href="#Generator-1398"><span class="linenos">1398</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
-</span><span id="Generator-1399"><a href="#Generator-1399"><span class="linenos">1399</span></a> <span class="n">statistics</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;statistics&quot;</span><span class="p">)</span>
-</span><span id="Generator-1400"><a href="#Generator-1400"><span class="linenos">1400</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1401"><a href="#Generator-1401"><span class="linenos">1401</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1402"><a href="#Generator-1402"><span class="linenos">1402</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
-</span><span id="Generator-1403"><a href="#Generator-1403"><span class="linenos">1403</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1404"><a href="#Generator-1404"><span class="linenos">1404</span></a>
-</span><span id="Generator-1405"><a href="#Generator-1405"><span class="linenos">1405</span></a> <span class="k">def</span> <span class="nf">withsystemversioningproperty_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">WithSystemVersioningProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1406"><a href="#Generator-1406"><span class="linenos">1406</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;WITH(SYSTEM_VERSIONING=ON&quot;</span>
-</span><span id="Generator-1407"><a href="#Generator-1407"><span class="linenos">1407</span></a>
-</span><span id="Generator-1408"><a href="#Generator-1408"><span class="linenos">1408</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Generator-1409"><a href="#Generator-1409"><span class="linenos">1409</span></a> <span class="n">history_table</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="Generator-1410"><a href="#Generator-1410"><span class="linenos">1410</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">(HISTORY_TABLE=</span><span class="si">{</span><span class="n">history_table</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1377"><a href="#Generator-1377"><span class="linenos">1377</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;from_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1378"><a href="#Generator-1378"><span class="linenos">1378</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;to_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1379"><a href="#Generator-1379"><span class="linenos">1379</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FROM (</span><span class="si">{</span><span class="n">from_expressions</span><span class="si">}</span><span class="s2">) TO (</span><span class="si">{</span><span class="n">to_expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1380"><a href="#Generator-1380"><span class="linenos">1380</span></a>
+</span><span id="Generator-1381"><a href="#Generator-1381"><span class="linenos">1381</span></a> <span class="k">def</span> <span class="nf">partitionedofproperty_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">PartitionedOfProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1382"><a href="#Generator-1382"><span class="linenos">1382</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1383"><a href="#Generator-1383"><span class="linenos">1383</span></a>
+</span><span id="Generator-1384"><a href="#Generator-1384"><span class="linenos">1384</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Generator-1385"><a href="#Generator-1385"><span class="linenos">1385</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">for_values_or_default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">):</span>
+</span><span id="Generator-1386"><a href="#Generator-1386"><span class="linenos">1386</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR VALUES </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">for_values_or_default</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1387"><a href="#Generator-1387"><span class="linenos">1387</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1388"><a href="#Generator-1388"><span class="linenos">1388</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="s2">&quot; DEFAULT&quot;</span>
+</span><span id="Generator-1389"><a href="#Generator-1389"><span class="linenos">1389</span></a>
+</span><span id="Generator-1390"><a href="#Generator-1390"><span class="linenos">1390</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION OF </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_values_or_default</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1391"><a href="#Generator-1391"><span class="linenos">1391</span></a>
+</span><span id="Generator-1392"><a href="#Generator-1392"><span class="linenos">1392</span></a> <span class="k">def</span> <span class="nf">lockingproperty_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">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1393"><a href="#Generator-1393"><span class="linenos">1393</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-1394"><a href="#Generator-1394"><span class="linenos">1394</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="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 class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1395"><a href="#Generator-1395"><span class="linenos">1395</span></a> <span class="n">for_or_in</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;for_or_in&quot;</span><span class="p">)</span>
+</span><span id="Generator-1396"><a href="#Generator-1396"><span class="linenos">1396</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">for_or_in</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1397"><a href="#Generator-1397"><span class="linenos">1397</span></a> <span class="n">lock_type</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;lock_type&quot;</span><span class="p">)</span>
+</span><span id="Generator-1398"><a href="#Generator-1398"><span class="linenos">1398</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1399"><a href="#Generator-1399"><span class="linenos">1399</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1400"><a href="#Generator-1400"><span class="linenos">1400</span></a>
+</span><span id="Generator-1401"><a href="#Generator-1401"><span class="linenos">1401</span></a> <span class="k">def</span> <span class="nf">withdataproperty_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">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1402"><a href="#Generator-1402"><span class="linenos">1402</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
+</span><span id="Generator-1403"><a href="#Generator-1403"><span class="linenos">1403</span></a> <span class="n">statistics</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;statistics&quot;</span><span class="p">)</span>
+</span><span id="Generator-1404"><a href="#Generator-1404"><span class="linenos">1404</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1405"><a href="#Generator-1405"><span class="linenos">1405</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1406"><a href="#Generator-1406"><span class="linenos">1406</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
+</span><span id="Generator-1407"><a href="#Generator-1407"><span class="linenos">1407</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1408"><a href="#Generator-1408"><span class="linenos">1408</span></a>
+</span><span id="Generator-1409"><a href="#Generator-1409"><span class="linenos">1409</span></a> <span class="k">def</span> <span class="nf">withsystemversioningproperty_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">WithSystemVersioningProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1410"><a href="#Generator-1410"><span class="linenos">1410</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;WITH(SYSTEM_VERSIONING=ON&quot;</span>
</span><span id="Generator-1411"><a href="#Generator-1411"><span class="linenos">1411</span></a>
-</span><span id="Generator-1412"><a href="#Generator-1412"><span class="linenos">1412</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
-</span><span id="Generator-1413"><a href="#Generator-1413"><span class="linenos">1413</span></a> <span class="n">data_consistency_check</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="Generator-1414"><a href="#Generator-1414"><span class="linenos">1414</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">, DATA_CONSISTENCY_CHECK=</span><span class="si">{</span><span class="n">data_consistency_check</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1412"><a href="#Generator-1412"><span class="linenos">1412</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-1413"><a href="#Generator-1413"><span class="linenos">1413</span></a> <span class="n">history_table</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="Generator-1414"><a href="#Generator-1414"><span class="linenos">1414</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">(HISTORY_TABLE=</span><span class="si">{</span><span class="n">history_table</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1415"><a href="#Generator-1415"><span class="linenos">1415</span></a>
-</span><span id="Generator-1416"><a href="#Generator-1416"><span class="linenos">1416</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1417"><a href="#Generator-1417"><span class="linenos">1417</span></a>
-</span><span id="Generator-1418"><a href="#Generator-1418"><span class="linenos">1418</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1416"><a href="#Generator-1416"><span class="linenos">1416</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
+</span><span id="Generator-1417"><a href="#Generator-1417"><span class="linenos">1417</span></a> <span class="n">data_consistency_check</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="Generator-1418"><a href="#Generator-1418"><span class="linenos">1418</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">, DATA_CONSISTENCY_CHECK=</span><span class="si">{</span><span class="n">data_consistency_check</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1419"><a href="#Generator-1419"><span class="linenos">1419</span></a>
-</span><span id="Generator-1420"><a href="#Generator-1420"><span class="linenos">1420</span></a> <span class="k">def</span> <span class="nf">insert_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">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1421"><a href="#Generator-1421"><span class="linenos">1421</span></a> <span class="n">overwrite</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;overwrite&quot;</span><span class="p">)</span>
-</span><span id="Generator-1422"><a href="#Generator-1422"><span class="linenos">1422</span></a>
-</span><span id="Generator-1423"><a href="#Generator-1423"><span class="linenos">1423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
-</span><span id="Generator-1424"><a href="#Generator-1424"><span class="linenos">1424</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator-1425"><a href="#Generator-1425"><span class="linenos">1425</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1426"><a href="#Generator-1426"><span class="linenos">1426</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">INSERT_OVERWRITE</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator-1427"><a href="#Generator-1427"><span class="linenos">1427</span></a>
-</span><span id="Generator-1428"><a href="#Generator-1428"><span class="linenos">1428</span></a> <span class="n">alternative</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;alternative&quot;</span><span class="p">)</span>
-</span><span id="Generator-1429"><a href="#Generator-1429"><span class="linenos">1429</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1430"><a href="#Generator-1430"><span class="linenos">1430</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1420"><a href="#Generator-1420"><span class="linenos">1420</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1421"><a href="#Generator-1421"><span class="linenos">1421</span></a>
+</span><span id="Generator-1422"><a href="#Generator-1422"><span class="linenos">1422</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1423"><a href="#Generator-1423"><span class="linenos">1423</span></a>
+</span><span id="Generator-1424"><a href="#Generator-1424"><span class="linenos">1424</span></a> <span class="k">def</span> <span class="nf">insert_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">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1425"><a href="#Generator-1425"><span class="linenos">1425</span></a> <span class="n">overwrite</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;overwrite&quot;</span><span class="p">)</span>
+</span><span id="Generator-1426"><a href="#Generator-1426"><span class="linenos">1426</span></a>
+</span><span id="Generator-1427"><a href="#Generator-1427"><span class="linenos">1427</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
+</span><span id="Generator-1428"><a href="#Generator-1428"><span class="linenos">1428</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="Generator-1429"><a href="#Generator-1429"><span class="linenos">1429</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1430"><a href="#Generator-1430"><span class="linenos">1430</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">INSERT_OVERWRITE</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
</span><span id="Generator-1431"><a href="#Generator-1431"><span class="linenos">1431</span></a>
-</span><span id="Generator-1432"><a href="#Generator-1432"><span class="linenos">1432</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </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="Generator-1433"><a href="#Generator-1433"><span class="linenos">1433</span></a>
-</span><span id="Generator-1434"><a href="#Generator-1434"><span class="linenos">1434</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1435"><a href="#Generator-1435"><span class="linenos">1435</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1436"><a href="#Generator-1436"><span class="linenos">1436</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1437"><a href="#Generator-1437"><span class="linenos">1437</span></a> <span class="p">)</span>
-</span><span id="Generator-1438"><a href="#Generator-1438"><span class="linenos">1438</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-1439"><a href="#Generator-1439"><span class="linenos">1439</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1440"><a href="#Generator-1440"><span class="linenos">1440</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1441"><a href="#Generator-1441"><span class="linenos">1441</span></a> <span class="n">conflict</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;conflict&quot;</span><span class="p">)</span>
-</span><span id="Generator-1442"><a href="#Generator-1442"><span class="linenos">1442</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1443"><a href="#Generator-1443"><span class="linenos">1443</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator-1444"><a href="#Generator-1444"><span class="linenos">1444</span></a>
-</span><span id="Generator-1445"><a href="#Generator-1445"><span class="linenos">1445</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator-1446"><a href="#Generator-1446"><span class="linenos">1446</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1447"><a href="#Generator-1447"><span class="linenos">1447</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1448"><a href="#Generator-1448"><span class="linenos">1448</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1449"><a href="#Generator-1449"><span class="linenos">1449</span></a>
-</span><span id="Generator-1450"><a href="#Generator-1450"><span class="linenos">1450</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1451"><a href="#Generator-1451"><span class="linenos">1451</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator-1452"><a href="#Generator-1452"><span class="linenos">1452</span></a>
-</span><span id="Generator-1453"><a href="#Generator-1453"><span class="linenos">1453</span></a> <span class="k">def</span> <span class="nf">intersect_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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1454"><a href="#Generator-1454"><span class="linenos">1454</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator-1455"><a href="#Generator-1455"><span class="linenos">1455</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-1456"><a href="#Generator-1456"><span class="linenos">1456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator-1457"><a href="#Generator-1457"><span class="linenos">1457</span></a> <span class="p">)</span>
-</span><span id="Generator-1458"><a href="#Generator-1458"><span class="linenos">1458</span></a>
-</span><span id="Generator-1459"><a href="#Generator-1459"><span class="linenos">1459</span></a> <span class="k">def</span> <span class="nf">intersect_op</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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1460"><a href="#Generator-1460"><span class="linenos">1460</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1461"><a href="#Generator-1461"><span class="linenos">1461</span></a>
-</span><span id="Generator-1462"><a href="#Generator-1462"><span class="linenos">1462</span></a> <span class="k">def</span> <span class="nf">introducer_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">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1463"><a href="#Generator-1463"><span class="linenos">1463</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1464"><a href="#Generator-1464"><span class="linenos">1464</span></a>
-</span><span id="Generator-1465"><a href="#Generator-1465"><span class="linenos">1465</span></a> <span class="k">def</span> <span class="nf">kill_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">Kill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1466"><a href="#Generator-1466"><span class="linenos">1466</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-1467"><a href="#Generator-1467"><span class="linenos">1467</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1468"><a href="#Generator-1468"><span class="linenos">1468</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1469"><a href="#Generator-1469"><span class="linenos">1469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1470"><a href="#Generator-1470"><span class="linenos">1470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KILL</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1471"><a href="#Generator-1471"><span class="linenos">1471</span></a>
-</span><span id="Generator-1472"><a href="#Generator-1472"><span class="linenos">1472</span></a> <span class="k">def</span> <span class="nf">pseudotype_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">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1473"><a href="#Generator-1473"><span class="linenos">1473</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator-1474"><a href="#Generator-1474"><span class="linenos">1474</span></a>
-</span><span id="Generator-1475"><a href="#Generator-1475"><span class="linenos">1475</span></a> <span class="k">def</span> <span class="nf">objectidentifier_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">ObjectIdentifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1476"><a href="#Generator-1476"><span class="linenos">1476</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator-1477"><a href="#Generator-1477"><span class="linenos">1477</span></a>
-</span><span id="Generator-1478"><a href="#Generator-1478"><span class="linenos">1478</span></a> <span class="k">def</span> <span class="nf">onconflict_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">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1479"><a href="#Generator-1479"><span class="linenos">1479</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
-</span><span id="Generator-1480"><a href="#Generator-1480"><span class="linenos">1480</span></a> <span class="n">constraint</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;constraint&quot;</span><span class="p">)</span>
-</span><span id="Generator-1481"><a href="#Generator-1481"><span class="linenos">1481</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Generator-1482"><a href="#Generator-1482"><span class="linenos">1482</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1483"><a href="#Generator-1483"><span class="linenos">1483</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1484"><a href="#Generator-1484"><span class="linenos">1484</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
-</span><span id="Generator-1485"><a href="#Generator-1485"><span class="linenos">1485</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1486"><a href="#Generator-1486"><span class="linenos">1486</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1487"><a href="#Generator-1487"><span class="linenos">1487</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1488"><a href="#Generator-1488"><span class="linenos">1488</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1489"><a href="#Generator-1489"><span class="linenos">1489</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1490"><a href="#Generator-1490"><span class="linenos">1490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1491"><a href="#Generator-1491"><span class="linenos">1491</span></a>
-</span><span id="Generator-1492"><a href="#Generator-1492"><span class="linenos">1492</span></a> <span class="k">def</span> <span class="nf">returning_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">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1493"><a href="#Generator-1493"><span class="linenos">1493</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1494"><a href="#Generator-1494"><span class="linenos">1494</span></a>
-</span><span id="Generator-1495"><a href="#Generator-1495"><span class="linenos">1495</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_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">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1496"><a href="#Generator-1496"><span class="linenos">1496</span></a> <span class="n">fields</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;fields&quot;</span><span class="p">)</span>
-</span><span id="Generator-1497"><a href="#Generator-1497"><span class="linenos">1497</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1498"><a href="#Generator-1498"><span class="linenos">1498</span></a> <span class="n">escaped</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;escaped&quot;</span><span class="p">)</span>
-</span><span id="Generator-1499"><a href="#Generator-1499"><span class="linenos">1499</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1500"><a href="#Generator-1500"><span class="linenos">1500</span></a> <span class="n">items</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;collection_items&quot;</span><span class="p">)</span>
-</span><span id="Generator-1501"><a href="#Generator-1501"><span class="linenos">1501</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1502"><a href="#Generator-1502"><span class="linenos">1502</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
-</span><span id="Generator-1503"><a href="#Generator-1503"><span class="linenos">1503</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1504"><a href="#Generator-1504"><span class="linenos">1504</span></a> <span class="n">lines</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;lines&quot;</span><span class="p">)</span>
-</span><span id="Generator-1505"><a href="#Generator-1505"><span class="linenos">1505</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1506"><a href="#Generator-1506"><span class="linenos">1506</span></a> <span class="n">null</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;null&quot;</span><span class="p">)</span>
-</span><span id="Generator-1507"><a href="#Generator-1507"><span class="linenos">1507</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1508"><a href="#Generator-1508"><span class="linenos">1508</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1509"><a href="#Generator-1509"><span class="linenos">1509</span></a>
-</span><span id="Generator-1510"><a href="#Generator-1510"><span class="linenos">1510</span></a> <span class="k">def</span> <span class="nf">withtablehint_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">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1511"><a href="#Generator-1511"><span class="linenos">1511</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1512"><a href="#Generator-1512"><span class="linenos">1512</span></a>
-</span><span id="Generator-1513"><a href="#Generator-1513"><span class="linenos">1513</span></a> <span class="k">def</span> <span class="nf">indextablehint_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">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1514"><a href="#Generator-1514"><span class="linenos">1514</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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"> INDEX&quot;</span>
-</span><span id="Generator-1515"><a href="#Generator-1515"><span class="linenos">1515</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
-</span><span id="Generator-1516"><a href="#Generator-1516"><span class="linenos">1516</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1517"><a href="#Generator-1517"><span class="linenos">1517</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1518"><a href="#Generator-1518"><span class="linenos">1518</span></a>
-</span><span id="Generator-1519"><a href="#Generator-1519"><span class="linenos">1519</span></a> <span class="k">def</span> <span class="nf">historicaldata_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">HistoricalData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1520"><a href="#Generator-1520"><span class="linenos">1520</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1521"><a href="#Generator-1521"><span class="linenos">1521</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-1522"><a href="#Generator-1522"><span class="linenos">1522</span></a> <span class="n">expr</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="Generator-1523"><a href="#Generator-1523"><span class="linenos">1523</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1524"><a href="#Generator-1524"><span class="linenos">1524</span></a>
-</span><span id="Generator-1525"><a href="#Generator-1525"><span class="linenos">1525</span></a> <span class="k">def</span> <span class="nf">table_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">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1526"><a href="#Generator-1526"><span class="linenos">1526</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-1527"><a href="#Generator-1527"><span class="linenos">1527</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="Generator-1528"><a href="#Generator-1528"><span class="linenos">1528</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator-1529"><a href="#Generator-1529"><span class="linenos">1529</span></a> <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;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator-1530"><a href="#Generator-1530"><span class="linenos">1530</span></a> <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;db&quot;</span><span class="p">),</span>
-</span><span id="Generator-1531"><a href="#Generator-1531"><span class="linenos">1531</span></a> <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;this&quot;</span><span class="p">),</span>
-</span><span id="Generator-1532"><a href="#Generator-1532"><span class="linenos">1532</span></a> <span class="p">)</span>
-</span><span id="Generator-1533"><a href="#Generator-1533"><span class="linenos">1533</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="Generator-1534"><a href="#Generator-1534"><span class="linenos">1534</span></a> <span class="p">)</span>
-</span><span id="Generator-1535"><a href="#Generator-1535"><span class="linenos">1535</span></a>
-</span><span id="Generator-1536"><a href="#Generator-1536"><span class="linenos">1536</span></a> <span class="n">version</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;version&quot;</span><span class="p">)</span>
-</span><span id="Generator-1537"><a href="#Generator-1537"><span class="linenos">1537</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1538"><a href="#Generator-1538"><span class="linenos">1538</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-1539"><a href="#Generator-1539"><span class="linenos">1539</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1540"><a href="#Generator-1540"><span class="linenos">1540</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-1541"><a href="#Generator-1541"><span class="linenos">1541</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1542"><a href="#Generator-1542"><span class="linenos">1542</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1543"><a href="#Generator-1543"><span class="linenos">1543</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1544"><a href="#Generator-1544"><span class="linenos">1544</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1545"><a href="#Generator-1545"><span class="linenos">1545</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator-1546"><a href="#Generator-1546"><span class="linenos">1546</span></a>
-</span><span id="Generator-1547"><a href="#Generator-1547"><span class="linenos">1547</span></a> <span class="n">file_format</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;format&quot;</span><span class="p">)</span>
-</span><span id="Generator-1548"><a href="#Generator-1548"><span class="linenos">1548</span></a> <span class="k">if</span> <span class="n">file_format</span><span class="p">:</span>
-</span><span id="Generator-1549"><a href="#Generator-1549"><span class="linenos">1549</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
-</span><span id="Generator-1550"><a href="#Generator-1550"><span class="linenos">1550</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, PATTERN =&gt; </span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1551"><a href="#Generator-1551"><span class="linenos">1551</span></a> <span class="n">file_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (FILE_FORMAT =&gt; </span><span class="si">{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1552"><a href="#Generator-1552"><span class="linenos">1552</span></a>
-</span><span id="Generator-1553"><a href="#Generator-1553"><span class="linenos">1553</span></a> <span class="n">ordinality</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;ordinality&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1554"><a href="#Generator-1554"><span class="linenos">1554</span></a> <span class="k">if</span> <span class="n">ordinality</span><span class="p">:</span>
-</span><span id="Generator-1555"><a href="#Generator-1555"><span class="linenos">1555</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1556"><a href="#Generator-1556"><span class="linenos">1556</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1557"><a href="#Generator-1557"><span class="linenos">1557</span></a>
-</span><span id="Generator-1558"><a href="#Generator-1558"><span class="linenos">1558</span></a> <span class="n">when</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;when&quot;</span><span class="p">)</span>
-</span><span id="Generator-1559"><a href="#Generator-1559"><span class="linenos">1559</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
-</span><span id="Generator-1560"><a href="#Generator-1560"><span class="linenos">1560</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"> </span><span class="si">{</span><span class="n">when</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1432"><a href="#Generator-1432"><span class="linenos">1432</span></a> <span class="n">alternative</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;alternative&quot;</span><span class="p">)</span>
+</span><span id="Generator-1433"><a href="#Generator-1433"><span class="linenos">1433</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1434"><a href="#Generator-1434"><span class="linenos">1434</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1435"><a href="#Generator-1435"><span class="linenos">1435</span></a>
+</span><span id="Generator-1436"><a href="#Generator-1436"><span class="linenos">1436</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </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="Generator-1437"><a href="#Generator-1437"><span class="linenos">1437</span></a>
+</span><span id="Generator-1438"><a href="#Generator-1438"><span class="linenos">1438</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1439"><a href="#Generator-1439"><span class="linenos">1439</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1440"><a href="#Generator-1440"><span class="linenos">1440</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1441"><a href="#Generator-1441"><span class="linenos">1441</span></a> <span class="p">)</span>
+</span><span id="Generator-1442"><a href="#Generator-1442"><span class="linenos">1442</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-1443"><a href="#Generator-1443"><span class="linenos">1443</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1444"><a href="#Generator-1444"><span class="linenos">1444</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1445"><a href="#Generator-1445"><span class="linenos">1445</span></a> <span class="n">conflict</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;conflict&quot;</span><span class="p">)</span>
+</span><span id="Generator-1446"><a href="#Generator-1446"><span class="linenos">1446</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1447"><a href="#Generator-1447"><span class="linenos">1447</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator-1448"><a href="#Generator-1448"><span class="linenos">1448</span></a>
+</span><span id="Generator-1449"><a href="#Generator-1449"><span class="linenos">1449</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator-1450"><a href="#Generator-1450"><span class="linenos">1450</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1451"><a href="#Generator-1451"><span class="linenos">1451</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1452"><a href="#Generator-1452"><span class="linenos">1452</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1453"><a href="#Generator-1453"><span class="linenos">1453</span></a>
+</span><span id="Generator-1454"><a href="#Generator-1454"><span class="linenos">1454</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1455"><a href="#Generator-1455"><span class="linenos">1455</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-1456"><a href="#Generator-1456"><span class="linenos">1456</span></a>
+</span><span id="Generator-1457"><a href="#Generator-1457"><span class="linenos">1457</span></a> <span class="k">def</span> <span class="nf">intersect_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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1458"><a href="#Generator-1458"><span class="linenos">1458</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator-1459"><a href="#Generator-1459"><span class="linenos">1459</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1460"><a href="#Generator-1460"><span class="linenos">1460</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator-1461"><a href="#Generator-1461"><span class="linenos">1461</span></a> <span class="p">)</span>
+</span><span id="Generator-1462"><a href="#Generator-1462"><span class="linenos">1462</span></a>
+</span><span id="Generator-1463"><a href="#Generator-1463"><span class="linenos">1463</span></a> <span class="k">def</span> <span class="nf">intersect_op</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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1464"><a href="#Generator-1464"><span class="linenos">1464</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1465"><a href="#Generator-1465"><span class="linenos">1465</span></a>
+</span><span id="Generator-1466"><a href="#Generator-1466"><span class="linenos">1466</span></a> <span class="k">def</span> <span class="nf">introducer_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">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1467"><a href="#Generator-1467"><span class="linenos">1467</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1468"><a href="#Generator-1468"><span class="linenos">1468</span></a>
+</span><span id="Generator-1469"><a href="#Generator-1469"><span class="linenos">1469</span></a> <span class="k">def</span> <span class="nf">kill_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">Kill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1470"><a href="#Generator-1470"><span class="linenos">1470</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-1471"><a href="#Generator-1471"><span class="linenos">1471</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1472"><a href="#Generator-1472"><span class="linenos">1472</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1473"><a href="#Generator-1473"><span class="linenos">1473</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1474"><a href="#Generator-1474"><span class="linenos">1474</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KILL</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1475"><a href="#Generator-1475"><span class="linenos">1475</span></a>
+</span><span id="Generator-1476"><a href="#Generator-1476"><span class="linenos">1476</span></a> <span class="k">def</span> <span class="nf">pseudotype_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">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1477"><a href="#Generator-1477"><span class="linenos">1477</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator-1478"><a href="#Generator-1478"><span class="linenos">1478</span></a>
+</span><span id="Generator-1479"><a href="#Generator-1479"><span class="linenos">1479</span></a> <span class="k">def</span> <span class="nf">objectidentifier_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">ObjectIdentifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1480"><a href="#Generator-1480"><span class="linenos">1480</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator-1481"><a href="#Generator-1481"><span class="linenos">1481</span></a>
+</span><span id="Generator-1482"><a href="#Generator-1482"><span class="linenos">1482</span></a> <span class="k">def</span> <span class="nf">onconflict_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">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1483"><a href="#Generator-1483"><span class="linenos">1483</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
+</span><span id="Generator-1484"><a href="#Generator-1484"><span class="linenos">1484</span></a> <span class="n">constraint</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;constraint&quot;</span><span class="p">)</span>
+</span><span id="Generator-1485"><a href="#Generator-1485"><span class="linenos">1485</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Generator-1486"><a href="#Generator-1486"><span class="linenos">1486</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1487"><a href="#Generator-1487"><span class="linenos">1487</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1488"><a href="#Generator-1488"><span class="linenos">1488</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
+</span><span id="Generator-1489"><a href="#Generator-1489"><span class="linenos">1489</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1490"><a href="#Generator-1490"><span class="linenos">1490</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1491"><a href="#Generator-1491"><span class="linenos">1491</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1492"><a href="#Generator-1492"><span class="linenos">1492</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1493"><a href="#Generator-1493"><span class="linenos">1493</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1494"><a href="#Generator-1494"><span class="linenos">1494</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1495"><a href="#Generator-1495"><span class="linenos">1495</span></a>
+</span><span id="Generator-1496"><a href="#Generator-1496"><span class="linenos">1496</span></a> <span class="k">def</span> <span class="nf">returning_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">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1497"><a href="#Generator-1497"><span class="linenos">1497</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1498"><a href="#Generator-1498"><span class="linenos">1498</span></a>
+</span><span id="Generator-1499"><a href="#Generator-1499"><span class="linenos">1499</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_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">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1500"><a href="#Generator-1500"><span class="linenos">1500</span></a> <span class="n">fields</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;fields&quot;</span><span class="p">)</span>
+</span><span id="Generator-1501"><a href="#Generator-1501"><span class="linenos">1501</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1502"><a href="#Generator-1502"><span class="linenos">1502</span></a> <span class="n">escaped</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;escaped&quot;</span><span class="p">)</span>
+</span><span id="Generator-1503"><a href="#Generator-1503"><span class="linenos">1503</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1504"><a href="#Generator-1504"><span class="linenos">1504</span></a> <span class="n">items</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;collection_items&quot;</span><span class="p">)</span>
+</span><span id="Generator-1505"><a href="#Generator-1505"><span class="linenos">1505</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1506"><a href="#Generator-1506"><span class="linenos">1506</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
+</span><span id="Generator-1507"><a href="#Generator-1507"><span class="linenos">1507</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1508"><a href="#Generator-1508"><span class="linenos">1508</span></a> <span class="n">lines</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;lines&quot;</span><span class="p">)</span>
+</span><span id="Generator-1509"><a href="#Generator-1509"><span class="linenos">1509</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1510"><a href="#Generator-1510"><span class="linenos">1510</span></a> <span class="n">null</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;null&quot;</span><span class="p">)</span>
+</span><span id="Generator-1511"><a href="#Generator-1511"><span class="linenos">1511</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1512"><a href="#Generator-1512"><span class="linenos">1512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1513"><a href="#Generator-1513"><span class="linenos">1513</span></a>
+</span><span id="Generator-1514"><a href="#Generator-1514"><span class="linenos">1514</span></a> <span class="k">def</span> <span class="nf">withtablehint_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">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1515"><a href="#Generator-1515"><span class="linenos">1515</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1516"><a href="#Generator-1516"><span class="linenos">1516</span></a>
+</span><span id="Generator-1517"><a href="#Generator-1517"><span class="linenos">1517</span></a> <span class="k">def</span> <span class="nf">indextablehint_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">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1518"><a href="#Generator-1518"><span class="linenos">1518</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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"> INDEX&quot;</span>
+</span><span id="Generator-1519"><a href="#Generator-1519"><span class="linenos">1519</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
+</span><span id="Generator-1520"><a href="#Generator-1520"><span class="linenos">1520</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1521"><a href="#Generator-1521"><span class="linenos">1521</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1522"><a href="#Generator-1522"><span class="linenos">1522</span></a>
+</span><span id="Generator-1523"><a href="#Generator-1523"><span class="linenos">1523</span></a> <span class="k">def</span> <span class="nf">historicaldata_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">HistoricalData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1524"><a href="#Generator-1524"><span class="linenos">1524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1525"><a href="#Generator-1525"><span class="linenos">1525</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-1526"><a href="#Generator-1526"><span class="linenos">1526</span></a> <span class="n">expr</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="Generator-1527"><a href="#Generator-1527"><span class="linenos">1527</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1528"><a href="#Generator-1528"><span class="linenos">1528</span></a>
+</span><span id="Generator-1529"><a href="#Generator-1529"><span class="linenos">1529</span></a> <span class="k">def</span> <span class="nf">table_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">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1530"><a href="#Generator-1530"><span class="linenos">1530</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-1531"><a href="#Generator-1531"><span class="linenos">1531</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="Generator-1532"><a href="#Generator-1532"><span class="linenos">1532</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator-1533"><a href="#Generator-1533"><span class="linenos">1533</span></a> <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;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator-1534"><a href="#Generator-1534"><span class="linenos">1534</span></a> <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;db&quot;</span><span class="p">),</span>
+</span><span id="Generator-1535"><a href="#Generator-1535"><span class="linenos">1535</span></a> <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;this&quot;</span><span class="p">),</span>
+</span><span id="Generator-1536"><a href="#Generator-1536"><span class="linenos">1536</span></a> <span class="p">)</span>
+</span><span id="Generator-1537"><a href="#Generator-1537"><span class="linenos">1537</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="Generator-1538"><a href="#Generator-1538"><span class="linenos">1538</span></a> <span class="p">)</span>
+</span><span id="Generator-1539"><a href="#Generator-1539"><span class="linenos">1539</span></a>
+</span><span id="Generator-1540"><a href="#Generator-1540"><span class="linenos">1540</span></a> <span class="n">version</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;version&quot;</span><span class="p">)</span>
+</span><span id="Generator-1541"><a href="#Generator-1541"><span class="linenos">1541</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1542"><a href="#Generator-1542"><span class="linenos">1542</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-1543"><a href="#Generator-1543"><span class="linenos">1543</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1544"><a href="#Generator-1544"><span class="linenos">1544</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-1545"><a href="#Generator-1545"><span class="linenos">1545</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1546"><a href="#Generator-1546"><span class="linenos">1546</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1547"><a href="#Generator-1547"><span class="linenos">1547</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1548"><a href="#Generator-1548"><span class="linenos">1548</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1549"><a href="#Generator-1549"><span class="linenos">1549</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator-1550"><a href="#Generator-1550"><span class="linenos">1550</span></a>
+</span><span id="Generator-1551"><a href="#Generator-1551"><span class="linenos">1551</span></a> <span class="n">file_format</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;format&quot;</span><span class="p">)</span>
+</span><span id="Generator-1552"><a href="#Generator-1552"><span class="linenos">1552</span></a> <span class="k">if</span> <span class="n">file_format</span><span class="p">:</span>
+</span><span id="Generator-1553"><a href="#Generator-1553"><span class="linenos">1553</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
+</span><span id="Generator-1554"><a href="#Generator-1554"><span class="linenos">1554</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, PATTERN =&gt; </span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1555"><a href="#Generator-1555"><span class="linenos">1555</span></a> <span class="n">file_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (FILE_FORMAT =&gt; </span><span class="si">{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1556"><a href="#Generator-1556"><span class="linenos">1556</span></a>
+</span><span id="Generator-1557"><a href="#Generator-1557"><span class="linenos">1557</span></a> <span class="n">ordinality</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;ordinality&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1558"><a href="#Generator-1558"><span class="linenos">1558</span></a> <span class="k">if</span> <span class="n">ordinality</span><span class="p">:</span>
+</span><span id="Generator-1559"><a href="#Generator-1559"><span class="linenos">1559</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1560"><a href="#Generator-1560"><span class="linenos">1560</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-1561"><a href="#Generator-1561"><span class="linenos">1561</span></a>
-</span><span id="Generator-1562"><a href="#Generator-1562"><span class="linenos">1562</span></a> <span class="k">return</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="n">version</span><span class="si">}{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}{</span><span class="n">ordinality</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1563"><a href="#Generator-1563"><span class="linenos">1563</span></a>
-</span><span id="Generator-1564"><a href="#Generator-1564"><span class="linenos">1564</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="Generator-1565"><a href="#Generator-1565"><span class="linenos">1565</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-1566"><a href="#Generator-1566"><span class="linenos">1566</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="Generator-1567"><a href="#Generator-1567"><span class="linenos">1567</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="Generator-1568"><a href="#Generator-1568"><span class="linenos">1568</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-1569"><a href="#Generator-1569"><span class="linenos">1569</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1570"><a href="#Generator-1570"><span class="linenos">1570</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="Generator-1571"><a href="#Generator-1571"><span class="linenos">1571</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator-1572"><a href="#Generator-1572"><span class="linenos">1572</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Generator-1573"><a href="#Generator-1573"><span class="linenos">1573</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="Generator-1574"><a href="#Generator-1574"><span class="linenos">1574</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</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="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1575"><a href="#Generator-1575"><span class="linenos">1575</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1576"><a href="#Generator-1576"><span class="linenos">1576</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1577"><a href="#Generator-1577"><span class="linenos">1577</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1578"><a href="#Generator-1578"><span class="linenos">1578</span></a>
-</span><span id="Generator-1579"><a href="#Generator-1579"><span class="linenos">1579</span></a> <span class="n">method</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;method&quot;</span><span class="p">)</span>
-</span><span id="Generator-1580"><a href="#Generator-1580"><span class="linenos">1580</span></a> <span class="n">method</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1581"><a href="#Generator-1581"><span class="linenos">1581</span></a> <span class="n">numerator</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;bucket_numerator&quot;</span><span class="p">)</span>
-</span><span id="Generator-1582"><a href="#Generator-1582"><span class="linenos">1582</span></a> <span class="n">denominator</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;bucket_denominator&quot;</span><span class="p">)</span>
-</span><span id="Generator-1583"><a href="#Generator-1583"><span class="linenos">1583</span></a> <span class="n">field</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;bucket_field&quot;</span><span class="p">)</span>
-</span><span id="Generator-1584"><a href="#Generator-1584"><span class="linenos">1584</span></a> <span class="n">field</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">field</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1585"><a href="#Generator-1585"><span class="linenos">1585</span></a> <span class="n">bucket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;BUCKET </span><span class="si">{</span><span class="n">numerator</span><span class="si">}</span><span class="s2"> OUT OF </span><span class="si">{</span><span class="n">denominator</span><span class="si">}{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">numerator</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1586"><a href="#Generator-1586"><span class="linenos">1586</span></a> <span class="n">seed</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;seed&quot;</span><span class="p">)</span>
-</span><span id="Generator-1587"><a href="#Generator-1587"><span class="linenos">1587</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SEED_KEYWORD</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">seed</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">seed</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1588"><a href="#Generator-1588"><span class="linenos">1588</span></a>
-</span><span id="Generator-1589"><a href="#Generator-1589"><span class="linenos">1589</span></a> <span class="n">size</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;size&quot;</span><span class="p">)</span>
-</span><span id="Generator-1590"><a href="#Generator-1590"><span class="linenos">1590</span></a> <span class="k">if</span> <span class="n">size</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_ROWS</span><span class="p">:</span>
-</span><span id="Generator-1591"><a href="#Generator-1591"><span class="linenos">1591</span></a> <span class="n">size</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">size</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="Generator-1562"><a href="#Generator-1562"><span class="linenos">1562</span></a> <span class="n">when</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;when&quot;</span><span class="p">)</span>
+</span><span id="Generator-1563"><a href="#Generator-1563"><span class="linenos">1563</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
+</span><span id="Generator-1564"><a href="#Generator-1564"><span class="linenos">1564</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"> </span><span class="si">{</span><span class="n">when</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1565"><a href="#Generator-1565"><span class="linenos">1565</span></a>
+</span><span id="Generator-1566"><a href="#Generator-1566"><span class="linenos">1566</span></a> <span class="k">return</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="n">version</span><span class="si">}{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}{</span><span class="n">ordinality</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1567"><a href="#Generator-1567"><span class="linenos">1567</span></a>
+</span><span id="Generator-1568"><a href="#Generator-1568"><span class="linenos">1568</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="Generator-1569"><a href="#Generator-1569"><span class="linenos">1569</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-1570"><a href="#Generator-1570"><span class="linenos">1570</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="Generator-1571"><a href="#Generator-1571"><span class="linenos">1571</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
+</span><span id="Generator-1572"><a href="#Generator-1572"><span class="linenos">1572</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-1573"><a href="#Generator-1573"><span class="linenos">1573</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1574"><a href="#Generator-1574"><span class="linenos">1574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="Generator-1575"><a href="#Generator-1575"><span class="linenos">1575</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator-1576"><a href="#Generator-1576"><span class="linenos">1576</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator-1577"><a href="#Generator-1577"><span class="linenos">1577</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator-1578"><a href="#Generator-1578"><span class="linenos">1578</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</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="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1579"><a href="#Generator-1579"><span class="linenos">1579</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1580"><a href="#Generator-1580"><span class="linenos">1580</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1581"><a href="#Generator-1581"><span class="linenos">1581</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1582"><a href="#Generator-1582"><span class="linenos">1582</span></a>
+</span><span id="Generator-1583"><a href="#Generator-1583"><span class="linenos">1583</span></a> <span class="n">method</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;method&quot;</span><span class="p">)</span>
+</span><span id="Generator-1584"><a href="#Generator-1584"><span class="linenos">1584</span></a> <span class="n">method</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1585"><a href="#Generator-1585"><span class="linenos">1585</span></a> <span class="n">numerator</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;bucket_numerator&quot;</span><span class="p">)</span>
+</span><span id="Generator-1586"><a href="#Generator-1586"><span class="linenos">1586</span></a> <span class="n">denominator</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;bucket_denominator&quot;</span><span class="p">)</span>
+</span><span id="Generator-1587"><a href="#Generator-1587"><span class="linenos">1587</span></a> <span class="n">field</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;bucket_field&quot;</span><span class="p">)</span>
+</span><span id="Generator-1588"><a href="#Generator-1588"><span class="linenos">1588</span></a> <span class="n">field</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">field</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1589"><a href="#Generator-1589"><span class="linenos">1589</span></a> <span class="n">bucket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;BUCKET </span><span class="si">{</span><span class="n">numerator</span><span class="si">}</span><span class="s2"> OUT OF </span><span class="si">{</span><span class="n">denominator</span><span class="si">}{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">numerator</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1590"><a href="#Generator-1590"><span class="linenos">1590</span></a> <span class="n">seed</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;seed&quot;</span><span class="p">)</span>
+</span><span id="Generator-1591"><a href="#Generator-1591"><span class="linenos">1591</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SEED_KEYWORD</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">seed</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">seed</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-1592"><a href="#Generator-1592"><span class="linenos">1592</span></a>
-</span><span id="Generator-1593"><a href="#Generator-1593"><span class="linenos">1593</span></a> <span class="n">percent</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;percent&quot;</span><span class="p">)</span>
-</span><span id="Generator-1594"><a href="#Generator-1594"><span class="linenos">1594</span></a> <span class="k">if</span> <span class="n">percent</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
-</span><span id="Generator-1595"><a href="#Generator-1595"><span class="linenos">1595</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">percent</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="Generator-1593"><a href="#Generator-1593"><span class="linenos">1593</span></a> <span class="n">size</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;size&quot;</span><span class="p">)</span>
+</span><span id="Generator-1594"><a href="#Generator-1594"><span class="linenos">1594</span></a> <span class="k">if</span> <span class="n">size</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_ROWS</span><span class="p">:</span>
+</span><span id="Generator-1595"><a href="#Generator-1595"><span class="linenos">1595</span></a> <span class="n">size</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">size</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span><span id="Generator-1596"><a href="#Generator-1596"><span class="linenos">1596</span></a>
-</span><span id="Generator-1597"><a href="#Generator-1597"><span class="linenos">1597</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">bucket</span><span class="si">}{</span><span class="n">percent</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1598"><a href="#Generator-1598"><span class="linenos">1598</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_REQUIRES_PARENS</span><span class="p">:</span>
-</span><span id="Generator-1599"><a href="#Generator-1599"><span class="linenos">1599</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1597"><a href="#Generator-1597"><span class="linenos">1597</span></a> <span class="n">percent</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;percent&quot;</span><span class="p">)</span>
+</span><span id="Generator-1598"><a href="#Generator-1598"><span class="linenos">1598</span></a> <span class="k">if</span> <span class="n">percent</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
+</span><span id="Generator-1599"><a href="#Generator-1599"><span class="linenos">1599</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">percent</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
</span><span id="Generator-1600"><a href="#Generator-1600"><span class="linenos">1600</span></a>
-</span><span id="Generator-1601"><a href="#Generator-1601"><span class="linenos">1601</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator-1602"><a href="#Generator-1602"><span class="linenos">1602</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">tablesample_keyword</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_KEYWORDS</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">method</span><span class="si">}{</span><span class="n">expr</span><span class="si">}{</span><span class="n">seed</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1603"><a href="#Generator-1603"><span class="linenos">1603</span></a> <span class="p">)</span>
+</span><span id="Generator-1601"><a href="#Generator-1601"><span class="linenos">1601</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">bucket</span><span class="si">}{</span><span class="n">percent</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1602"><a href="#Generator-1602"><span class="linenos">1602</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_REQUIRES_PARENS</span><span class="p">:</span>
+</span><span id="Generator-1603"><a href="#Generator-1603"><span class="linenos">1603</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="Generator-1604"><a href="#Generator-1604"><span class="linenos">1604</span></a>
-</span><span id="Generator-1605"><a href="#Generator-1605"><span class="linenos">1605</span></a> <span class="k">def</span> <span class="nf">pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1606"><a href="#Generator-1606"><span class="linenos">1606</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1607"><a href="#Generator-1607"><span class="linenos">1607</span></a>
-</span><span id="Generator-1608"><a href="#Generator-1608"><span class="linenos">1608</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Generator-1609"><a href="#Generator-1609"><span class="linenos">1609</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1610"><a href="#Generator-1610"><span class="linenos">1610</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-1611"><a href="#Generator-1611"><span class="linenos">1611</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNPIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1612"><a href="#Generator-1612"><span class="linenos">1612</span></a>
-</span><span id="Generator-1613"><a href="#Generator-1613"><span class="linenos">1613</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1614"><a href="#Generator-1614"><span class="linenos">1614</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1615"><a href="#Generator-1615"><span class="linenos">1615</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1616"><a href="#Generator-1616"><span class="linenos">1616</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
-</span><span id="Generator-1617"><a href="#Generator-1617"><span class="linenos">1617</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1618"><a href="#Generator-1618"><span class="linenos">1618</span></a>
-</span><span id="Generator-1619"><a href="#Generator-1619"><span class="linenos">1619</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-1620"><a href="#Generator-1620"><span class="linenos">1620</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1621"><a href="#Generator-1621"><span class="linenos">1621</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="s2">&quot;UNPIVOT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
-</span><span id="Generator-1622"><a href="#Generator-1622"><span class="linenos">1622</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
-</span><span id="Generator-1623"><a href="#Generator-1623"><span class="linenos">1623</span></a> <span class="n">include_nulls</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;include_nulls&quot;</span><span class="p">)</span>
-</span><span id="Generator-1624"><a href="#Generator-1624"><span class="linenos">1624</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1625"><a href="#Generator-1625"><span class="linenos">1625</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
-</span><span id="Generator-1626"><a href="#Generator-1626"><span class="linenos">1626</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1627"><a href="#Generator-1627"><span class="linenos">1627</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1628"><a href="#Generator-1628"><span class="linenos">1628</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1629"><a href="#Generator-1629"><span class="linenos">1629</span></a>
-</span><span id="Generator-1630"><a href="#Generator-1630"><span class="linenos">1630</span></a> <span class="k">def</span> <span class="nf">version_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">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1631"><a href="#Generator-1631"><span class="linenos">1631</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1632"><a href="#Generator-1632"><span class="linenos">1632</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-1633"><a href="#Generator-1633"><span class="linenos">1633</span></a> <span class="n">expr</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="Generator-1634"><a href="#Generator-1634"><span class="linenos">1634</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1635"><a href="#Generator-1635"><span class="linenos">1635</span></a>
-</span><span id="Generator-1636"><a href="#Generator-1636"><span class="linenos">1636</span></a> <span class="k">def</span> <span class="nf">tuple_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">Tuple</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1637"><a href="#Generator-1637"><span class="linenos">1637</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1638"><a href="#Generator-1638"><span class="linenos">1638</span></a>
-</span><span id="Generator-1639"><a href="#Generator-1639"><span class="linenos">1639</span></a> <span class="k">def</span> <span class="nf">update_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">Update</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1640"><a href="#Generator-1640"><span class="linenos">1640</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1641"><a href="#Generator-1641"><span class="linenos">1641</span></a> <span class="n">set_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1642"><a href="#Generator-1642"><span class="linenos">1642</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
-</span><span id="Generator-1643"><a href="#Generator-1643"><span class="linenos">1643</span></a> <span class="n">where_sql</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-1644"><a href="#Generator-1644"><span class="linenos">1644</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator-1645"><a href="#Generator-1645"><span class="linenos">1645</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator-1646"><a href="#Generator-1646"><span class="linenos">1646</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator-1647"><a href="#Generator-1647"><span class="linenos">1647</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator-1648"><a href="#Generator-1648"><span class="linenos">1648</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1649"><a href="#Generator-1649"><span class="linenos">1649</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1650"><a href="#Generator-1650"><span class="linenos">1650</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1651"><a href="#Generator-1651"><span class="linenos">1651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1652"><a href="#Generator-1652"><span class="linenos">1652</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator-1653"><a href="#Generator-1653"><span class="linenos">1653</span></a>
-</span><span id="Generator-1654"><a href="#Generator-1654"><span class="linenos">1654</span></a> <span class="k">def</span> <span class="nf">values_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">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1655"><a href="#Generator-1655"><span class="linenos">1655</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
-</span><span id="Generator-1656"><a href="#Generator-1656"><span class="linenos">1656</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
-</span><span id="Generator-1657"><a href="#Generator-1657"><span class="linenos">1657</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1658"><a href="#Generator-1658"><span class="linenos">1658</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-1659"><a href="#Generator-1659"><span class="linenos">1659</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;VALUES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1660"><a href="#Generator-1660"><span class="linenos">1660</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1661"><a href="#Generator-1661"><span class="linenos">1661</span></a> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1662"><a href="#Generator-1662"><span class="linenos">1662</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAP_DERIVED_VALUES</span> <span class="ow">and</span> <span class="p">(</span><span class="n">alias</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">))</span>
-</span><span id="Generator-1663"><a href="#Generator-1663"><span class="linenos">1663</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator-1664"><a href="#Generator-1664"><span class="linenos">1664</span></a> <span class="p">)</span>
-</span><span id="Generator-1665"><a href="#Generator-1665"><span class="linenos">1665</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator-1666"><a href="#Generator-1666"><span class="linenos">1666</span></a>
-</span><span id="Generator-1667"><a href="#Generator-1667"><span class="linenos">1667</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
-</span><span id="Generator-1668"><a href="#Generator-1668"><span class="linenos">1668</span></a> <span class="n">alias_node</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-1669"><a href="#Generator-1669"><span class="linenos">1669</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="Generator-1605"><a href="#Generator-1605"><span class="linenos">1605</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator-1606"><a href="#Generator-1606"><span class="linenos">1606</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">tablesample_keyword</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_KEYWORDS</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">method</span><span class="si">}{</span><span class="n">expr</span><span class="si">}{</span><span class="n">seed</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1607"><a href="#Generator-1607"><span class="linenos">1607</span></a> <span class="p">)</span>
+</span><span id="Generator-1608"><a href="#Generator-1608"><span class="linenos">1608</span></a>
+</span><span id="Generator-1609"><a href="#Generator-1609"><span class="linenos">1609</span></a> <span class="k">def</span> <span class="nf">pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1610"><a href="#Generator-1610"><span class="linenos">1610</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1611"><a href="#Generator-1611"><span class="linenos">1611</span></a>
+</span><span id="Generator-1612"><a href="#Generator-1612"><span class="linenos">1612</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-1613"><a href="#Generator-1613"><span class="linenos">1613</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1614"><a href="#Generator-1614"><span class="linenos">1614</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-1615"><a href="#Generator-1615"><span class="linenos">1615</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNPIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1616"><a href="#Generator-1616"><span class="linenos">1616</span></a>
+</span><span id="Generator-1617"><a href="#Generator-1617"><span class="linenos">1617</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1618"><a href="#Generator-1618"><span class="linenos">1618</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1619"><a href="#Generator-1619"><span class="linenos">1619</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1620"><a href="#Generator-1620"><span class="linenos">1620</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
+</span><span id="Generator-1621"><a href="#Generator-1621"><span class="linenos">1621</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1622"><a href="#Generator-1622"><span class="linenos">1622</span></a>
+</span><span id="Generator-1623"><a href="#Generator-1623"><span class="linenos">1623</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-1624"><a href="#Generator-1624"><span class="linenos">1624</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1625"><a href="#Generator-1625"><span class="linenos">1625</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="s2">&quot;UNPIVOT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
+</span><span id="Generator-1626"><a href="#Generator-1626"><span class="linenos">1626</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
+</span><span id="Generator-1627"><a href="#Generator-1627"><span class="linenos">1627</span></a> <span class="n">include_nulls</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;include_nulls&quot;</span><span class="p">)</span>
+</span><span id="Generator-1628"><a href="#Generator-1628"><span class="linenos">1628</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1629"><a href="#Generator-1629"><span class="linenos">1629</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
+</span><span id="Generator-1630"><a href="#Generator-1630"><span class="linenos">1630</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1631"><a href="#Generator-1631"><span class="linenos">1631</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1632"><a href="#Generator-1632"><span class="linenos">1632</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1633"><a href="#Generator-1633"><span class="linenos">1633</span></a>
+</span><span id="Generator-1634"><a href="#Generator-1634"><span class="linenos">1634</span></a> <span class="k">def</span> <span class="nf">version_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">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1635"><a href="#Generator-1635"><span class="linenos">1635</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1636"><a href="#Generator-1636"><span class="linenos">1636</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-1637"><a href="#Generator-1637"><span class="linenos">1637</span></a> <span class="n">expr</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="Generator-1638"><a href="#Generator-1638"><span class="linenos">1638</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1639"><a href="#Generator-1639"><span class="linenos">1639</span></a>
+</span><span id="Generator-1640"><a href="#Generator-1640"><span class="linenos">1640</span></a> <span class="k">def</span> <span class="nf">tuple_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">Tuple</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1641"><a href="#Generator-1641"><span class="linenos">1641</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1642"><a href="#Generator-1642"><span class="linenos">1642</span></a>
+</span><span id="Generator-1643"><a href="#Generator-1643"><span class="linenos">1643</span></a> <span class="k">def</span> <span class="nf">update_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">Update</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1644"><a href="#Generator-1644"><span class="linenos">1644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1645"><a href="#Generator-1645"><span class="linenos">1645</span></a> <span class="n">set_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1646"><a href="#Generator-1646"><span class="linenos">1646</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
+</span><span id="Generator-1647"><a href="#Generator-1647"><span class="linenos">1647</span></a> <span class="n">where_sql</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-1648"><a href="#Generator-1648"><span class="linenos">1648</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator-1649"><a href="#Generator-1649"><span class="linenos">1649</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator-1650"><a href="#Generator-1650"><span class="linenos">1650</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator-1651"><a href="#Generator-1651"><span class="linenos">1651</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator-1652"><a href="#Generator-1652"><span class="linenos">1652</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1653"><a href="#Generator-1653"><span class="linenos">1653</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1654"><a href="#Generator-1654"><span class="linenos">1654</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1655"><a href="#Generator-1655"><span class="linenos">1655</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1656"><a href="#Generator-1656"><span class="linenos">1656</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-1657"><a href="#Generator-1657"><span class="linenos">1657</span></a>
+</span><span id="Generator-1658"><a href="#Generator-1658"><span class="linenos">1658</span></a> <span class="k">def</span> <span class="nf">values_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">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1659"><a href="#Generator-1659"><span class="linenos">1659</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
+</span><span id="Generator-1660"><a href="#Generator-1660"><span class="linenos">1660</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
+</span><span id="Generator-1661"><a href="#Generator-1661"><span class="linenos">1661</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-1662"><a href="#Generator-1662"><span class="linenos">1662</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-1663"><a href="#Generator-1663"><span class="linenos">1663</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;VALUES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1664"><a href="#Generator-1664"><span class="linenos">1664</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1665"><a href="#Generator-1665"><span class="linenos">1665</span></a> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1666"><a href="#Generator-1666"><span class="linenos">1666</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAP_DERIVED_VALUES</span> <span class="ow">and</span> <span class="p">(</span><span class="n">alias</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">))</span>
+</span><span id="Generator-1667"><a href="#Generator-1667"><span class="linenos">1667</span></a> <span class="k">else</span> <span class="n">values</span>
+</span><span id="Generator-1668"><a href="#Generator-1668"><span class="linenos">1668</span></a> <span class="p">)</span>
+</span><span id="Generator-1669"><a href="#Generator-1669"><span class="linenos">1669</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
</span><span id="Generator-1670"><a href="#Generator-1670"><span class="linenos">1670</span></a>
-</span><span id="Generator-1671"><a href="#Generator-1671"><span class="linenos">1671</span></a> <span class="n">selects</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-1672"><a href="#Generator-1672"><span class="linenos">1672</span></a>
-</span><span id="Generator-1673"><a href="#Generator-1673"><span class="linenos">1673</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Generator-1674"><a href="#Generator-1674"><span class="linenos">1674</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator-1675"><a href="#Generator-1675"><span class="linenos">1675</span></a>
-</span><span id="Generator-1676"><a href="#Generator-1676"><span class="linenos">1676</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
-</span><span id="Generator-1677"><a href="#Generator-1677"><span class="linenos">1677</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator-1678"><a href="#Generator-1678"><span class="linenos">1678</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
-</span><span id="Generator-1679"><a href="#Generator-1679"><span class="linenos">1679</span></a> <span class="p">]</span>
-</span><span id="Generator-1680"><a href="#Generator-1680"><span class="linenos">1680</span></a>
-</span><span id="Generator-1681"><a href="#Generator-1681"><span class="linenos">1681</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
-</span><span id="Generator-1682"><a href="#Generator-1682"><span class="linenos">1682</span></a>
-</span><span id="Generator-1683"><a href="#Generator-1683"><span class="linenos">1683</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator-1684"><a href="#Generator-1684"><span class="linenos">1684</span></a> <span class="c1"># This may result in poor performance for large-cardinality `VALUES` tables, due to</span>
-</span><span id="Generator-1685"><a href="#Generator-1685"><span class="linenos">1685</span></a> <span class="c1"># the deep nesting of the resulting exp.Unions. If this is a problem, either increase</span>
-</span><span id="Generator-1686"><a href="#Generator-1686"><span class="linenos">1686</span></a> <span class="c1"># `sys.setrecursionlimit` to avoid RecursionErrors, or don&#39;t set `pretty`.</span>
-</span><span id="Generator-1687"><a href="#Generator-1687"><span class="linenos">1687</span></a> <span class="n">subqueryable</span> <span class="o">=</span> <span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">selects</span><span class="p">)</span>
-</span><span id="Generator-1688"><a href="#Generator-1688"><span class="linenos">1688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span>
-</span><span id="Generator-1689"><a href="#Generator-1689"><span class="linenos">1689</span></a> <span class="n">subqueryable</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-1690"><a href="#Generator-1690"><span class="linenos">1690</span></a> <span class="p">)</span>
-</span><span id="Generator-1691"><a href="#Generator-1691"><span class="linenos">1691</span></a>
-</span><span id="Generator-1692"><a href="#Generator-1692"><span class="linenos">1692</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">alias_node</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias_node</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1693"><a href="#Generator-1693"><span class="linenos">1693</span></a> <span class="n">unions</span> <span class="o">=</span> <span class="s2">&quot; UNION ALL &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">select</span><span class="p">)</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">)</span>
-</span><span id="Generator-1694"><a href="#Generator-1694"><span class="linenos">1694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">unions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1671"><a href="#Generator-1671"><span class="linenos">1671</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
+</span><span id="Generator-1672"><a href="#Generator-1672"><span class="linenos">1672</span></a> <span class="n">alias_node</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-1673"><a href="#Generator-1673"><span class="linenos">1673</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="Generator-1674"><a href="#Generator-1674"><span class="linenos">1674</span></a>
+</span><span id="Generator-1675"><a href="#Generator-1675"><span class="linenos">1675</span></a> <span class="n">selects</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-1676"><a href="#Generator-1676"><span class="linenos">1676</span></a>
+</span><span id="Generator-1677"><a href="#Generator-1677"><span class="linenos">1677</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Generator-1678"><a href="#Generator-1678"><span class="linenos">1678</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator-1679"><a href="#Generator-1679"><span class="linenos">1679</span></a>
+</span><span id="Generator-1680"><a href="#Generator-1680"><span class="linenos">1680</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
+</span><span id="Generator-1681"><a href="#Generator-1681"><span class="linenos">1681</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator-1682"><a href="#Generator-1682"><span class="linenos">1682</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
+</span><span id="Generator-1683"><a href="#Generator-1683"><span class="linenos">1683</span></a> <span class="p">]</span>
+</span><span id="Generator-1684"><a href="#Generator-1684"><span class="linenos">1684</span></a>
+</span><span id="Generator-1685"><a href="#Generator-1685"><span class="linenos">1685</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
+</span><span id="Generator-1686"><a href="#Generator-1686"><span class="linenos">1686</span></a>
+</span><span id="Generator-1687"><a href="#Generator-1687"><span class="linenos">1687</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator-1688"><a href="#Generator-1688"><span class="linenos">1688</span></a> <span class="c1"># This may result in poor performance for large-cardinality `VALUES` tables, due to</span>
+</span><span id="Generator-1689"><a href="#Generator-1689"><span class="linenos">1689</span></a> <span class="c1"># the deep nesting of the resulting exp.Unions. If this is a problem, either increase</span>
+</span><span id="Generator-1690"><a href="#Generator-1690"><span class="linenos">1690</span></a> <span class="c1"># `sys.setrecursionlimit` to avoid RecursionErrors, or don&#39;t set `pretty`.</span>
+</span><span id="Generator-1691"><a href="#Generator-1691"><span class="linenos">1691</span></a> <span class="n">subqueryable</span> <span class="o">=</span> <span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">selects</span><span class="p">)</span>
+</span><span id="Generator-1692"><a href="#Generator-1692"><span class="linenos">1692</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span>
+</span><span id="Generator-1693"><a href="#Generator-1693"><span class="linenos">1693</span></a> <span class="n">subqueryable</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-1694"><a href="#Generator-1694"><span class="linenos">1694</span></a> <span class="p">)</span>
</span><span id="Generator-1695"><a href="#Generator-1695"><span class="linenos">1695</span></a>
-</span><span id="Generator-1696"><a href="#Generator-1696"><span class="linenos">1696</span></a> <span class="k">def</span> <span class="nf">var_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">Var</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1697"><a href="#Generator-1697"><span class="linenos">1697</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1698"><a href="#Generator-1698"><span class="linenos">1698</span></a>
-</span><span id="Generator-1699"><a href="#Generator-1699"><span class="linenos">1699</span></a> <span class="k">def</span> <span class="nf">into_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">Into</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1700"><a href="#Generator-1700"><span class="linenos">1700</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1701"><a href="#Generator-1701"><span class="linenos">1701</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unlogged&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1702"><a href="#Generator-1702"><span class="linenos">1702</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;INTO&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">temporary</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">unlogged</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1703"><a href="#Generator-1703"><span class="linenos">1703</span></a>
-</span><span id="Generator-1704"><a href="#Generator-1704"><span class="linenos">1704</span></a> <span class="k">def</span> <span class="nf">from_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">From</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1705"><a href="#Generator-1705"><span class="linenos">1705</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1706"><a href="#Generator-1706"><span class="linenos">1706</span></a>
-</span><span id="Generator-1707"><a href="#Generator-1707"><span class="linenos">1707</span></a> <span class="k">def</span> <span class="nf">group_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">Group</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1708"><a href="#Generator-1708"><span class="linenos">1708</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1709"><a href="#Generator-1709"><span class="linenos">1709</span></a>
-</span><span id="Generator-1710"><a href="#Generator-1710"><span class="linenos">1710</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
-</span><span id="Generator-1711"><a href="#Generator-1711"><span class="linenos">1711</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
-</span><span id="Generator-1712"><a href="#Generator-1712"><span class="linenos">1712</span></a>
-</span><span id="Generator-1713"><a href="#Generator-1713"><span class="linenos">1713</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-1714"><a href="#Generator-1714"><span class="linenos">1714</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1715"><a href="#Generator-1715"><span class="linenos">1715</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;GROUPING SETS&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">grouping_sets</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1716"><a href="#Generator-1716"><span class="linenos">1716</span></a> <span class="p">)</span>
-</span><span id="Generator-1717"><a href="#Generator-1717"><span class="linenos">1717</span></a>
-</span><span id="Generator-1718"><a href="#Generator-1718"><span class="linenos">1718</span></a> <span class="n">cube</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;cube&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Generator-1719"><a href="#Generator-1719"><span class="linenos">1719</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">cube</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator-1720"><a href="#Generator-1720"><span class="linenos">1720</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1721"><a href="#Generator-1721"><span class="linenos">1721</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1722"><a href="#Generator-1722"><span class="linenos">1722</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;cube&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-1723"><a href="#Generator-1723"><span class="linenos">1723</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">cube_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">cube_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1724"><a href="#Generator-1724"><span class="linenos">1724</span></a>
-</span><span id="Generator-1725"><a href="#Generator-1725"><span class="linenos">1725</span></a> <span class="n">rollup</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;rollup&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Generator-1726"><a href="#Generator-1726"><span class="linenos">1726</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">rollup</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator-1727"><a href="#Generator-1727"><span class="linenos">1727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1728"><a href="#Generator-1728"><span class="linenos">1728</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1729"><a href="#Generator-1729"><span class="linenos">1729</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;rollup&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-1730"><a href="#Generator-1730"><span class="linenos">1730</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">rollup_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">rollup_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1731"><a href="#Generator-1731"><span class="linenos">1731</span></a>
-</span><span id="Generator-1732"><a href="#Generator-1732"><span class="linenos">1732</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator-1733"><a href="#Generator-1733"><span class="linenos">1733</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
-</span><span id="Generator-1734"><a href="#Generator-1734"><span class="linenos">1734</span></a> <span class="n">cube_sql</span><span class="p">,</span>
-</span><span id="Generator-1735"><a href="#Generator-1735"><span class="linenos">1735</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
-</span><span id="Generator-1736"><a href="#Generator-1736"><span class="linenos">1736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-1737"><a href="#Generator-1737"><span class="linenos">1737</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
-</span><span id="Generator-1738"><a href="#Generator-1738"><span class="linenos">1738</span></a> <span class="p">)</span>
-</span><span id="Generator-1739"><a href="#Generator-1739"><span class="linenos">1739</span></a>
-</span><span id="Generator-1740"><a href="#Generator-1740"><span class="linenos">1740</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">groupings</span><span class="p">:</span>
-</span><span id="Generator-1741"><a href="#Generator-1741"><span class="linenos">1741</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1742"><a href="#Generator-1742"><span class="linenos">1742</span></a>
-</span><span id="Generator-1743"><a href="#Generator-1743"><span class="linenos">1743</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="n">groupings</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1744"><a href="#Generator-1744"><span class="linenos">1744</span></a>
-</span><span id="Generator-1745"><a href="#Generator-1745"><span class="linenos">1745</span></a> <span class="k">def</span> <span class="nf">having_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">Having</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1746"><a href="#Generator-1746"><span class="linenos">1746</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="Generator-1747"><a href="#Generator-1747"><span class="linenos">1747</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;HAVING&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1696"><a href="#Generator-1696"><span class="linenos">1696</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">alias_node</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias_node</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1697"><a href="#Generator-1697"><span class="linenos">1697</span></a> <span class="n">unions</span> <span class="o">=</span> <span class="s2">&quot; UNION ALL &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">select</span><span class="p">)</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">)</span>
+</span><span id="Generator-1698"><a href="#Generator-1698"><span class="linenos">1698</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">unions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1699"><a href="#Generator-1699"><span class="linenos">1699</span></a>
+</span><span id="Generator-1700"><a href="#Generator-1700"><span class="linenos">1700</span></a> <span class="k">def</span> <span class="nf">var_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">Var</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1701"><a href="#Generator-1701"><span class="linenos">1701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1702"><a href="#Generator-1702"><span class="linenos">1702</span></a>
+</span><span id="Generator-1703"><a href="#Generator-1703"><span class="linenos">1703</span></a> <span class="k">def</span> <span class="nf">into_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">Into</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1704"><a href="#Generator-1704"><span class="linenos">1704</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1705"><a href="#Generator-1705"><span class="linenos">1705</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unlogged&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1706"><a href="#Generator-1706"><span class="linenos">1706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;INTO&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">temporary</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">unlogged</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1707"><a href="#Generator-1707"><span class="linenos">1707</span></a>
+</span><span id="Generator-1708"><a href="#Generator-1708"><span class="linenos">1708</span></a> <span class="k">def</span> <span class="nf">from_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">From</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1709"><a href="#Generator-1709"><span class="linenos">1709</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1710"><a href="#Generator-1710"><span class="linenos">1710</span></a>
+</span><span id="Generator-1711"><a href="#Generator-1711"><span class="linenos">1711</span></a> <span class="k">def</span> <span class="nf">group_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">Group</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1712"><a href="#Generator-1712"><span class="linenos">1712</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-1713"><a href="#Generator-1713"><span class="linenos">1713</span></a>
+</span><span id="Generator-1714"><a href="#Generator-1714"><span class="linenos">1714</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
+</span><span id="Generator-1715"><a href="#Generator-1715"><span class="linenos">1715</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
+</span><span id="Generator-1716"><a href="#Generator-1716"><span class="linenos">1716</span></a>
+</span><span id="Generator-1717"><a href="#Generator-1717"><span class="linenos">1717</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-1718"><a href="#Generator-1718"><span class="linenos">1718</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1719"><a href="#Generator-1719"><span class="linenos">1719</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;GROUPING SETS&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">grouping_sets</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1720"><a href="#Generator-1720"><span class="linenos">1720</span></a> <span class="p">)</span>
+</span><span id="Generator-1721"><a href="#Generator-1721"><span class="linenos">1721</span></a>
+</span><span id="Generator-1722"><a href="#Generator-1722"><span class="linenos">1722</span></a> <span class="n">cube</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;cube&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Generator-1723"><a href="#Generator-1723"><span class="linenos">1723</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">cube</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator-1724"><a href="#Generator-1724"><span class="linenos">1724</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1725"><a href="#Generator-1725"><span class="linenos">1725</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1726"><a href="#Generator-1726"><span class="linenos">1726</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;cube&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-1727"><a href="#Generator-1727"><span class="linenos">1727</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">cube_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">cube_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1728"><a href="#Generator-1728"><span class="linenos">1728</span></a>
+</span><span id="Generator-1729"><a href="#Generator-1729"><span class="linenos">1729</span></a> <span class="n">rollup</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;rollup&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Generator-1730"><a href="#Generator-1730"><span class="linenos">1730</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">rollup</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator-1731"><a href="#Generator-1731"><span class="linenos">1731</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1732"><a href="#Generator-1732"><span class="linenos">1732</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1733"><a href="#Generator-1733"><span class="linenos">1733</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;rollup&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-1734"><a href="#Generator-1734"><span class="linenos">1734</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">rollup_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">rollup_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1735"><a href="#Generator-1735"><span class="linenos">1735</span></a>
+</span><span id="Generator-1736"><a href="#Generator-1736"><span class="linenos">1736</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator-1737"><a href="#Generator-1737"><span class="linenos">1737</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
+</span><span id="Generator-1738"><a href="#Generator-1738"><span class="linenos">1738</span></a> <span class="n">cube_sql</span><span class="p">,</span>
+</span><span id="Generator-1739"><a href="#Generator-1739"><span class="linenos">1739</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
+</span><span id="Generator-1740"><a href="#Generator-1740"><span class="linenos">1740</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-1741"><a href="#Generator-1741"><span class="linenos">1741</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
+</span><span id="Generator-1742"><a href="#Generator-1742"><span class="linenos">1742</span></a> <span class="p">)</span>
+</span><span id="Generator-1743"><a href="#Generator-1743"><span class="linenos">1743</span></a>
+</span><span id="Generator-1744"><a href="#Generator-1744"><span class="linenos">1744</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">groupings</span><span class="p">:</span>
+</span><span id="Generator-1745"><a href="#Generator-1745"><span class="linenos">1745</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1746"><a href="#Generator-1746"><span class="linenos">1746</span></a>
+</span><span id="Generator-1747"><a href="#Generator-1747"><span class="linenos">1747</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="n">groupings</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1748"><a href="#Generator-1748"><span class="linenos">1748</span></a>
-</span><span id="Generator-1749"><a href="#Generator-1749"><span class="linenos">1749</span></a> <span class="k">def</span> <span class="nf">connect_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">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1750"><a href="#Generator-1750"><span class="linenos">1750</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;start&quot;</span><span class="p">)</span>
-</span><span id="Generator-1751"><a href="#Generator-1751"><span class="linenos">1751</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1752"><a href="#Generator-1752"><span class="linenos">1752</span></a> <span class="n">connect</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;connect&quot;</span><span class="p">)</span>
-</span><span id="Generator-1753"><a href="#Generator-1753"><span class="linenos">1753</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-1754"><a href="#Generator-1754"><span class="linenos">1754</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
-</span><span id="Generator-1755"><a href="#Generator-1755"><span class="linenos">1755</span></a>
-</span><span id="Generator-1756"><a href="#Generator-1756"><span class="linenos">1756</span></a> <span class="k">def</span> <span class="nf">prior_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">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1757"><a href="#Generator-1757"><span class="linenos">1757</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIOR </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="Generator-1758"><a href="#Generator-1758"><span class="linenos">1758</span></a>
-</span><span id="Generator-1759"><a href="#Generator-1759"><span class="linenos">1759</span></a> <span class="k">def</span> <span class="nf">join_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">Join</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1760"><a href="#Generator-1760"><span class="linenos">1760</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SEMI_ANTI_JOIN_WITH_SIDE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SEMI&quot;</span><span class="p">,</span> <span class="s2">&quot;ANTI&quot;</span><span class="p">):</span>
-</span><span id="Generator-1761"><a href="#Generator-1761"><span class="linenos">1761</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator-1762"><a href="#Generator-1762"><span class="linenos">1762</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1763"><a href="#Generator-1763"><span class="linenos">1763</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">side</span>
-</span><span id="Generator-1764"><a href="#Generator-1764"><span class="linenos">1764</span></a>
-</span><span id="Generator-1765"><a href="#Generator-1765"><span class="linenos">1765</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-1766"><a href="#Generator-1766"><span class="linenos">1766</span></a> <span class="n">op</span>
-</span><span id="Generator-1767"><a href="#Generator-1767"><span class="linenos">1767</span></a> <span class="k">for</span> <span class="n">op</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator-1768"><a href="#Generator-1768"><span class="linenos">1768</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Generator-1769"><a href="#Generator-1769"><span class="linenos">1769</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-1770"><a href="#Generator-1770"><span class="linenos">1770</span></a> <span class="n">side</span><span class="p">,</span>
-</span><span id="Generator-1771"><a href="#Generator-1771"><span class="linenos">1771</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Generator-1772"><a href="#Generator-1772"><span class="linenos">1772</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">hint</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-1773"><a href="#Generator-1773"><span class="linenos">1773</span></a> <span class="p">)</span>
-</span><span id="Generator-1774"><a href="#Generator-1774"><span class="linenos">1774</span></a> <span class="k">if</span> <span class="n">op</span>
-</span><span id="Generator-1775"><a href="#Generator-1775"><span class="linenos">1775</span></a> <span class="p">)</span>
-</span><span id="Generator-1776"><a href="#Generator-1776"><span class="linenos">1776</span></a> <span class="n">on_sql</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;on&quot;</span><span class="p">)</span>
-</span><span id="Generator-1777"><a href="#Generator-1777"><span class="linenos">1777</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator-1778"><a href="#Generator-1778"><span class="linenos">1778</span></a>
-</span><span id="Generator-1779"><a href="#Generator-1779"><span class="linenos">1779</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">on_sql</span> <span class="ow">and</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator-1780"><a href="#Generator-1780"><span class="linenos">1780</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">column</span><span class="p">)</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">using</span><span class="p">))</span>
-</span><span id="Generator-1781"><a href="#Generator-1781"><span class="linenos">1781</span></a>
-</span><span id="Generator-1782"><a href="#Generator-1782"><span class="linenos">1782</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-1783"><a href="#Generator-1783"><span class="linenos">1783</span></a> <span class="n">this_sql</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">this</span><span class="p">)</span>
-</span><span id="Generator-1784"><a href="#Generator-1784"><span class="linenos">1784</span></a>
-</span><span id="Generator-1785"><a href="#Generator-1785"><span class="linenos">1785</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="Generator-1786"><a href="#Generator-1786"><span class="linenos">1786</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">on_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1787"><a href="#Generator-1787"><span class="linenos">1787</span></a> <span class="n">space</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator-1788"><a href="#Generator-1788"><span class="linenos">1788</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator-1789"><a href="#Generator-1789"><span class="linenos">1789</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">USING (</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1790"><a href="#Generator-1790"><span class="linenos">1790</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1791"><a href="#Generator-1791"><span class="linenos">1791</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1792"><a href="#Generator-1792"><span class="linenos">1792</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
-</span><span id="Generator-1793"><a href="#Generator-1793"><span class="linenos">1793</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</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;cross_apply&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1794"><a href="#Generator-1794"><span class="linenos">1794</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1795"><a href="#Generator-1795"><span class="linenos">1795</span></a>
-</span><span id="Generator-1796"><a href="#Generator-1796"><span class="linenos">1796</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1797"><a href="#Generator-1797"><span class="linenos">1797</span></a>
-</span><span id="Generator-1798"><a href="#Generator-1798"><span class="linenos">1798</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
-</span><span id="Generator-1799"><a href="#Generator-1799"><span class="linenos">1799</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1800"><a href="#Generator-1800"><span class="linenos">1800</span></a>
-</span><span id="Generator-1801"><a href="#Generator-1801"><span class="linenos">1801</span></a> <span class="k">def</span> <span class="nf">lambda_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">Lambda</span><span class="p">,</span> <span class="n">arrow_sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1802"><a href="#Generator-1802"><span class="linenos">1802</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1803"><a href="#Generator-1803"><span class="linenos">1803</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">args</span>
-</span><span id="Generator-1804"><a href="#Generator-1804"><span class="linenos">1804</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">arrow_sep</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1805"><a href="#Generator-1805"><span class="linenos">1805</span></a>
-</span><span id="Generator-1806"><a href="#Generator-1806"><span class="linenos">1806</span></a> <span class="k">def</span> <span class="nf">lateral_op</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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1807"><a href="#Generator-1807"><span class="linenos">1807</span></a> <span class="n">cross_apply</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;cross_apply&quot;</span><span class="p">)</span>
-</span><span id="Generator-1808"><a href="#Generator-1808"><span class="linenos">1808</span></a>
-</span><span id="Generator-1809"><a href="#Generator-1809"><span class="linenos">1809</span></a> <span class="c1"># https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/</span>
-</span><span id="Generator-1810"><a href="#Generator-1810"><span class="linenos">1810</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator-1811"><a href="#Generator-1811"><span class="linenos">1811</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;INNER JOIN &quot;</span>
-</span><span id="Generator-1812"><a href="#Generator-1812"><span class="linenos">1812</span></a> <span class="k">elif</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
-</span><span id="Generator-1813"><a href="#Generator-1813"><span class="linenos">1813</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;LEFT JOIN &quot;</span>
-</span><span id="Generator-1814"><a href="#Generator-1814"><span class="linenos">1814</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1815"><a href="#Generator-1815"><span class="linenos">1815</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1816"><a href="#Generator-1816"><span class="linenos">1816</span></a>
-</span><span id="Generator-1817"><a href="#Generator-1817"><span class="linenos">1817</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2">LATERAL&quot;</span>
-</span><span id="Generator-1818"><a href="#Generator-1818"><span class="linenos">1818</span></a>
-</span><span id="Generator-1819"><a href="#Generator-1819"><span class="linenos">1819</span></a> <span class="k">def</span> <span class="nf">lateral_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1820"><a href="#Generator-1820"><span class="linenos">1820</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1821"><a href="#Generator-1821"><span class="linenos">1821</span></a>
-</span><span id="Generator-1822"><a href="#Generator-1822"><span class="linenos">1822</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;view&quot;</span><span class="p">):</span>
-</span><span id="Generator-1823"><a href="#Generator-1823"><span class="linenos">1823</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
-</span><span id="Generator-1824"><a href="#Generator-1824"><span class="linenos">1824</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1825"><a href="#Generator-1825"><span class="linenos">1825</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">alias</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1826"><a href="#Generator-1826"><span class="linenos">1826</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1827"><a href="#Generator-1827"><span class="linenos">1827</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;LATERAL VIEW</span><span class="si">{</span><span class="s1">&#39; OUTER&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;outer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-1828"><a href="#Generator-1828"><span class="linenos">1828</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1829"><a href="#Generator-1829"><span class="linenos">1829</span></a>
-</span><span id="Generator-1830"><a href="#Generator-1830"><span class="linenos">1830</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-1831"><a href="#Generator-1831"><span class="linenos">1831</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1832"><a href="#Generator-1832"><span class="linenos">1832</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lateral_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1749"><a href="#Generator-1749"><span class="linenos">1749</span></a> <span class="k">def</span> <span class="nf">having_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">Having</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1750"><a href="#Generator-1750"><span class="linenos">1750</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="Generator-1751"><a href="#Generator-1751"><span class="linenos">1751</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;HAVING&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1752"><a href="#Generator-1752"><span class="linenos">1752</span></a>
+</span><span id="Generator-1753"><a href="#Generator-1753"><span class="linenos">1753</span></a> <span class="k">def</span> <span class="nf">connect_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">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1754"><a href="#Generator-1754"><span class="linenos">1754</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;start&quot;</span><span class="p">)</span>
+</span><span id="Generator-1755"><a href="#Generator-1755"><span class="linenos">1755</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1756"><a href="#Generator-1756"><span class="linenos">1756</span></a> <span class="n">connect</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;connect&quot;</span><span class="p">)</span>
+</span><span id="Generator-1757"><a href="#Generator-1757"><span class="linenos">1757</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1758"><a href="#Generator-1758"><span class="linenos">1758</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
+</span><span id="Generator-1759"><a href="#Generator-1759"><span class="linenos">1759</span></a>
+</span><span id="Generator-1760"><a href="#Generator-1760"><span class="linenos">1760</span></a> <span class="k">def</span> <span class="nf">prior_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">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1761"><a href="#Generator-1761"><span class="linenos">1761</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIOR </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="Generator-1762"><a href="#Generator-1762"><span class="linenos">1762</span></a>
+</span><span id="Generator-1763"><a href="#Generator-1763"><span class="linenos">1763</span></a> <span class="k">def</span> <span class="nf">join_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">Join</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1764"><a href="#Generator-1764"><span class="linenos">1764</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SEMI_ANTI_JOIN_WITH_SIDE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SEMI&quot;</span><span class="p">,</span> <span class="s2">&quot;ANTI&quot;</span><span class="p">):</span>
+</span><span id="Generator-1765"><a href="#Generator-1765"><span class="linenos">1765</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator-1766"><a href="#Generator-1766"><span class="linenos">1766</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1767"><a href="#Generator-1767"><span class="linenos">1767</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">side</span>
+</span><span id="Generator-1768"><a href="#Generator-1768"><span class="linenos">1768</span></a>
+</span><span id="Generator-1769"><a href="#Generator-1769"><span class="linenos">1769</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-1770"><a href="#Generator-1770"><span class="linenos">1770</span></a> <span class="n">op</span>
+</span><span id="Generator-1771"><a href="#Generator-1771"><span class="linenos">1771</span></a> <span class="k">for</span> <span class="n">op</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator-1772"><a href="#Generator-1772"><span class="linenos">1772</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Generator-1773"><a href="#Generator-1773"><span class="linenos">1773</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-1774"><a href="#Generator-1774"><span class="linenos">1774</span></a> <span class="n">side</span><span class="p">,</span>
+</span><span id="Generator-1775"><a href="#Generator-1775"><span class="linenos">1775</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Generator-1776"><a href="#Generator-1776"><span class="linenos">1776</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">hint</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-1777"><a href="#Generator-1777"><span class="linenos">1777</span></a> <span class="p">)</span>
+</span><span id="Generator-1778"><a href="#Generator-1778"><span class="linenos">1778</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="Generator-1779"><a href="#Generator-1779"><span class="linenos">1779</span></a> <span class="p">)</span>
+</span><span id="Generator-1780"><a href="#Generator-1780"><span class="linenos">1780</span></a> <span class="n">on_sql</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;on&quot;</span><span class="p">)</span>
+</span><span id="Generator-1781"><a href="#Generator-1781"><span class="linenos">1781</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator-1782"><a href="#Generator-1782"><span class="linenos">1782</span></a>
+</span><span id="Generator-1783"><a href="#Generator-1783"><span class="linenos">1783</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">on_sql</span> <span class="ow">and</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator-1784"><a href="#Generator-1784"><span class="linenos">1784</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">column</span><span class="p">)</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">using</span><span class="p">))</span>
+</span><span id="Generator-1785"><a href="#Generator-1785"><span class="linenos">1785</span></a>
+</span><span id="Generator-1786"><a href="#Generator-1786"><span class="linenos">1786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-1787"><a href="#Generator-1787"><span class="linenos">1787</span></a> <span class="n">this_sql</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">this</span><span class="p">)</span>
+</span><span id="Generator-1788"><a href="#Generator-1788"><span class="linenos">1788</span></a>
+</span><span id="Generator-1789"><a href="#Generator-1789"><span class="linenos">1789</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="Generator-1790"><a href="#Generator-1790"><span class="linenos">1790</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">on_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1791"><a href="#Generator-1791"><span class="linenos">1791</span></a> <span class="n">space</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator-1792"><a href="#Generator-1792"><span class="linenos">1792</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator-1793"><a href="#Generator-1793"><span class="linenos">1793</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">USING (</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1794"><a href="#Generator-1794"><span class="linenos">1794</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1795"><a href="#Generator-1795"><span class="linenos">1795</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1796"><a href="#Generator-1796"><span class="linenos">1796</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
+</span><span id="Generator-1797"><a href="#Generator-1797"><span class="linenos">1797</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</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;cross_apply&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1798"><a href="#Generator-1798"><span class="linenos">1798</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1799"><a href="#Generator-1799"><span class="linenos">1799</span></a>
+</span><span id="Generator-1800"><a href="#Generator-1800"><span class="linenos">1800</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1801"><a href="#Generator-1801"><span class="linenos">1801</span></a>
+</span><span id="Generator-1802"><a href="#Generator-1802"><span class="linenos">1802</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
+</span><span id="Generator-1803"><a href="#Generator-1803"><span class="linenos">1803</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1804"><a href="#Generator-1804"><span class="linenos">1804</span></a>
+</span><span id="Generator-1805"><a href="#Generator-1805"><span class="linenos">1805</span></a> <span class="k">def</span> <span class="nf">lambda_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">Lambda</span><span class="p">,</span> <span class="n">arrow_sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1806"><a href="#Generator-1806"><span class="linenos">1806</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1807"><a href="#Generator-1807"><span class="linenos">1807</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">args</span>
+</span><span id="Generator-1808"><a href="#Generator-1808"><span class="linenos">1808</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">arrow_sep</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-1809"><a href="#Generator-1809"><span class="linenos">1809</span></a>
+</span><span id="Generator-1810"><a href="#Generator-1810"><span class="linenos">1810</span></a> <span class="k">def</span> <span class="nf">lateral_op</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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1811"><a href="#Generator-1811"><span class="linenos">1811</span></a> <span class="n">cross_apply</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;cross_apply&quot;</span><span class="p">)</span>
+</span><span id="Generator-1812"><a href="#Generator-1812"><span class="linenos">1812</span></a>
+</span><span id="Generator-1813"><a href="#Generator-1813"><span class="linenos">1813</span></a> <span class="c1"># https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/</span>
+</span><span id="Generator-1814"><a href="#Generator-1814"><span class="linenos">1814</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator-1815"><a href="#Generator-1815"><span class="linenos">1815</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;INNER JOIN &quot;</span>
+</span><span id="Generator-1816"><a href="#Generator-1816"><span class="linenos">1816</span></a> <span class="k">elif</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
+</span><span id="Generator-1817"><a href="#Generator-1817"><span class="linenos">1817</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;LEFT JOIN &quot;</span>
+</span><span id="Generator-1818"><a href="#Generator-1818"><span class="linenos">1818</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1819"><a href="#Generator-1819"><span class="linenos">1819</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1820"><a href="#Generator-1820"><span class="linenos">1820</span></a>
+</span><span id="Generator-1821"><a href="#Generator-1821"><span class="linenos">1821</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2">LATERAL&quot;</span>
+</span><span id="Generator-1822"><a href="#Generator-1822"><span class="linenos">1822</span></a>
+</span><span id="Generator-1823"><a href="#Generator-1823"><span class="linenos">1823</span></a> <span class="k">def</span> <span class="nf">lateral_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1824"><a href="#Generator-1824"><span class="linenos">1824</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1825"><a href="#Generator-1825"><span class="linenos">1825</span></a>
+</span><span id="Generator-1826"><a href="#Generator-1826"><span class="linenos">1826</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;view&quot;</span><span class="p">):</span>
+</span><span id="Generator-1827"><a href="#Generator-1827"><span class="linenos">1827</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
+</span><span id="Generator-1828"><a href="#Generator-1828"><span class="linenos">1828</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1829"><a href="#Generator-1829"><span class="linenos">1829</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">alias</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1830"><a href="#Generator-1830"><span class="linenos">1830</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1831"><a href="#Generator-1831"><span class="linenos">1831</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;LATERAL VIEW</span><span class="si">{</span><span class="s1">&#39; OUTER&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;outer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1832"><a href="#Generator-1832"><span class="linenos">1832</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1833"><a href="#Generator-1833"><span class="linenos">1833</span></a>
-</span><span id="Generator-1834"><a href="#Generator-1834"><span class="linenos">1834</span></a> <span class="k">def</span> <span class="nf">limit_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">Limit</span><span class="p">,</span> <span class="n">top</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1835"><a href="#Generator-1835"><span class="linenos">1835</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1836"><a href="#Generator-1836"><span class="linenos">1836</span></a>
-</span><span id="Generator-1837"><a href="#Generator-1837"><span class="linenos">1837</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator-1838"><a href="#Generator-1838"><span class="linenos">1838</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="Generator-1839"><a href="#Generator-1839"><span class="linenos">1839</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">))</span>
-</span><span id="Generator-1840"><a href="#Generator-1840"><span class="linenos">1840</span></a> <span class="k">if</span> <span class="n">e</span>
-</span><span id="Generator-1841"><a href="#Generator-1841"><span class="linenos">1841</span></a> <span class="p">]</span>
-</span><span id="Generator-1842"><a href="#Generator-1842"><span class="linenos">1842</span></a>
-</span><span id="Generator-1843"><a href="#Generator-1843"><span class="linenos">1843</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Generator-1844"><a href="#Generator-1844"><span class="linenos">1844</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">top</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">is_number</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span> <span class="k">else</span> <span class="n">args_sql</span>
-</span><span id="Generator-1845"><a href="#Generator-1845"><span class="linenos">1845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1834"><a href="#Generator-1834"><span class="linenos">1834</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-1835"><a href="#Generator-1835"><span class="linenos">1835</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1836"><a href="#Generator-1836"><span class="linenos">1836</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lateral_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1837"><a href="#Generator-1837"><span class="linenos">1837</span></a>
+</span><span id="Generator-1838"><a href="#Generator-1838"><span class="linenos">1838</span></a> <span class="k">def</span> <span class="nf">limit_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">Limit</span><span class="p">,</span> <span class="n">top</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1839"><a href="#Generator-1839"><span class="linenos">1839</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1840"><a href="#Generator-1840"><span class="linenos">1840</span></a>
+</span><span id="Generator-1841"><a href="#Generator-1841"><span class="linenos">1841</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator-1842"><a href="#Generator-1842"><span class="linenos">1842</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="Generator-1843"><a href="#Generator-1843"><span class="linenos">1843</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">))</span>
+</span><span id="Generator-1844"><a href="#Generator-1844"><span class="linenos">1844</span></a> <span class="k">if</span> <span class="n">e</span>
+</span><span id="Generator-1845"><a href="#Generator-1845"><span class="linenos">1845</span></a> <span class="p">]</span>
</span><span id="Generator-1846"><a href="#Generator-1846"><span class="linenos">1846</span></a>
-</span><span id="Generator-1847"><a href="#Generator-1847"><span class="linenos">1847</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="Generator-1848"><a href="#Generator-1848"><span class="linenos">1848</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1849"><a href="#Generator-1849"><span class="linenos">1849</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Generator-1850"><a href="#Generator-1850"><span class="linenos">1850</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1851"><a href="#Generator-1851"><span class="linenos">1851</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">expression</span>
-</span><span id="Generator-1852"><a href="#Generator-1852"><span class="linenos">1852</span></a> <span class="p">)</span>
-</span><span id="Generator-1853"><a href="#Generator-1853"><span class="linenos">1853</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OFFSET&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1854"><a href="#Generator-1854"><span class="linenos">1854</span></a>
-</span><span id="Generator-1855"><a href="#Generator-1855"><span class="linenos">1855</span></a> <span class="k">def</span> <span class="nf">setitem_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">SetItem</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1856"><a href="#Generator-1856"><span class="linenos">1856</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-1857"><a href="#Generator-1857"><span class="linenos">1857</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1858"><a href="#Generator-1858"><span class="linenos">1858</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1859"><a href="#Generator-1859"><span class="linenos">1859</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1860"><a href="#Generator-1860"><span class="linenos">1860</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
-</span><span id="Generator-1861"><a href="#Generator-1861"><span class="linenos">1861</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1862"><a href="#Generator-1862"><span class="linenos">1862</span></a> <span class="n">global_</span> <span class="o">=</span> <span class="s2">&quot;GLOBAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1863"><a href="#Generator-1863"><span class="linenos">1863</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">global_</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1864"><a href="#Generator-1864"><span class="linenos">1864</span></a>
-</span><span id="Generator-1865"><a href="#Generator-1865"><span class="linenos">1865</span></a> <span class="k">def</span> <span class="nf">set_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">Set</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1866"><a href="#Generator-1866"><span class="linenos">1866</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1867"><a href="#Generator-1867"><span class="linenos">1867</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1868"><a href="#Generator-1868"><span class="linenos">1868</span></a> <span class="p">)</span>
-</span><span id="Generator-1869"><a href="#Generator-1869"><span class="linenos">1869</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1870"><a href="#Generator-1870"><span class="linenos">1870</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1847"><a href="#Generator-1847"><span class="linenos">1847</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Generator-1848"><a href="#Generator-1848"><span class="linenos">1848</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">top</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">is_number</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span> <span class="k">else</span> <span class="n">args_sql</span>
+</span><span id="Generator-1849"><a href="#Generator-1849"><span class="linenos">1849</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1850"><a href="#Generator-1850"><span class="linenos">1850</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; BY </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1851"><a href="#Generator-1851"><span class="linenos">1851</span></a>
+</span><span id="Generator-1852"><a href="#Generator-1852"><span class="linenos">1852</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args_sql</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1853"><a href="#Generator-1853"><span class="linenos">1853</span></a>
+</span><span id="Generator-1854"><a href="#Generator-1854"><span class="linenos">1854</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="Generator-1855"><a href="#Generator-1855"><span class="linenos">1855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1856"><a href="#Generator-1856"><span class="linenos">1856</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Generator-1857"><a href="#Generator-1857"><span class="linenos">1857</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">value</span>
+</span><span id="Generator-1858"><a href="#Generator-1858"><span class="linenos">1858</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1859"><a href="#Generator-1859"><span class="linenos">1859</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; BY </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1860"><a href="#Generator-1860"><span class="linenos">1860</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OFFSET&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1861"><a href="#Generator-1861"><span class="linenos">1861</span></a>
+</span><span id="Generator-1862"><a href="#Generator-1862"><span class="linenos">1862</span></a> <span class="k">def</span> <span class="nf">setitem_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">SetItem</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1863"><a href="#Generator-1863"><span class="linenos">1863</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-1864"><a href="#Generator-1864"><span class="linenos">1864</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1865"><a href="#Generator-1865"><span class="linenos">1865</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1866"><a href="#Generator-1866"><span class="linenos">1866</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-1867"><a href="#Generator-1867"><span class="linenos">1867</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
+</span><span id="Generator-1868"><a href="#Generator-1868"><span class="linenos">1868</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1869"><a href="#Generator-1869"><span class="linenos">1869</span></a> <span class="n">global_</span> <span class="o">=</span> <span class="s2">&quot;GLOBAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1870"><a href="#Generator-1870"><span class="linenos">1870</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">global_</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-1871"><a href="#Generator-1871"><span class="linenos">1871</span></a>
-</span><span id="Generator-1872"><a href="#Generator-1872"><span class="linenos">1872</span></a> <span class="k">def</span> <span class="nf">pragma_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">Pragma</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1873"><a href="#Generator-1873"><span class="linenos">1873</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRAGMA </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="Generator-1874"><a href="#Generator-1874"><span class="linenos">1874</span></a>
-</span><span id="Generator-1875"><a href="#Generator-1875"><span class="linenos">1875</span></a> <span class="k">def</span> <span class="nf">lock_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">Lock</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1876"><a href="#Generator-1876"><span class="linenos">1876</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-1877"><a href="#Generator-1877"><span class="linenos">1877</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Locking reads using &#39;FOR UPDATE/SHARE&#39; are not supported&quot;</span><span class="p">)</span>
-</span><span id="Generator-1878"><a href="#Generator-1878"><span class="linenos">1878</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1879"><a href="#Generator-1879"><span class="linenos">1879</span></a>
-</span><span id="Generator-1880"><a href="#Generator-1880"><span class="linenos">1880</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
-</span><span id="Generator-1881"><a href="#Generator-1881"><span class="linenos">1881</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-1882"><a href="#Generator-1882"><span class="linenos">1882</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1883"><a href="#Generator-1883"><span class="linenos">1883</span></a> <span class="n">wait</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;wait&quot;</span><span class="p">)</span>
-</span><span id="Generator-1884"><a href="#Generator-1884"><span class="linenos">1884</span></a>
-</span><span id="Generator-1885"><a href="#Generator-1885"><span class="linenos">1885</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1886"><a href="#Generator-1886"><span class="linenos">1886</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Generator-1887"><a href="#Generator-1887"><span class="linenos">1887</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </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">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1888"><a href="#Generator-1888"><span class="linenos">1888</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1889"><a href="#Generator-1889"><span class="linenos">1889</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
-</span><span id="Generator-1890"><a href="#Generator-1890"><span class="linenos">1890</span></a>
-</span><span id="Generator-1891"><a href="#Generator-1891"><span class="linenos">1891</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1892"><a href="#Generator-1892"><span class="linenos">1892</span></a>
-</span><span id="Generator-1893"><a href="#Generator-1893"><span class="linenos">1893</span></a> <span class="k">def</span> <span class="nf">literal_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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1894"><a href="#Generator-1894"><span class="linenos">1894</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1895"><a href="#Generator-1895"><span class="linenos">1895</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Generator-1896"><a href="#Generator-1896"><span class="linenos">1896</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1897"><a href="#Generator-1897"><span class="linenos">1897</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="Generator-1898"><a href="#Generator-1898"><span class="linenos">1898</span></a>
-</span><span id="Generator-1899"><a href="#Generator-1899"><span class="linenos">1899</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1900"><a href="#Generator-1900"><span class="linenos">1900</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">)</span>
-</span><span id="Generator-1901"><a href="#Generator-1901"><span class="linenos">1901</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span>
-</span><span id="Generator-1902"><a href="#Generator-1902"><span class="linenos">1902</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span> <span class="n">ch</span><span class="p">)</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="Generator-1903"><a href="#Generator-1903"><span class="linenos">1903</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator-1904"><a href="#Generator-1904"><span class="linenos">1904</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
-</span><span id="Generator-1905"><a href="#Generator-1905"><span class="linenos">1905</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="Generator-1906"><a href="#Generator-1906"><span class="linenos">1906</span></a>
-</span><span id="Generator-1907"><a href="#Generator-1907"><span class="linenos">1907</span></a> <span class="k">def</span> <span class="nf">loaddata_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">LoadData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1908"><a href="#Generator-1908"><span class="linenos">1908</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot; LOCAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1909"><a href="#Generator-1909"><span class="linenos">1909</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPATH </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;inpath&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1910"><a href="#Generator-1910"><span class="linenos">1910</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1911"><a href="#Generator-1911"><span class="linenos">1911</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INTO 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="Generator-1912"><a href="#Generator-1912"><span class="linenos">1912</span></a> <span class="n">partition</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;partition&quot;</span><span class="p">)</span>
-</span><span id="Generator-1913"><a href="#Generator-1913"><span class="linenos">1913</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1914"><a href="#Generator-1914"><span class="linenos">1914</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
-</span><span id="Generator-1915"><a href="#Generator-1915"><span class="linenos">1915</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1916"><a href="#Generator-1916"><span class="linenos">1916</span></a> <span class="n">serde</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;serde&quot;</span><span class="p">)</span>
-</span><span id="Generator-1917"><a href="#Generator-1917"><span class="linenos">1917</span></a> <span class="n">serde</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SERDE </span><span class="si">{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1918"><a href="#Generator-1918"><span class="linenos">1918</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOAD DATA</span><span class="si">{</span><span class="n">local</span><span class="si">}{</span><span class="n">inpath</span><span class="si">}{</span><span class="n">overwrite</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">partition</span><span class="si">}{</span><span class="n">input_format</span><span class="si">}{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1919"><a href="#Generator-1919"><span class="linenos">1919</span></a>
-</span><span id="Generator-1920"><a href="#Generator-1920"><span class="linenos">1920</span></a> <span class="k">def</span> <span class="nf">null_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1921"><a href="#Generator-1921"><span class="linenos">1921</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
-</span><span id="Generator-1922"><a href="#Generator-1922"><span class="linenos">1922</span></a>
-</span><span id="Generator-1923"><a href="#Generator-1923"><span class="linenos">1923</span></a> <span class="k">def</span> <span class="nf">boolean_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">Boolean</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1924"><a href="#Generator-1924"><span class="linenos">1924</span></a> <span class="k">return</span> <span class="s2">&quot;TRUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;FALSE&quot;</span>
-</span><span id="Generator-1925"><a href="#Generator-1925"><span class="linenos">1925</span></a>
-</span><span id="Generator-1926"><a href="#Generator-1926"><span class="linenos">1926</span></a> <span class="k">def</span> <span class="nf">order_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">Order</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1927"><a href="#Generator-1927"><span class="linenos">1927</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1928"><a href="#Generator-1928"><span class="linenos">1928</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="Generator-1929"><a href="#Generator-1929"><span class="linenos">1929</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="s2">&quot;SIBLINGS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;siblings&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1930"><a href="#Generator-1930"><span class="linenos">1930</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">ORDER </span><span class="si">{</span><span class="n">siblings</span><span class="si">}</span><span class="s2">BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">this</span> <span class="ow">or</span> <span class="n">flat</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Generator-1931"><a href="#Generator-1931"><span class="linenos">1931</span></a> <span class="n">interpolated_values</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator-1932"><a href="#Generator-1932"><span class="linenos">1932</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">named_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">named_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="Generator-1933"><a href="#Generator-1933"><span class="linenos">1933</span></a> <span class="k">for</span> <span class="n">named_expression</span> <span class="ow">in</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;interpolate&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="Generator-1934"><a href="#Generator-1934"><span class="linenos">1934</span></a> <span class="p">]</span>
-</span><span id="Generator-1935"><a href="#Generator-1935"><span class="linenos">1935</span></a> <span class="n">interpolate</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1936"><a href="#Generator-1936"><span class="linenos">1936</span></a> <span class="sa">f</span><span class="s2">&quot; INTERPOLATE (</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">interpolated_values</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">interpolated_values</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1937"><a href="#Generator-1937"><span class="linenos">1937</span></a> <span class="p">)</span>
-</span><span id="Generator-1938"><a href="#Generator-1938"><span class="linenos">1938</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">interpolate</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1939"><a href="#Generator-1939"><span class="linenos">1939</span></a>
-</span><span id="Generator-1940"><a href="#Generator-1940"><span class="linenos">1940</span></a> <span class="k">def</span> <span class="nf">withfill_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">WithFill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1941"><a href="#Generator-1941"><span class="linenos">1941</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
-</span><span id="Generator-1942"><a href="#Generator-1942"><span class="linenos">1942</span></a> <span class="n">from_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">from_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">from_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1943"><a href="#Generator-1943"><span class="linenos">1943</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
-</span><span id="Generator-1944"><a href="#Generator-1944"><span class="linenos">1944</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1945"><a href="#Generator-1945"><span class="linenos">1945</span></a> <span class="n">step_sql</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;step&quot;</span><span class="p">)</span>
-</span><span id="Generator-1946"><a href="#Generator-1946"><span class="linenos">1946</span></a> <span class="n">step_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; STEP </span><span class="si">{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">step_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1947"><a href="#Generator-1947"><span class="linenos">1947</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH FILL</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1948"><a href="#Generator-1948"><span class="linenos">1948</span></a>
-</span><span id="Generator-1949"><a href="#Generator-1949"><span class="linenos">1949</span></a> <span class="k">def</span> <span class="nf">cluster_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">Cluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1950"><a href="#Generator-1950"><span class="linenos">1950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1951"><a href="#Generator-1951"><span class="linenos">1951</span></a>
-</span><span id="Generator-1952"><a href="#Generator-1952"><span class="linenos">1952</span></a> <span class="k">def</span> <span class="nf">distribute_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">Distribute</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1953"><a href="#Generator-1953"><span class="linenos">1953</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1954"><a href="#Generator-1954"><span class="linenos">1954</span></a>
-</span><span id="Generator-1955"><a href="#Generator-1955"><span class="linenos">1955</span></a> <span class="k">def</span> <span class="nf">sort_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">Sort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1956"><a href="#Generator-1956"><span class="linenos">1956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1957"><a href="#Generator-1957"><span class="linenos">1957</span></a>
-</span><span id="Generator-1958"><a href="#Generator-1958"><span class="linenos">1958</span></a> <span class="k">def</span> <span class="nf">ordered_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">Ordered</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1959"><a href="#Generator-1959"><span class="linenos">1959</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
-</span><span id="Generator-1960"><a href="#Generator-1960"><span class="linenos">1960</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
+</span><span id="Generator-1872"><a href="#Generator-1872"><span class="linenos">1872</span></a> <span class="k">def</span> <span class="nf">set_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">Set</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1873"><a href="#Generator-1873"><span class="linenos">1873</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1874"><a href="#Generator-1874"><span class="linenos">1874</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1875"><a href="#Generator-1875"><span class="linenos">1875</span></a> <span class="p">)</span>
+</span><span id="Generator-1876"><a href="#Generator-1876"><span class="linenos">1876</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1877"><a href="#Generator-1877"><span class="linenos">1877</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1878"><a href="#Generator-1878"><span class="linenos">1878</span></a>
+</span><span id="Generator-1879"><a href="#Generator-1879"><span class="linenos">1879</span></a> <span class="k">def</span> <span class="nf">pragma_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">Pragma</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1880"><a href="#Generator-1880"><span class="linenos">1880</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRAGMA </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="Generator-1881"><a href="#Generator-1881"><span class="linenos">1881</span></a>
+</span><span id="Generator-1882"><a href="#Generator-1882"><span class="linenos">1882</span></a> <span class="k">def</span> <span class="nf">lock_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">Lock</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1883"><a href="#Generator-1883"><span class="linenos">1883</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-1884"><a href="#Generator-1884"><span class="linenos">1884</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Locking reads using &#39;FOR UPDATE/SHARE&#39; are not supported&quot;</span><span class="p">)</span>
+</span><span id="Generator-1885"><a href="#Generator-1885"><span class="linenos">1885</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1886"><a href="#Generator-1886"><span class="linenos">1886</span></a>
+</span><span id="Generator-1887"><a href="#Generator-1887"><span class="linenos">1887</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
+</span><span id="Generator-1888"><a href="#Generator-1888"><span class="linenos">1888</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-1889"><a href="#Generator-1889"><span class="linenos">1889</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1890"><a href="#Generator-1890"><span class="linenos">1890</span></a> <span class="n">wait</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;wait&quot;</span><span class="p">)</span>
+</span><span id="Generator-1891"><a href="#Generator-1891"><span class="linenos">1891</span></a>
+</span><span id="Generator-1892"><a href="#Generator-1892"><span class="linenos">1892</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1893"><a href="#Generator-1893"><span class="linenos">1893</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Generator-1894"><a href="#Generator-1894"><span class="linenos">1894</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </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">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1895"><a href="#Generator-1895"><span class="linenos">1895</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1896"><a href="#Generator-1896"><span class="linenos">1896</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
+</span><span id="Generator-1897"><a href="#Generator-1897"><span class="linenos">1897</span></a>
+</span><span id="Generator-1898"><a href="#Generator-1898"><span class="linenos">1898</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1899"><a href="#Generator-1899"><span class="linenos">1899</span></a>
+</span><span id="Generator-1900"><a href="#Generator-1900"><span class="linenos">1900</span></a> <span class="k">def</span> <span class="nf">literal_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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1901"><a href="#Generator-1901"><span class="linenos">1901</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1902"><a href="#Generator-1902"><span class="linenos">1902</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Generator-1903"><a href="#Generator-1903"><span class="linenos">1903</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1904"><a href="#Generator-1904"><span class="linenos">1904</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Generator-1905"><a href="#Generator-1905"><span class="linenos">1905</span></a>
+</span><span id="Generator-1906"><a href="#Generator-1906"><span class="linenos">1906</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1907"><a href="#Generator-1907"><span class="linenos">1907</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">)</span>
+</span><span id="Generator-1908"><a href="#Generator-1908"><span class="linenos">1908</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span>
+</span><span id="Generator-1909"><a href="#Generator-1909"><span class="linenos">1909</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span> <span class="n">ch</span><span class="p">)</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Generator-1910"><a href="#Generator-1910"><span class="linenos">1910</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator-1911"><a href="#Generator-1911"><span class="linenos">1911</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
+</span><span id="Generator-1912"><a href="#Generator-1912"><span class="linenos">1912</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Generator-1913"><a href="#Generator-1913"><span class="linenos">1913</span></a>
+</span><span id="Generator-1914"><a href="#Generator-1914"><span class="linenos">1914</span></a> <span class="k">def</span> <span class="nf">loaddata_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">LoadData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1915"><a href="#Generator-1915"><span class="linenos">1915</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot; LOCAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1916"><a href="#Generator-1916"><span class="linenos">1916</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPATH </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;inpath&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1917"><a href="#Generator-1917"><span class="linenos">1917</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1918"><a href="#Generator-1918"><span class="linenos">1918</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INTO 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="Generator-1919"><a href="#Generator-1919"><span class="linenos">1919</span></a> <span class="n">partition</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;partition&quot;</span><span class="p">)</span>
+</span><span id="Generator-1920"><a href="#Generator-1920"><span class="linenos">1920</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1921"><a href="#Generator-1921"><span class="linenos">1921</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
+</span><span id="Generator-1922"><a href="#Generator-1922"><span class="linenos">1922</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1923"><a href="#Generator-1923"><span class="linenos">1923</span></a> <span class="n">serde</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;serde&quot;</span><span class="p">)</span>
+</span><span id="Generator-1924"><a href="#Generator-1924"><span class="linenos">1924</span></a> <span class="n">serde</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SERDE </span><span class="si">{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1925"><a href="#Generator-1925"><span class="linenos">1925</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOAD DATA</span><span class="si">{</span><span class="n">local</span><span class="si">}{</span><span class="n">inpath</span><span class="si">}{</span><span class="n">overwrite</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">partition</span><span class="si">}{</span><span class="n">input_format</span><span class="si">}{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1926"><a href="#Generator-1926"><span class="linenos">1926</span></a>
+</span><span id="Generator-1927"><a href="#Generator-1927"><span class="linenos">1927</span></a> <span class="k">def</span> <span class="nf">null_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1928"><a href="#Generator-1928"><span class="linenos">1928</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+</span><span id="Generator-1929"><a href="#Generator-1929"><span class="linenos">1929</span></a>
+</span><span id="Generator-1930"><a href="#Generator-1930"><span class="linenos">1930</span></a> <span class="k">def</span> <span class="nf">boolean_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">Boolean</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1931"><a href="#Generator-1931"><span class="linenos">1931</span></a> <span class="k">return</span> <span class="s2">&quot;TRUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;FALSE&quot;</span>
+</span><span id="Generator-1932"><a href="#Generator-1932"><span class="linenos">1932</span></a>
+</span><span id="Generator-1933"><a href="#Generator-1933"><span class="linenos">1933</span></a> <span class="k">def</span> <span class="nf">order_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">Order</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1934"><a href="#Generator-1934"><span class="linenos">1934</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1935"><a href="#Generator-1935"><span class="linenos">1935</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Generator-1936"><a href="#Generator-1936"><span class="linenos">1936</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="s2">&quot;SIBLINGS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;siblings&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1937"><a href="#Generator-1937"><span class="linenos">1937</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">ORDER </span><span class="si">{</span><span class="n">siblings</span><span class="si">}</span><span class="s2">BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">this</span> <span class="ow">or</span> <span class="n">flat</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Generator-1938"><a href="#Generator-1938"><span class="linenos">1938</span></a> <span class="n">interpolated_values</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator-1939"><a href="#Generator-1939"><span class="linenos">1939</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">named_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">named_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="Generator-1940"><a href="#Generator-1940"><span class="linenos">1940</span></a> <span class="k">for</span> <span class="n">named_expression</span> <span class="ow">in</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;interpolate&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="Generator-1941"><a href="#Generator-1941"><span class="linenos">1941</span></a> <span class="p">]</span>
+</span><span id="Generator-1942"><a href="#Generator-1942"><span class="linenos">1942</span></a> <span class="n">interpolate</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1943"><a href="#Generator-1943"><span class="linenos">1943</span></a> <span class="sa">f</span><span class="s2">&quot; INTERPOLATE (</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">interpolated_values</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">interpolated_values</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1944"><a href="#Generator-1944"><span class="linenos">1944</span></a> <span class="p">)</span>
+</span><span id="Generator-1945"><a href="#Generator-1945"><span class="linenos">1945</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">interpolate</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1946"><a href="#Generator-1946"><span class="linenos">1946</span></a>
+</span><span id="Generator-1947"><a href="#Generator-1947"><span class="linenos">1947</span></a> <span class="k">def</span> <span class="nf">withfill_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">WithFill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1948"><a href="#Generator-1948"><span class="linenos">1948</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
+</span><span id="Generator-1949"><a href="#Generator-1949"><span class="linenos">1949</span></a> <span class="n">from_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">from_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">from_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1950"><a href="#Generator-1950"><span class="linenos">1950</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
+</span><span id="Generator-1951"><a href="#Generator-1951"><span class="linenos">1951</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1952"><a href="#Generator-1952"><span class="linenos">1952</span></a> <span class="n">step_sql</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;step&quot;</span><span class="p">)</span>
+</span><span id="Generator-1953"><a href="#Generator-1953"><span class="linenos">1953</span></a> <span class="n">step_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; STEP </span><span class="si">{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">step_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1954"><a href="#Generator-1954"><span class="linenos">1954</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH FILL</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1955"><a href="#Generator-1955"><span class="linenos">1955</span></a>
+</span><span id="Generator-1956"><a href="#Generator-1956"><span class="linenos">1956</span></a> <span class="k">def</span> <span class="nf">cluster_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">Cluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1957"><a href="#Generator-1957"><span class="linenos">1957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-1958"><a href="#Generator-1958"><span class="linenos">1958</span></a>
+</span><span id="Generator-1959"><a href="#Generator-1959"><span class="linenos">1959</span></a> <span class="k">def</span> <span class="nf">distribute_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">Distribute</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1960"><a href="#Generator-1960"><span class="linenos">1960</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="Generator-1961"><a href="#Generator-1961"><span class="linenos">1961</span></a>
-</span><span id="Generator-1962"><a href="#Generator-1962"><span class="linenos">1962</span></a> <span class="n">nulls_first</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;nulls_first&quot;</span><span class="p">)</span>
-</span><span id="Generator-1963"><a href="#Generator-1963"><span class="linenos">1963</span></a> <span class="n">nulls_last</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">nulls_first</span>
-</span><span id="Generator-1964"><a href="#Generator-1964"><span class="linenos">1964</span></a> <span class="n">nulls_are_large</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="Generator-1965"><a href="#Generator-1965"><span class="linenos">1965</span></a> <span class="n">nulls_are_small</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="Generator-1966"><a href="#Generator-1966"><span class="linenos">1966</span></a> <span class="n">nulls_are_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="Generator-1967"><a href="#Generator-1967"><span class="linenos">1967</span></a>
-</span><span id="Generator-1968"><a href="#Generator-1968"><span class="linenos">1968</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1969"><a href="#Generator-1969"><span class="linenos">1969</span></a>
-</span><span id="Generator-1970"><a href="#Generator-1970"><span class="linenos">1970</span></a> <span class="n">sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot; ASC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator-1971"><a href="#Generator-1971"><span class="linenos">1971</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1972"><a href="#Generator-1972"><span class="linenos">1972</span></a> <span class="k">if</span> <span class="n">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Generator-1973"><a href="#Generator-1973"><span class="linenos">1973</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="n">nulls_are_last</span>
-</span><span id="Generator-1974"><a href="#Generator-1974"><span class="linenos">1974</span></a> <span class="p">):</span>
-</span><span id="Generator-1975"><a href="#Generator-1975"><span class="linenos">1975</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
-</span><span id="Generator-1976"><a href="#Generator-1976"><span class="linenos">1976</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="Generator-1977"><a href="#Generator-1977"><span class="linenos">1977</span></a> <span class="n">nulls_last</span>
-</span><span id="Generator-1978"><a href="#Generator-1978"><span class="linenos">1978</span></a> <span class="ow">and</span> <span class="p">((</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">))</span>
-</span><span id="Generator-1979"><a href="#Generator-1979"><span class="linenos">1979</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
-</span><span id="Generator-1980"><a href="#Generator-1980"><span class="linenos">1980</span></a> <span class="p">):</span>
-</span><span id="Generator-1981"><a href="#Generator-1981"><span class="linenos">1981</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS LAST&quot;</span>
-</span><span id="Generator-1982"><a href="#Generator-1982"><span class="linenos">1982</span></a>
-</span><span id="Generator-1983"><a href="#Generator-1983"><span class="linenos">1983</span></a> <span class="c1"># If the NULLS FIRST/LAST clause is unsupported, we add another sort key to simulate it</span>
-</span><span id="Generator-1984"><a href="#Generator-1984"><span class="linenos">1984</span></a> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-1985"><a href="#Generator-1985"><span class="linenos">1985</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="Generator-1986"><a href="#Generator-1986"><span class="linenos">1986</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">)</span> <span class="ow">and</span> <span class="n">window</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;spec&quot;</span><span class="p">):</span>
-</span><span id="Generator-1987"><a href="#Generator-1987"><span class="linenos">1987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="Generator-1988"><a href="#Generator-1988"><span class="linenos">1988</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported in window functions&quot;</span>
-</span><span id="Generator-1989"><a href="#Generator-1989"><span class="linenos">1989</span></a> <span class="p">)</span>
-</span><span id="Generator-1990"><a href="#Generator-1990"><span class="linenos">1990</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1991"><a href="#Generator-1991"><span class="linenos">1991</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-1992"><a href="#Generator-1992"><span class="linenos">1992</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="Generator-1993"><a href="#Generator-1993"><span class="linenos">1993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="Generator-1994"><a href="#Generator-1994"><span class="linenos">1994</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported with positional ordering&quot;</span>
-</span><span id="Generator-1995"><a href="#Generator-1995"><span class="linenos">1995</span></a> <span class="p">)</span>
-</span><span id="Generator-1996"><a href="#Generator-1996"><span class="linenos">1996</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1997"><a href="#Generator-1997"><span class="linenos">1997</span></a> <span class="n">null_sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="o">==</span> <span class="s2">&quot; NULLS FIRST&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1998"><a href="#Generator-1998"><span class="linenos">1998</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASE WHEN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS NULL THEN 1 ELSE 0 END</span><span class="si">{</span><span class="n">null_sort_order</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1999"><a href="#Generator-1999"><span class="linenos">1999</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2000"><a href="#Generator-2000"><span class="linenos">2000</span></a>
-</span><span id="Generator-2001"><a href="#Generator-2001"><span class="linenos">2001</span></a> <span class="n">with_fill</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;with_fill&quot;</span><span class="p">)</span>
-</span><span id="Generator-2002"><a href="#Generator-2002"><span class="linenos">2002</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">with_fill</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2003"><a href="#Generator-2003"><span class="linenos">2003</span></a>
-</span><span id="Generator-2004"><a href="#Generator-2004"><span class="linenos">2004</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2005"><a href="#Generator-2005"><span class="linenos">2005</span></a>
-</span><span id="Generator-2006"><a href="#Generator-2006"><span class="linenos">2006</span></a> <span class="k">def</span> <span class="nf">matchrecognize_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">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2007"><a href="#Generator-2007"><span class="linenos">2007</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2008"><a href="#Generator-2008"><span class="linenos">2008</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator-2009"><a href="#Generator-2009"><span class="linenos">2009</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;measures&quot;</span><span class="p">)</span>
-</span><span id="Generator-2010"><a href="#Generator-2010"><span class="linenos">2010</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;MEASURES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">measures</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">measures</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2011"><a href="#Generator-2011"><span class="linenos">2011</span></a> <span class="n">rows</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;rows&quot;</span><span class="p">)</span>
-</span><span id="Generator-2012"><a href="#Generator-2012"><span class="linenos">2012</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2013"><a href="#Generator-2013"><span class="linenos">2013</span></a> <span class="n">after</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;after&quot;</span><span class="p">)</span>
-</span><span id="Generator-2014"><a href="#Generator-2014"><span class="linenos">2014</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">after</span><span class="p">)</span> <span class="k">if</span> <span class="n">after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2015"><a href="#Generator-2015"><span class="linenos">2015</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
-</span><span id="Generator-2016"><a href="#Generator-2016"><span class="linenos">2016</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;PATTERN (</span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2017"><a href="#Generator-2017"><span class="linenos">2017</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator-2018"><a href="#Generator-2018"><span class="linenos">2018</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">definition</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="Generator-2019"><a href="#Generator-2019"><span class="linenos">2019</span></a> <span class="k">for</span> <span class="n">definition</span> <span class="ow">in</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;define&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Generator-2020"><a href="#Generator-2020"><span class="linenos">2020</span></a> <span class="p">]</span>
-</span><span id="Generator-2021"><a href="#Generator-2021"><span class="linenos">2021</span></a> <span class="n">definitions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">sqls</span><span class="o">=</span><span class="n">definition_sqls</span><span class="p">)</span>
-</span><span id="Generator-2022"><a href="#Generator-2022"><span class="linenos">2022</span></a> <span class="n">define</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;DEFINE</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">definitions</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">definitions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2023"><a href="#Generator-2023"><span class="linenos">2023</span></a> <span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-2024"><a href="#Generator-2024"><span class="linenos">2024</span></a> <span class="p">(</span>
-</span><span id="Generator-2025"><a href="#Generator-2025"><span class="linenos">2025</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="Generator-2026"><a href="#Generator-2026"><span class="linenos">2026</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="Generator-2027"><a href="#Generator-2027"><span class="linenos">2027</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="Generator-2028"><a href="#Generator-2028"><span class="linenos">2028</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="Generator-2029"><a href="#Generator-2029"><span class="linenos">2029</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="Generator-2030"><a href="#Generator-2030"><span class="linenos">2030</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="Generator-2031"><a href="#Generator-2031"><span class="linenos">2031</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="Generator-2032"><a href="#Generator-2032"><span class="linenos">2032</span></a> <span class="p">)</span>
-</span><span id="Generator-2033"><a href="#Generator-2033"><span class="linenos">2033</span></a> <span class="p">)</span>
-</span><span id="Generator-2034"><a href="#Generator-2034"><span class="linenos">2034</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-2035"><a href="#Generator-2035"><span class="linenos">2035</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2036"><a href="#Generator-2036"><span class="linenos">2036</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;MATCH_RECOGNIZE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">body</span><span class="p">)</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2037"><a href="#Generator-2037"><span class="linenos">2037</span></a>
-</span><span id="Generator-2038"><a href="#Generator-2038"><span class="linenos">2038</span></a> <span class="k">def</span> <span class="nf">query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="o">*</span><span class="n">sqls</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2039"><a href="#Generator-2039"><span class="linenos">2039</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator-2040"><a href="#Generator-2040"><span class="linenos">2040</span></a>
-</span><span id="Generator-2041"><a href="#Generator-2041"><span class="linenos">2041</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
-</span><span id="Generator-2042"><a href="#Generator-2042"><span class="linenos">2042</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="Generator-2043"><a href="#Generator-2043"><span class="linenos">2043</span></a>
-</span><span id="Generator-2044"><a href="#Generator-2044"><span class="linenos">2044</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;LIMIT&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">):</span>
-</span><span id="Generator-2045"><a href="#Generator-2045"><span class="linenos">2045</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">maybe_copy</span><span class="p">(</span><span class="n">limit</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;count&quot;</span><span class="p">)))</span>
-</span><span id="Generator-2046"><a href="#Generator-2046"><span class="linenos">2046</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;FETCH&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">):</span>
-</span><span id="Generator-2047"><a href="#Generator-2047"><span class="linenos">2047</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Generator-2048"><a href="#Generator-2048"><span class="linenos">2048</span></a>
-</span><span id="Generator-2049"><a href="#Generator-2049"><span class="linenos">2049</span></a> <span class="n">fetch</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span>
+</span><span id="Generator-1962"><a href="#Generator-1962"><span class="linenos">1962</span></a> <span class="k">def</span> <span class="nf">sort_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">Sort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1963"><a href="#Generator-1963"><span class="linenos">1963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-1964"><a href="#Generator-1964"><span class="linenos">1964</span></a>
+</span><span id="Generator-1965"><a href="#Generator-1965"><span class="linenos">1965</span></a> <span class="k">def</span> <span class="nf">ordered_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">Ordered</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1966"><a href="#Generator-1966"><span class="linenos">1966</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
+</span><span id="Generator-1967"><a href="#Generator-1967"><span class="linenos">1967</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
+</span><span id="Generator-1968"><a href="#Generator-1968"><span class="linenos">1968</span></a>
+</span><span id="Generator-1969"><a href="#Generator-1969"><span class="linenos">1969</span></a> <span class="n">nulls_first</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;nulls_first&quot;</span><span class="p">)</span>
+</span><span id="Generator-1970"><a href="#Generator-1970"><span class="linenos">1970</span></a> <span class="n">nulls_last</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">nulls_first</span>
+</span><span id="Generator-1971"><a href="#Generator-1971"><span class="linenos">1971</span></a> <span class="n">nulls_are_large</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="Generator-1972"><a href="#Generator-1972"><span class="linenos">1972</span></a> <span class="n">nulls_are_small</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="Generator-1973"><a href="#Generator-1973"><span class="linenos">1973</span></a> <span class="n">nulls_are_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="Generator-1974"><a href="#Generator-1974"><span class="linenos">1974</span></a>
+</span><span id="Generator-1975"><a href="#Generator-1975"><span class="linenos">1975</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1976"><a href="#Generator-1976"><span class="linenos">1976</span></a>
+</span><span id="Generator-1977"><a href="#Generator-1977"><span class="linenos">1977</span></a> <span class="n">sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot; ASC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator-1978"><a href="#Generator-1978"><span class="linenos">1978</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1979"><a href="#Generator-1979"><span class="linenos">1979</span></a> <span class="k">if</span> <span class="n">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Generator-1980"><a href="#Generator-1980"><span class="linenos">1980</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="n">nulls_are_last</span>
+</span><span id="Generator-1981"><a href="#Generator-1981"><span class="linenos">1981</span></a> <span class="p">):</span>
+</span><span id="Generator-1982"><a href="#Generator-1982"><span class="linenos">1982</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
+</span><span id="Generator-1983"><a href="#Generator-1983"><span class="linenos">1983</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="Generator-1984"><a href="#Generator-1984"><span class="linenos">1984</span></a> <span class="n">nulls_last</span>
+</span><span id="Generator-1985"><a href="#Generator-1985"><span class="linenos">1985</span></a> <span class="ow">and</span> <span class="p">((</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">))</span>
+</span><span id="Generator-1986"><a href="#Generator-1986"><span class="linenos">1986</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
+</span><span id="Generator-1987"><a href="#Generator-1987"><span class="linenos">1987</span></a> <span class="p">):</span>
+</span><span id="Generator-1988"><a href="#Generator-1988"><span class="linenos">1988</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS LAST&quot;</span>
+</span><span id="Generator-1989"><a href="#Generator-1989"><span class="linenos">1989</span></a>
+</span><span id="Generator-1990"><a href="#Generator-1990"><span class="linenos">1990</span></a> <span class="c1"># If the NULLS FIRST/LAST clause is unsupported, we add another sort key to simulate it</span>
+</span><span id="Generator-1991"><a href="#Generator-1991"><span class="linenos">1991</span></a> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-1992"><a href="#Generator-1992"><span class="linenos">1992</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="Generator-1993"><a href="#Generator-1993"><span class="linenos">1993</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">)</span> <span class="ow">and</span> <span class="n">window</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;spec&quot;</span><span class="p">):</span>
+</span><span id="Generator-1994"><a href="#Generator-1994"><span class="linenos">1994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="Generator-1995"><a href="#Generator-1995"><span class="linenos">1995</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported in window functions&quot;</span>
+</span><span id="Generator-1996"><a href="#Generator-1996"><span class="linenos">1996</span></a> <span class="p">)</span>
+</span><span id="Generator-1997"><a href="#Generator-1997"><span class="linenos">1997</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1998"><a href="#Generator-1998"><span class="linenos">1998</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1999"><a href="#Generator-1999"><span class="linenos">1999</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="Generator-2000"><a href="#Generator-2000"><span class="linenos">2000</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="Generator-2001"><a href="#Generator-2001"><span class="linenos">2001</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported with positional ordering&quot;</span>
+</span><span id="Generator-2002"><a href="#Generator-2002"><span class="linenos">2002</span></a> <span class="p">)</span>
+</span><span id="Generator-2003"><a href="#Generator-2003"><span class="linenos">2003</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2004"><a href="#Generator-2004"><span class="linenos">2004</span></a> <span class="n">null_sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="o">==</span> <span class="s2">&quot; NULLS FIRST&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2005"><a href="#Generator-2005"><span class="linenos">2005</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASE WHEN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS NULL THEN 1 ELSE 0 END</span><span class="si">{</span><span class="n">null_sort_order</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2006"><a href="#Generator-2006"><span class="linenos">2006</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2007"><a href="#Generator-2007"><span class="linenos">2007</span></a>
+</span><span id="Generator-2008"><a href="#Generator-2008"><span class="linenos">2008</span></a> <span class="n">with_fill</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;with_fill&quot;</span><span class="p">)</span>
+</span><span id="Generator-2009"><a href="#Generator-2009"><span class="linenos">2009</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">with_fill</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2010"><a href="#Generator-2010"><span class="linenos">2010</span></a>
+</span><span id="Generator-2011"><a href="#Generator-2011"><span class="linenos">2011</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2012"><a href="#Generator-2012"><span class="linenos">2012</span></a>
+</span><span id="Generator-2013"><a href="#Generator-2013"><span class="linenos">2013</span></a> <span class="k">def</span> <span class="nf">matchrecognize_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">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2014"><a href="#Generator-2014"><span class="linenos">2014</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2015"><a href="#Generator-2015"><span class="linenos">2015</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator-2016"><a href="#Generator-2016"><span class="linenos">2016</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;measures&quot;</span><span class="p">)</span>
+</span><span id="Generator-2017"><a href="#Generator-2017"><span class="linenos">2017</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;MEASURES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">measures</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">measures</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2018"><a href="#Generator-2018"><span class="linenos">2018</span></a> <span class="n">rows</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;rows&quot;</span><span class="p">)</span>
+</span><span id="Generator-2019"><a href="#Generator-2019"><span class="linenos">2019</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2020"><a href="#Generator-2020"><span class="linenos">2020</span></a> <span class="n">after</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;after&quot;</span><span class="p">)</span>
+</span><span id="Generator-2021"><a href="#Generator-2021"><span class="linenos">2021</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">after</span><span class="p">)</span> <span class="k">if</span> <span class="n">after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2022"><a href="#Generator-2022"><span class="linenos">2022</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
+</span><span id="Generator-2023"><a href="#Generator-2023"><span class="linenos">2023</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;PATTERN (</span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2024"><a href="#Generator-2024"><span class="linenos">2024</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator-2025"><a href="#Generator-2025"><span class="linenos">2025</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">definition</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="Generator-2026"><a href="#Generator-2026"><span class="linenos">2026</span></a> <span class="k">for</span> <span class="n">definition</span> <span class="ow">in</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;define&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Generator-2027"><a href="#Generator-2027"><span class="linenos">2027</span></a> <span class="p">]</span>
+</span><span id="Generator-2028"><a href="#Generator-2028"><span class="linenos">2028</span></a> <span class="n">definitions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">sqls</span><span class="o">=</span><span class="n">definition_sqls</span><span class="p">)</span>
+</span><span id="Generator-2029"><a href="#Generator-2029"><span class="linenos">2029</span></a> <span class="n">define</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;DEFINE</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">definitions</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">definitions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2030"><a href="#Generator-2030"><span class="linenos">2030</span></a> <span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-2031"><a href="#Generator-2031"><span class="linenos">2031</span></a> <span class="p">(</span>
+</span><span id="Generator-2032"><a href="#Generator-2032"><span class="linenos">2032</span></a> <span class="n">partition</span><span class="p">,</span>
+</span><span id="Generator-2033"><a href="#Generator-2033"><span class="linenos">2033</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="Generator-2034"><a href="#Generator-2034"><span class="linenos">2034</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="Generator-2035"><a href="#Generator-2035"><span class="linenos">2035</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="Generator-2036"><a href="#Generator-2036"><span class="linenos">2036</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="Generator-2037"><a href="#Generator-2037"><span class="linenos">2037</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="Generator-2038"><a href="#Generator-2038"><span class="linenos">2038</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="Generator-2039"><a href="#Generator-2039"><span class="linenos">2039</span></a> <span class="p">)</span>
+</span><span id="Generator-2040"><a href="#Generator-2040"><span class="linenos">2040</span></a> <span class="p">)</span>
+</span><span id="Generator-2041"><a href="#Generator-2041"><span class="linenos">2041</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-2042"><a href="#Generator-2042"><span class="linenos">2042</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2043"><a href="#Generator-2043"><span class="linenos">2043</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;MATCH_RECOGNIZE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">body</span><span class="p">)</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2044"><a href="#Generator-2044"><span class="linenos">2044</span></a>
+</span><span id="Generator-2045"><a href="#Generator-2045"><span class="linenos">2045</span></a> <span class="k">def</span> <span class="nf">query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="o">*</span><span class="n">sqls</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2046"><a href="#Generator-2046"><span class="linenos">2046</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator-2047"><a href="#Generator-2047"><span class="linenos">2047</span></a>
+</span><span id="Generator-2048"><a href="#Generator-2048"><span class="linenos">2048</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
+</span><span id="Generator-2049"><a href="#Generator-2049"><span class="linenos">2049</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
</span><span id="Generator-2050"><a href="#Generator-2050"><span class="linenos">2050</span></a>
-</span><span id="Generator-2051"><a href="#Generator-2051"><span class="linenos">2051</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-2052"><a href="#Generator-2052"><span class="linenos">2052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
-</span><span id="Generator-2053"><a href="#Generator-2053"><span class="linenos">2053</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
-</span><span id="Generator-2054"><a href="#Generator-2054"><span class="linenos">2054</span></a> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Generator-2055"><a href="#Generator-2055"><span class="linenos">2055</span></a> <span class="p">)</span>
-</span><span id="Generator-2056"><a href="#Generator-2056"><span class="linenos">2056</span></a>
-</span><span id="Generator-2057"><a href="#Generator-2057"><span class="linenos">2057</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator-2058"><a href="#Generator-2058"><span class="linenos">2058</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="Generator-2059"><a href="#Generator-2059"><span class="linenos">2059</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator-2060"><a href="#Generator-2060"><span class="linenos">2060</span></a> <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;connect&quot;</span><span class="p">),</span>
-</span><span id="Generator-2061"><a href="#Generator-2061"><span class="linenos">2061</span></a> <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;match&quot;</span><span class="p">),</span>
-</span><span id="Generator-2062"><a href="#Generator-2062"><span class="linenos">2062</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</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;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator-2063"><a href="#Generator-2063"><span class="linenos">2063</span></a> <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;where&quot;</span><span class="p">),</span>
-</span><span id="Generator-2064"><a href="#Generator-2064"><span class="linenos">2064</span></a> <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;group&quot;</span><span class="p">),</span>
-</span><span id="Generator-2065"><a href="#Generator-2065"><span class="linenos">2065</span></a> <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;having&quot;</span><span class="p">),</span>
-</span><span id="Generator-2066"><a href="#Generator-2066"><span class="linenos">2066</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator-2067"><a href="#Generator-2067"><span class="linenos">2067</span></a> <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;order&quot;</span><span class="p">),</span>
-</span><span id="Generator-2068"><a href="#Generator-2068"><span class="linenos">2068</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
-</span><span id="Generator-2069"><a href="#Generator-2069"><span class="linenos">2069</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator-2070"><a href="#Generator-2070"><span class="linenos">2070</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-2071"><a href="#Generator-2071"><span class="linenos">2071</span></a> <span class="p">)</span>
-</span><span id="Generator-2072"><a href="#Generator-2072"><span class="linenos">2072</span></a>
-</span><span id="Generator-2073"><a href="#Generator-2073"><span class="linenos">2073</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Generator-2074"><a href="#Generator-2074"><span class="linenos">2074</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Generator-2075"><a href="#Generator-2075"><span class="linenos">2075</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator-2076"><a href="#Generator-2076"><span class="linenos">2076</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator-2077"><a href="#Generator-2077"><span class="linenos">2077</span></a> <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;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Generator-2078"><a href="#Generator-2078"><span class="linenos">2078</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Generator-2079"><a href="#Generator-2079"><span class="linenos">2079</span></a> <span class="p">]</span>
-</span><span id="Generator-2080"><a href="#Generator-2080"><span class="linenos">2080</span></a>
-</span><span id="Generator-2081"><a href="#Generator-2081"><span class="linenos">2081</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator-2082"><a href="#Generator-2082"><span class="linenos">2082</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator-2083"><a href="#Generator-2083"><span class="linenos">2083</span></a> <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;qualify&quot;</span><span class="p">),</span>
-</span><span id="Generator-2084"><a href="#Generator-2084"><span class="linenos">2084</span></a> <span class="p">(</span>
-</span><span id="Generator-2085"><a href="#Generator-2085"><span class="linenos">2085</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2086"><a href="#Generator-2086"><span class="linenos">2086</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
-</span><span id="Generator-2087"><a href="#Generator-2087"><span class="linenos">2087</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2088"><a href="#Generator-2088"><span class="linenos">2088</span></a> <span class="p">),</span>
-</span><span id="Generator-2089"><a href="#Generator-2089"><span class="linenos">2089</span></a> <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;distribute&quot;</span><span class="p">),</span>
-</span><span id="Generator-2090"><a href="#Generator-2090"><span class="linenos">2090</span></a> <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;sort&quot;</span><span class="p">),</span>
-</span><span id="Generator-2091"><a href="#Generator-2091"><span class="linenos">2091</span></a> <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;cluster&quot;</span><span class="p">),</span>
-</span><span id="Generator-2092"><a href="#Generator-2092"><span class="linenos">2092</span></a> <span class="p">]</span>
-</span><span id="Generator-2093"><a href="#Generator-2093"><span class="linenos">2093</span></a>
-</span><span id="Generator-2094"><a href="#Generator-2094"><span class="linenos">2094</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator-2095"><a href="#Generator-2095"><span class="linenos">2095</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-2096"><a href="#Generator-2096"><span class="linenos">2096</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2097"><a href="#Generator-2097"><span class="linenos">2097</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
-</span><span id="Generator-2098"><a href="#Generator-2098"><span class="linenos">2098</span></a>
-</span><span id="Generator-2099"><a href="#Generator-2099"><span class="linenos">2099</span></a> <span class="k">def</span> <span class="nf">select_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">Select</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2100"><a href="#Generator-2100"><span class="linenos">2100</span></a> <span class="n">into</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;into&quot;</span><span class="p">)</span>
-</span><span id="Generator-2101"><a href="#Generator-2101"><span class="linenos">2101</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="Generator-2102"><a href="#Generator-2102"><span class="linenos">2102</span></a> <span class="n">into</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="Generator-2103"><a href="#Generator-2103"><span class="linenos">2103</span></a>
-</span><span id="Generator-2104"><a href="#Generator-2104"><span class="linenos">2104</span></a> <span class="n">hint</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;hint&quot;</span><span class="p">)</span>
-</span><span id="Generator-2105"><a href="#Generator-2105"><span class="linenos">2105</span></a> <span class="n">distinct</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;distinct&quot;</span><span class="p">)</span>
-</span><span id="Generator-2106"><a href="#Generator-2106"><span class="linenos">2106</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2107"><a href="#Generator-2107"><span class="linenos">2107</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-2108"><a href="#Generator-2108"><span class="linenos">2108</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator-2109"><a href="#Generator-2109"><span class="linenos">2109</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-2110"><a href="#Generator-2110"><span class="linenos">2110</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2111"><a href="#Generator-2111"><span class="linenos">2111</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="Generator-2112"><a href="#Generator-2112"><span class="linenos">2112</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2113"><a href="#Generator-2113"><span class="linenos">2113</span></a> <span class="p">)</span>
-</span><span id="Generator-2114"><a href="#Generator-2114"><span class="linenos">2114</span></a>
-</span><span id="Generator-2115"><a href="#Generator-2115"><span class="linenos">2115</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2116"><a href="#Generator-2116"><span class="linenos">2116</span></a>
-</span><span id="Generator-2117"><a href="#Generator-2117"><span class="linenos">2117</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator-2118"><a href="#Generator-2118"><span class="linenos">2118</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
-</span><span id="Generator-2119"><a href="#Generator-2119"><span class="linenos">2119</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2120"><a href="#Generator-2120"><span class="linenos">2120</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2121"><a href="#Generator-2121"><span class="linenos">2121</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
-</span><span id="Generator-2122"><a href="#Generator-2122"><span class="linenos">2122</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="Generator-2123"><a href="#Generator-2123"><span class="linenos">2123</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator-2124"><a href="#Generator-2124"><span class="linenos">2124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-2125"><a href="#Generator-2125"><span class="linenos">2125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
-</span><span id="Generator-2126"><a href="#Generator-2126"><span class="linenos">2126</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator-2127"><a href="#Generator-2127"><span class="linenos">2127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
-</span><span id="Generator-2128"><a href="#Generator-2128"><span class="linenos">2128</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="Generator-2129"><a href="#Generator-2129"><span class="linenos">2129</span></a> <span class="p">)</span>
-</span><span id="Generator-2130"><a href="#Generator-2130"><span class="linenos">2130</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator-2131"><a href="#Generator-2131"><span class="linenos">2131</span></a> <span class="p">]</span>
-</span><span id="Generator-2132"><a href="#Generator-2132"><span class="linenos">2132</span></a> <span class="p">)</span>
-</span><span id="Generator-2133"><a href="#Generator-2133"><span class="linenos">2133</span></a> <span class="p">)</span>
-</span><span id="Generator-2134"><a href="#Generator-2134"><span class="linenos">2134</span></a> <span class="p">]</span>
-</span><span id="Generator-2135"><a href="#Generator-2135"><span class="linenos">2135</span></a> <span class="p">)</span>
-</span><span id="Generator-2136"><a href="#Generator-2136"><span class="linenos">2136</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2137"><a href="#Generator-2137"><span class="linenos">2137</span></a>
-</span><span id="Generator-2138"><a href="#Generator-2138"><span class="linenos">2138</span></a> <span class="c1"># We use LIMIT_IS_TOP as a proxy for whether DISTINCT should go first because tsql and Teradata</span>
-</span><span id="Generator-2139"><a href="#Generator-2139"><span class="linenos">2139</span></a> <span class="c1"># are the only dialects that use LIMIT_IS_TOP and both place DISTINCT first.</span>
-</span><span id="Generator-2140"><a href="#Generator-2140"><span class="linenos">2140</span></a> <span class="n">top_distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">top</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2141"><a href="#Generator-2141"><span class="linenos">2141</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="Generator-2142"><a href="#Generator-2142"><span class="linenos">2142</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
-</span><span id="Generator-2143"><a href="#Generator-2143"><span class="linenos">2143</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-2144"><a href="#Generator-2144"><span class="linenos">2144</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top_distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator-2145"><a href="#Generator-2145"><span class="linenos">2145</span></a> <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;into&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Generator-2146"><a href="#Generator-2146"><span class="linenos">2146</span></a> <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;from&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Generator-2147"><a href="#Generator-2147"><span class="linenos">2147</span></a> <span class="p">)</span>
-</span><span id="Generator-2148"><a href="#Generator-2148"><span class="linenos">2148</span></a>
-</span><span id="Generator-2149"><a href="#Generator-2149"><span class="linenos">2149</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator-2150"><a href="#Generator-2150"><span class="linenos">2150</span></a>
-</span><span id="Generator-2151"><a href="#Generator-2151"><span class="linenos">2151</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="Generator-2152"><a href="#Generator-2152"><span class="linenos">2152</span></a> <span class="k">if</span> <span class="n">into</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;temporary&quot;</span><span class="p">):</span>
-</span><span id="Generator-2153"><a href="#Generator-2153"><span class="linenos">2153</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span>
-</span><span id="Generator-2154"><a href="#Generator-2154"><span class="linenos">2154</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="ow">and</span> <span class="n">into</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;unlogged&quot;</span><span class="p">):</span>
-</span><span id="Generator-2155"><a href="#Generator-2155"><span class="linenos">2155</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span>
-</span><span id="Generator-2156"><a href="#Generator-2156"><span class="linenos">2156</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2157"><a href="#Generator-2157"><span class="linenos">2157</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2158"><a href="#Generator-2158"><span class="linenos">2158</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">table_kind</span><span class="si">}</span><span class="s2"> 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">into</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2159"><a href="#Generator-2159"><span class="linenos">2159</span></a>
-</span><span id="Generator-2160"><a href="#Generator-2160"><span class="linenos">2160</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator-2161"><a href="#Generator-2161"><span class="linenos">2161</span></a>
-</span><span id="Generator-2162"><a href="#Generator-2162"><span class="linenos">2162</span></a> <span class="k">def</span> <span class="nf">schema_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2163"><a href="#Generator-2163"><span class="linenos">2163</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2164"><a href="#Generator-2164"><span class="linenos">2164</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2165"><a href="#Generator-2165"><span class="linenos">2165</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">sql</span> <span class="k">else</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">sql</span>
+</span><span id="Generator-2051"><a href="#Generator-2051"><span class="linenos">2051</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;LIMIT&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">):</span>
+</span><span id="Generator-2052"><a href="#Generator-2052"><span class="linenos">2052</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">maybe_copy</span><span class="p">(</span><span class="n">limit</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;count&quot;</span><span class="p">)))</span>
+</span><span id="Generator-2053"><a href="#Generator-2053"><span class="linenos">2053</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;FETCH&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">):</span>
+</span><span id="Generator-2054"><a href="#Generator-2054"><span class="linenos">2054</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Generator-2055"><a href="#Generator-2055"><span class="linenos">2055</span></a>
+</span><span id="Generator-2056"><a href="#Generator-2056"><span class="linenos">2056</span></a> <span class="n">fetch</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span>
+</span><span id="Generator-2057"><a href="#Generator-2057"><span class="linenos">2057</span></a>
+</span><span id="Generator-2058"><a href="#Generator-2058"><span class="linenos">2058</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-2059"><a href="#Generator-2059"><span class="linenos">2059</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
+</span><span id="Generator-2060"><a href="#Generator-2060"><span class="linenos">2060</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
+</span><span id="Generator-2061"><a href="#Generator-2061"><span class="linenos">2061</span></a> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="Generator-2062"><a href="#Generator-2062"><span class="linenos">2062</span></a> <span class="p">)</span>
+</span><span id="Generator-2063"><a href="#Generator-2063"><span class="linenos">2063</span></a>
+</span><span id="Generator-2064"><a href="#Generator-2064"><span class="linenos">2064</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator-2065"><a href="#Generator-2065"><span class="linenos">2065</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="Generator-2066"><a href="#Generator-2066"><span class="linenos">2066</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator-2067"><a href="#Generator-2067"><span class="linenos">2067</span></a> <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;connect&quot;</span><span class="p">),</span>
+</span><span id="Generator-2068"><a href="#Generator-2068"><span class="linenos">2068</span></a> <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;match&quot;</span><span class="p">),</span>
+</span><span id="Generator-2069"><a href="#Generator-2069"><span class="linenos">2069</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</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;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator-2070"><a href="#Generator-2070"><span class="linenos">2070</span></a> <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;where&quot;</span><span class="p">),</span>
+</span><span id="Generator-2071"><a href="#Generator-2071"><span class="linenos">2071</span></a> <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;group&quot;</span><span class="p">),</span>
+</span><span id="Generator-2072"><a href="#Generator-2072"><span class="linenos">2072</span></a> <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;having&quot;</span><span class="p">),</span>
+</span><span id="Generator-2073"><a href="#Generator-2073"><span class="linenos">2073</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator-2074"><a href="#Generator-2074"><span class="linenos">2074</span></a> <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;order&quot;</span><span class="p">),</span>
+</span><span id="Generator-2075"><a href="#Generator-2075"><span class="linenos">2075</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
+</span><span id="Generator-2076"><a href="#Generator-2076"><span class="linenos">2076</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator-2077"><a href="#Generator-2077"><span class="linenos">2077</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-2078"><a href="#Generator-2078"><span class="linenos">2078</span></a> <span class="p">)</span>
+</span><span id="Generator-2079"><a href="#Generator-2079"><span class="linenos">2079</span></a>
+</span><span id="Generator-2080"><a href="#Generator-2080"><span class="linenos">2080</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Generator-2081"><a href="#Generator-2081"><span class="linenos">2081</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Generator-2082"><a href="#Generator-2082"><span class="linenos">2082</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator-2083"><a href="#Generator-2083"><span class="linenos">2083</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator-2084"><a href="#Generator-2084"><span class="linenos">2084</span></a> <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;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Generator-2085"><a href="#Generator-2085"><span class="linenos">2085</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Generator-2086"><a href="#Generator-2086"><span class="linenos">2086</span></a> <span class="p">]</span>
+</span><span id="Generator-2087"><a href="#Generator-2087"><span class="linenos">2087</span></a>
+</span><span id="Generator-2088"><a href="#Generator-2088"><span class="linenos">2088</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator-2089"><a href="#Generator-2089"><span class="linenos">2089</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator-2090"><a href="#Generator-2090"><span class="linenos">2090</span></a> <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;qualify&quot;</span><span class="p">),</span>
+</span><span id="Generator-2091"><a href="#Generator-2091"><span class="linenos">2091</span></a> <span class="p">(</span>
+</span><span id="Generator-2092"><a href="#Generator-2092"><span class="linenos">2092</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2093"><a href="#Generator-2093"><span class="linenos">2093</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
+</span><span id="Generator-2094"><a href="#Generator-2094"><span class="linenos">2094</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2095"><a href="#Generator-2095"><span class="linenos">2095</span></a> <span class="p">),</span>
+</span><span id="Generator-2096"><a href="#Generator-2096"><span class="linenos">2096</span></a> <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;distribute&quot;</span><span class="p">),</span>
+</span><span id="Generator-2097"><a href="#Generator-2097"><span class="linenos">2097</span></a> <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;sort&quot;</span><span class="p">),</span>
+</span><span id="Generator-2098"><a href="#Generator-2098"><span class="linenos">2098</span></a> <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;cluster&quot;</span><span class="p">),</span>
+</span><span id="Generator-2099"><a href="#Generator-2099"><span class="linenos">2099</span></a> <span class="p">]</span>
+</span><span id="Generator-2100"><a href="#Generator-2100"><span class="linenos">2100</span></a>
+</span><span id="Generator-2101"><a href="#Generator-2101"><span class="linenos">2101</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator-2102"><a href="#Generator-2102"><span class="linenos">2102</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2103"><a href="#Generator-2103"><span class="linenos">2103</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2104"><a href="#Generator-2104"><span class="linenos">2104</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
+</span><span id="Generator-2105"><a href="#Generator-2105"><span class="linenos">2105</span></a>
+</span><span id="Generator-2106"><a href="#Generator-2106"><span class="linenos">2106</span></a> <span class="k">def</span> <span class="nf">select_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">Select</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2107"><a href="#Generator-2107"><span class="linenos">2107</span></a> <span class="n">into</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;into&quot;</span><span class="p">)</span>
+</span><span id="Generator-2108"><a href="#Generator-2108"><span class="linenos">2108</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="Generator-2109"><a href="#Generator-2109"><span class="linenos">2109</span></a> <span class="n">into</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="Generator-2110"><a href="#Generator-2110"><span class="linenos">2110</span></a>
+</span><span id="Generator-2111"><a href="#Generator-2111"><span class="linenos">2111</span></a> <span class="n">hint</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;hint&quot;</span><span class="p">)</span>
+</span><span id="Generator-2112"><a href="#Generator-2112"><span class="linenos">2112</span></a> <span class="n">distinct</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;distinct&quot;</span><span class="p">)</span>
+</span><span id="Generator-2113"><a href="#Generator-2113"><span class="linenos">2113</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2114"><a href="#Generator-2114"><span class="linenos">2114</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-2115"><a href="#Generator-2115"><span class="linenos">2115</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator-2116"><a href="#Generator-2116"><span class="linenos">2116</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-2117"><a href="#Generator-2117"><span class="linenos">2117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2118"><a href="#Generator-2118"><span class="linenos">2118</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="Generator-2119"><a href="#Generator-2119"><span class="linenos">2119</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2120"><a href="#Generator-2120"><span class="linenos">2120</span></a> <span class="p">)</span>
+</span><span id="Generator-2121"><a href="#Generator-2121"><span class="linenos">2121</span></a>
+</span><span id="Generator-2122"><a href="#Generator-2122"><span class="linenos">2122</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2123"><a href="#Generator-2123"><span class="linenos">2123</span></a>
+</span><span id="Generator-2124"><a href="#Generator-2124"><span class="linenos">2124</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator-2125"><a href="#Generator-2125"><span class="linenos">2125</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
+</span><span id="Generator-2126"><a href="#Generator-2126"><span class="linenos">2126</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2127"><a href="#Generator-2127"><span class="linenos">2127</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2128"><a href="#Generator-2128"><span class="linenos">2128</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
+</span><span id="Generator-2129"><a href="#Generator-2129"><span class="linenos">2129</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
+</span><span id="Generator-2130"><a href="#Generator-2130"><span class="linenos">2130</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator-2131"><a href="#Generator-2131"><span class="linenos">2131</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-2132"><a href="#Generator-2132"><span class="linenos">2132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="Generator-2133"><a href="#Generator-2133"><span class="linenos">2133</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator-2134"><a href="#Generator-2134"><span class="linenos">2134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
+</span><span id="Generator-2135"><a href="#Generator-2135"><span class="linenos">2135</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="Generator-2136"><a href="#Generator-2136"><span class="linenos">2136</span></a> <span class="p">)</span>
+</span><span id="Generator-2137"><a href="#Generator-2137"><span class="linenos">2137</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator-2138"><a href="#Generator-2138"><span class="linenos">2138</span></a> <span class="p">]</span>
+</span><span id="Generator-2139"><a href="#Generator-2139"><span class="linenos">2139</span></a> <span class="p">)</span>
+</span><span id="Generator-2140"><a href="#Generator-2140"><span class="linenos">2140</span></a> <span class="p">)</span>
+</span><span id="Generator-2141"><a href="#Generator-2141"><span class="linenos">2141</span></a> <span class="p">]</span>
+</span><span id="Generator-2142"><a href="#Generator-2142"><span class="linenos">2142</span></a> <span class="p">)</span>
+</span><span id="Generator-2143"><a href="#Generator-2143"><span class="linenos">2143</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2144"><a href="#Generator-2144"><span class="linenos">2144</span></a>
+</span><span id="Generator-2145"><a href="#Generator-2145"><span class="linenos">2145</span></a> <span class="c1"># We use LIMIT_IS_TOP as a proxy for whether DISTINCT should go first because tsql and Teradata</span>
+</span><span id="Generator-2146"><a href="#Generator-2146"><span class="linenos">2146</span></a> <span class="c1"># are the only dialects that use LIMIT_IS_TOP and both place DISTINCT first.</span>
+</span><span id="Generator-2147"><a href="#Generator-2147"><span class="linenos">2147</span></a> <span class="n">top_distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">top</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2148"><a href="#Generator-2148"><span class="linenos">2148</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="Generator-2149"><a href="#Generator-2149"><span class="linenos">2149</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
+</span><span id="Generator-2150"><a href="#Generator-2150"><span class="linenos">2150</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-2151"><a href="#Generator-2151"><span class="linenos">2151</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top_distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator-2152"><a href="#Generator-2152"><span class="linenos">2152</span></a> <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;into&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator-2153"><a href="#Generator-2153"><span class="linenos">2153</span></a> <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;from&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator-2154"><a href="#Generator-2154"><span class="linenos">2154</span></a> <span class="p">)</span>
+</span><span id="Generator-2155"><a href="#Generator-2155"><span class="linenos">2155</span></a>
+</span><span id="Generator-2156"><a href="#Generator-2156"><span class="linenos">2156</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-2157"><a href="#Generator-2157"><span class="linenos">2157</span></a>
+</span><span id="Generator-2158"><a href="#Generator-2158"><span class="linenos">2158</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="Generator-2159"><a href="#Generator-2159"><span class="linenos">2159</span></a> <span class="k">if</span> <span class="n">into</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;temporary&quot;</span><span class="p">):</span>
+</span><span id="Generator-2160"><a href="#Generator-2160"><span class="linenos">2160</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span>
+</span><span id="Generator-2161"><a href="#Generator-2161"><span class="linenos">2161</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="ow">and</span> <span class="n">into</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;unlogged&quot;</span><span class="p">):</span>
+</span><span id="Generator-2162"><a href="#Generator-2162"><span class="linenos">2162</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span>
+</span><span id="Generator-2163"><a href="#Generator-2163"><span class="linenos">2163</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2164"><a href="#Generator-2164"><span class="linenos">2164</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2165"><a href="#Generator-2165"><span class="linenos">2165</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">table_kind</span><span class="si">}</span><span class="s2"> 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">into</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2166"><a href="#Generator-2166"><span class="linenos">2166</span></a>
-</span><span id="Generator-2167"><a href="#Generator-2167"><span class="linenos">2167</span></a> <span class="k">def</span> <span class="nf">schema_columns_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2168"><a href="#Generator-2168"><span class="linenos">2168</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-2169"><a href="#Generator-2169"><span class="linenos">2169</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2170"><a href="#Generator-2170"><span class="linenos">2170</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2171"><a href="#Generator-2171"><span class="linenos">2171</span></a>
-</span><span id="Generator-2172"><a href="#Generator-2172"><span class="linenos">2172</span></a> <span class="k">def</span> <span class="nf">star_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">Star</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2173"><a href="#Generator-2173"><span class="linenos">2173</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;except&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2174"><a href="#Generator-2174"><span class="linenos">2174</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;except&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">except_</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">except_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2175"><a href="#Generator-2175"><span class="linenos">2175</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2176"><a href="#Generator-2176"><span class="linenos">2176</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;replace&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">replace</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2177"><a href="#Generator-2177"><span class="linenos">2177</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;*</span><span class="si">{</span><span class="n">except_</span><span class="si">}{</span><span class="n">replace</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2167"><a href="#Generator-2167"><span class="linenos">2167</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-2168"><a href="#Generator-2168"><span class="linenos">2168</span></a>
+</span><span id="Generator-2169"><a href="#Generator-2169"><span class="linenos">2169</span></a> <span class="k">def</span> <span class="nf">schema_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2170"><a href="#Generator-2170"><span class="linenos">2170</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2171"><a href="#Generator-2171"><span class="linenos">2171</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2172"><a href="#Generator-2172"><span class="linenos">2172</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">sql</span> <span class="k">else</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">sql</span>
+</span><span id="Generator-2173"><a href="#Generator-2173"><span class="linenos">2173</span></a>
+</span><span id="Generator-2174"><a href="#Generator-2174"><span class="linenos">2174</span></a> <span class="k">def</span> <span class="nf">schema_columns_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2175"><a href="#Generator-2175"><span class="linenos">2175</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-2176"><a href="#Generator-2176"><span class="linenos">2176</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2177"><a href="#Generator-2177"><span class="linenos">2177</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-2178"><a href="#Generator-2178"><span class="linenos">2178</span></a>
-</span><span id="Generator-2179"><a href="#Generator-2179"><span class="linenos">2179</span></a> <span class="k">def</span> <span class="nf">parameter_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">Parameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2180"><a href="#Generator-2180"><span class="linenos">2180</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2181"><a href="#Generator-2181"><span class="linenos">2181</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">PARAMETER_TOKEN</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2182"><a href="#Generator-2182"><span class="linenos">2182</span></a>
-</span><span id="Generator-2183"><a href="#Generator-2183"><span class="linenos">2183</span></a> <span class="k">def</span> <span class="nf">sessionparameter_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">SessionParameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2184"><a href="#Generator-2184"><span class="linenos">2184</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2185"><a href="#Generator-2185"><span class="linenos">2185</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-2186"><a href="#Generator-2186"><span class="linenos">2186</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator-2187"><a href="#Generator-2187"><span class="linenos">2187</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="Generator-2188"><a href="#Generator-2188"><span class="linenos">2188</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;@@</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2179"><a href="#Generator-2179"><span class="linenos">2179</span></a> <span class="k">def</span> <span class="nf">star_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">Star</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2180"><a href="#Generator-2180"><span class="linenos">2180</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;except&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2181"><a href="#Generator-2181"><span class="linenos">2181</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;except&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">except_</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">except_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2182"><a href="#Generator-2182"><span class="linenos">2182</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2183"><a href="#Generator-2183"><span class="linenos">2183</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;replace&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">replace</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2184"><a href="#Generator-2184"><span class="linenos">2184</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;*</span><span class="si">{</span><span class="n">except_</span><span class="si">}{</span><span class="n">replace</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2185"><a href="#Generator-2185"><span class="linenos">2185</span></a>
+</span><span id="Generator-2186"><a href="#Generator-2186"><span class="linenos">2186</span></a> <span class="k">def</span> <span class="nf">parameter_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">Parameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2187"><a href="#Generator-2187"><span class="linenos">2187</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2188"><a href="#Generator-2188"><span class="linenos">2188</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">PARAMETER_TOKEN</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2189"><a href="#Generator-2189"><span class="linenos">2189</span></a>
-</span><span id="Generator-2190"><a href="#Generator-2190"><span class="linenos">2190</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2191"><a href="#Generator-2191"><span class="linenos">2191</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;:</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
-</span><span id="Generator-2192"><a href="#Generator-2192"><span class="linenos">2192</span></a>
-</span><span id="Generator-2193"><a href="#Generator-2193"><span class="linenos">2193</span></a> <span class="k">def</span> <span class="nf">subquery_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">Subquery</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2194"><a href="#Generator-2194"><span class="linenos">2194</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-2195"><a href="#Generator-2195"><span class="linenos">2195</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2190"><a href="#Generator-2190"><span class="linenos">2190</span></a> <span class="k">def</span> <span class="nf">sessionparameter_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">SessionParameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2191"><a href="#Generator-2191"><span class="linenos">2191</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2192"><a href="#Generator-2192"><span class="linenos">2192</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-2193"><a href="#Generator-2193"><span class="linenos">2193</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator-2194"><a href="#Generator-2194"><span class="linenos">2194</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="Generator-2195"><a href="#Generator-2195"><span class="linenos">2195</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;@@</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2196"><a href="#Generator-2196"><span class="linenos">2196</span></a>
-</span><span id="Generator-2197"><a href="#Generator-2197"><span class="linenos">2197</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2198"><a href="#Generator-2198"><span class="linenos">2198</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2197"><a href="#Generator-2197"><span class="linenos">2197</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2198"><a href="#Generator-2198"><span class="linenos">2198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;:</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
</span><span id="Generator-2199"><a href="#Generator-2199"><span class="linenos">2199</span></a>
-</span><span id="Generator-2200"><a href="#Generator-2200"><span class="linenos">2200</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
-</span><span id="Generator-2201"><a href="#Generator-2201"><span class="linenos">2201</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator-2202"><a href="#Generator-2202"><span class="linenos">2202</span></a>
-</span><span id="Generator-2203"><a href="#Generator-2203"><span class="linenos">2203</span></a> <span class="k">def</span> <span class="nf">qualify_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">Qualify</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2204"><a href="#Generator-2204"><span class="linenos">2204</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="Generator-2205"><a href="#Generator-2205"><span class="linenos">2205</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;QUALIFY&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2200"><a href="#Generator-2200"><span class="linenos">2200</span></a> <span class="k">def</span> <span class="nf">subquery_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">Subquery</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2201"><a href="#Generator-2201"><span class="linenos">2201</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-2202"><a href="#Generator-2202"><span class="linenos">2202</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2203"><a href="#Generator-2203"><span class="linenos">2203</span></a>
+</span><span id="Generator-2204"><a href="#Generator-2204"><span class="linenos">2204</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2205"><a href="#Generator-2205"><span class="linenos">2205</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-2206"><a href="#Generator-2206"><span class="linenos">2206</span></a>
-</span><span id="Generator-2207"><a href="#Generator-2207"><span class="linenos">2207</span></a> <span class="k">def</span> <span class="nf">union_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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2208"><a href="#Generator-2208"><span class="linenos">2208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator-2209"><a href="#Generator-2209"><span class="linenos">2209</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-2210"><a href="#Generator-2210"><span class="linenos">2210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator-2211"><a href="#Generator-2211"><span class="linenos">2211</span></a> <span class="p">)</span>
-</span><span id="Generator-2212"><a href="#Generator-2212"><span class="linenos">2212</span></a>
-</span><span id="Generator-2213"><a href="#Generator-2213"><span class="linenos">2213</span></a> <span class="k">def</span> <span class="nf">union_op</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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2214"><a href="#Generator-2214"><span class="linenos">2214</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot; DISTINCT&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPLICIT_UNION</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2215"><a href="#Generator-2215"><span class="linenos">2215</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; ALL&quot;</span>
-</span><span id="Generator-2216"><a href="#Generator-2216"><span class="linenos">2216</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2217"><a href="#Generator-2217"><span class="linenos">2217</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2218"><a href="#Generator-2218"><span class="linenos">2218</span></a>
-</span><span id="Generator-2219"><a href="#Generator-2219"><span class="linenos">2219</span></a> <span class="k">def</span> <span class="nf">unnest_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">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2220"><a href="#Generator-2220"><span class="linenos">2220</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2221"><a href="#Generator-2221"><span class="linenos">2221</span></a>
-</span><span id="Generator-2222"><a href="#Generator-2222"><span class="linenos">2222</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-2223"><a href="#Generator-2223"><span class="linenos">2223</span></a> <span class="n">offset</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;offset&quot;</span><span class="p">)</span>
-</span><span id="Generator-2224"><a href="#Generator-2224"><span class="linenos">2224</span></a>
-</span><span id="Generator-2225"><a href="#Generator-2225"><span class="linenos">2225</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
-</span><span id="Generator-2226"><a href="#Generator-2226"><span class="linenos">2226</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator-2227"><a href="#Generator-2227"><span class="linenos">2227</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="Generator-2207"><a href="#Generator-2207"><span class="linenos">2207</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
+</span><span id="Generator-2208"><a href="#Generator-2208"><span class="linenos">2208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-2209"><a href="#Generator-2209"><span class="linenos">2209</span></a>
+</span><span id="Generator-2210"><a href="#Generator-2210"><span class="linenos">2210</span></a> <span class="k">def</span> <span class="nf">qualify_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">Qualify</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2211"><a href="#Generator-2211"><span class="linenos">2211</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="Generator-2212"><a href="#Generator-2212"><span class="linenos">2212</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;QUALIFY&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2213"><a href="#Generator-2213"><span class="linenos">2213</span></a>
+</span><span id="Generator-2214"><a href="#Generator-2214"><span class="linenos">2214</span></a> <span class="k">def</span> <span class="nf">union_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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2215"><a href="#Generator-2215"><span class="linenos">2215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator-2216"><a href="#Generator-2216"><span class="linenos">2216</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-2217"><a href="#Generator-2217"><span class="linenos">2217</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator-2218"><a href="#Generator-2218"><span class="linenos">2218</span></a> <span class="p">)</span>
+</span><span id="Generator-2219"><a href="#Generator-2219"><span class="linenos">2219</span></a>
+</span><span id="Generator-2220"><a href="#Generator-2220"><span class="linenos">2220</span></a> <span class="k">def</span> <span class="nf">union_op</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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2221"><a href="#Generator-2221"><span class="linenos">2221</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot; DISTINCT&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPLICIT_UNION</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2222"><a href="#Generator-2222"><span class="linenos">2222</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; ALL&quot;</span>
+</span><span id="Generator-2223"><a href="#Generator-2223"><span class="linenos">2223</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2224"><a href="#Generator-2224"><span class="linenos">2224</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2225"><a href="#Generator-2225"><span class="linenos">2225</span></a>
+</span><span id="Generator-2226"><a href="#Generator-2226"><span class="linenos">2226</span></a> <span class="k">def</span> <span class="nf">unnest_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">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2227"><a href="#Generator-2227"><span class="linenos">2227</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Generator-2228"><a href="#Generator-2228"><span class="linenos">2228</span></a>
-</span><span id="Generator-2229"><a href="#Generator-2229"><span class="linenos">2229</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="Generator-2230"><a href="#Generator-2230"><span class="linenos">2230</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="Generator-2231"><a href="#Generator-2231"><span class="linenos">2231</span></a> <span class="n">alias</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">columns</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2232"><a href="#Generator-2232"><span class="linenos">2232</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2233"><a href="#Generator-2233"><span class="linenos">2233</span></a> <span class="n">alias</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">alias</span><span class="p">)</span>
-</span><span id="Generator-2234"><a href="#Generator-2234"><span class="linenos">2234</span></a>
-</span><span id="Generator-2235"><a href="#Generator-2235"><span class="linenos">2235</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">alias</span>
-</span><span id="Generator-2236"><a href="#Generator-2236"><span class="linenos">2236</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
-</span><span id="Generator-2237"><a href="#Generator-2237"><span class="linenos">2237</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="n">alias</span>
-</span><span id="Generator-2238"><a href="#Generator-2238"><span class="linenos">2238</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2239"><a href="#Generator-2239"><span class="linenos">2239</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator-2240"><a href="#Generator-2240"><span class="linenos">2240</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET AS </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">offset</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2241"><a href="#Generator-2241"><span class="linenos">2241</span></a> <span class="k">elif</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="Generator-2242"><a href="#Generator-2242"><span class="linenos">2242</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET&quot;</span>
-</span><span id="Generator-2243"><a href="#Generator-2243"><span class="linenos">2243</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2244"><a href="#Generator-2244"><span class="linenos">2244</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">alias</span>
-</span><span id="Generator-2245"><a href="#Generator-2245"><span class="linenos">2245</span></a>
-</span><span id="Generator-2246"><a href="#Generator-2246"><span class="linenos">2246</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNNEST(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2247"><a href="#Generator-2247"><span class="linenos">2247</span></a>
-</span><span id="Generator-2248"><a href="#Generator-2248"><span class="linenos">2248</span></a> <span class="k">def</span> <span class="nf">where_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">Where</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2249"><a href="#Generator-2249"><span class="linenos">2249</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="Generator-2250"><a href="#Generator-2250"><span class="linenos">2250</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WHERE&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2251"><a href="#Generator-2251"><span class="linenos">2251</span></a>
-</span><span id="Generator-2252"><a href="#Generator-2252"><span class="linenos">2252</span></a> <span class="k">def</span> <span class="nf">window_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">Window</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2253"><a href="#Generator-2253"><span class="linenos">2253</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2254"><a href="#Generator-2254"><span class="linenos">2254</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2255"><a href="#Generator-2255"><span class="linenos">2255</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator-2256"><a href="#Generator-2256"><span class="linenos">2256</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2257"><a href="#Generator-2257"><span class="linenos">2257</span></a> <span class="n">spec</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;spec&quot;</span><span class="p">)</span>
-</span><span id="Generator-2258"><a href="#Generator-2258"><span class="linenos">2258</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-2259"><a href="#Generator-2259"><span class="linenos">2259</span></a> <span class="n">over</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;over&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;OVER&quot;</span>
-</span><span id="Generator-2260"><a href="#Generator-2260"><span class="linenos">2260</span></a>
-</span><span id="Generator-2261"><a href="#Generator-2261"><span class="linenos">2261</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39;AS&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">arg_key</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">&#39;windows&#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">over</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2262"><a href="#Generator-2262"><span class="linenos">2262</span></a>
-</span><span id="Generator-2263"><a href="#Generator-2263"><span class="linenos">2263</span></a> <span class="n">first</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;first&quot;</span><span class="p">)</span>
-</span><span id="Generator-2264"><a href="#Generator-2264"><span class="linenos">2264</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-2265"><a href="#Generator-2265"><span class="linenos">2265</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2266"><a href="#Generator-2266"><span class="linenos">2266</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2267"><a href="#Generator-2267"><span class="linenos">2267</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;FIRST&quot;</span> <span class="k">if</span> <span class="n">first</span> <span class="k">else</span> <span class="s2">&quot;LAST&quot;</span>
-</span><span id="Generator-2268"><a href="#Generator-2268"><span class="linenos">2268</span></a>
-</span><span id="Generator-2269"><a href="#Generator-2269"><span class="linenos">2269</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">order</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">spec</span> <span class="ow">and</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Generator-2270"><a href="#Generator-2270"><span class="linenos">2270</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2271"><a href="#Generator-2271"><span class="linenos">2271</span></a>
-</span><span id="Generator-2272"><a href="#Generator-2272"><span class="linenos">2272</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator-2273"><a href="#Generator-2273"><span class="linenos">2273</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2274"><a href="#Generator-2274"><span class="linenos">2274</span></a>
-</span><span id="Generator-2275"><a href="#Generator-2275"><span class="linenos">2275</span></a> <span class="k">def</span> <span class="nf">partition_by_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">Window</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2276"><a href="#Generator-2276"><span class="linenos">2276</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2277"><a href="#Generator-2277"><span class="linenos">2277</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2229"><a href="#Generator-2229"><span class="linenos">2229</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-2230"><a href="#Generator-2230"><span class="linenos">2230</span></a> <span class="n">offset</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;offset&quot;</span><span class="p">)</span>
+</span><span id="Generator-2231"><a href="#Generator-2231"><span class="linenos">2231</span></a>
+</span><span id="Generator-2232"><a href="#Generator-2232"><span class="linenos">2232</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
+</span><span id="Generator-2233"><a href="#Generator-2233"><span class="linenos">2233</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator-2234"><a href="#Generator-2234"><span class="linenos">2234</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="Generator-2235"><a href="#Generator-2235"><span class="linenos">2235</span></a>
+</span><span id="Generator-2236"><a href="#Generator-2236"><span class="linenos">2236</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="Generator-2237"><a href="#Generator-2237"><span class="linenos">2237</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="Generator-2238"><a href="#Generator-2238"><span class="linenos">2238</span></a> <span class="n">alias</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">columns</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2239"><a href="#Generator-2239"><span class="linenos">2239</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2240"><a href="#Generator-2240"><span class="linenos">2240</span></a> <span class="n">alias</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">alias</span><span class="p">)</span>
+</span><span id="Generator-2241"><a href="#Generator-2241"><span class="linenos">2241</span></a>
+</span><span id="Generator-2242"><a href="#Generator-2242"><span class="linenos">2242</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">alias</span>
+</span><span id="Generator-2243"><a href="#Generator-2243"><span class="linenos">2243</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
+</span><span id="Generator-2244"><a href="#Generator-2244"><span class="linenos">2244</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="n">alias</span>
+</span><span id="Generator-2245"><a href="#Generator-2245"><span class="linenos">2245</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2246"><a href="#Generator-2246"><span class="linenos">2246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator-2247"><a href="#Generator-2247"><span class="linenos">2247</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET AS </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">offset</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2248"><a href="#Generator-2248"><span class="linenos">2248</span></a> <span class="k">elif</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="Generator-2249"><a href="#Generator-2249"><span class="linenos">2249</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET&quot;</span>
+</span><span id="Generator-2250"><a href="#Generator-2250"><span class="linenos">2250</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2251"><a href="#Generator-2251"><span class="linenos">2251</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">alias</span>
+</span><span id="Generator-2252"><a href="#Generator-2252"><span class="linenos">2252</span></a>
+</span><span id="Generator-2253"><a href="#Generator-2253"><span class="linenos">2253</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNNEST(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2254"><a href="#Generator-2254"><span class="linenos">2254</span></a>
+</span><span id="Generator-2255"><a href="#Generator-2255"><span class="linenos">2255</span></a> <span class="k">def</span> <span class="nf">where_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">Where</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2256"><a href="#Generator-2256"><span class="linenos">2256</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="Generator-2257"><a href="#Generator-2257"><span class="linenos">2257</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WHERE&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2258"><a href="#Generator-2258"><span class="linenos">2258</span></a>
+</span><span id="Generator-2259"><a href="#Generator-2259"><span class="linenos">2259</span></a> <span class="k">def</span> <span class="nf">window_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">Window</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2260"><a href="#Generator-2260"><span class="linenos">2260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2261"><a href="#Generator-2261"><span class="linenos">2261</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2262"><a href="#Generator-2262"><span class="linenos">2262</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator-2263"><a href="#Generator-2263"><span class="linenos">2263</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2264"><a href="#Generator-2264"><span class="linenos">2264</span></a> <span class="n">spec</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;spec&quot;</span><span class="p">)</span>
+</span><span id="Generator-2265"><a href="#Generator-2265"><span class="linenos">2265</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-2266"><a href="#Generator-2266"><span class="linenos">2266</span></a> <span class="n">over</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;over&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;OVER&quot;</span>
+</span><span id="Generator-2267"><a href="#Generator-2267"><span class="linenos">2267</span></a>
+</span><span id="Generator-2268"><a href="#Generator-2268"><span class="linenos">2268</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39;AS&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">arg_key</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">&#39;windows&#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">over</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2269"><a href="#Generator-2269"><span class="linenos">2269</span></a>
+</span><span id="Generator-2270"><a href="#Generator-2270"><span class="linenos">2270</span></a> <span class="n">first</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;first&quot;</span><span class="p">)</span>
+</span><span id="Generator-2271"><a href="#Generator-2271"><span class="linenos">2271</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-2272"><a href="#Generator-2272"><span class="linenos">2272</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2273"><a href="#Generator-2273"><span class="linenos">2273</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2274"><a href="#Generator-2274"><span class="linenos">2274</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;FIRST&quot;</span> <span class="k">if</span> <span class="n">first</span> <span class="k">else</span> <span class="s2">&quot;LAST&quot;</span>
+</span><span id="Generator-2275"><a href="#Generator-2275"><span class="linenos">2275</span></a>
+</span><span id="Generator-2276"><a href="#Generator-2276"><span class="linenos">2276</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">order</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">spec</span> <span class="ow">and</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Generator-2277"><a href="#Generator-2277"><span class="linenos">2277</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2278"><a href="#Generator-2278"><span class="linenos">2278</span></a>
-</span><span id="Generator-2279"><a href="#Generator-2279"><span class="linenos">2279</span></a> <span class="k">def</span> <span class="nf">windowspec_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">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2280"><a href="#Generator-2280"><span class="linenos">2280</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-2281"><a href="#Generator-2281"><span class="linenos">2281</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-2282"><a href="#Generator-2282"><span class="linenos">2282</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-2283"><a href="#Generator-2283"><span class="linenos">2283</span></a> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-2284"><a href="#Generator-2284"><span class="linenos">2284</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="Generator-2285"><a href="#Generator-2285"><span class="linenos">2285</span></a> <span class="p">)</span>
-</span><span id="Generator-2286"><a href="#Generator-2286"><span class="linenos">2286</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> 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="Generator-2287"><a href="#Generator-2287"><span class="linenos">2287</span></a>
-</span><span id="Generator-2288"><a href="#Generator-2288"><span class="linenos">2288</span></a> <span class="k">def</span> <span class="nf">withingroup_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">WithinGroup</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2289"><a href="#Generator-2289"><span class="linenos">2289</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2290"><a href="#Generator-2290"><span class="linenos">2290</span></a> <span class="n">expression_sql</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 class="mi">1</span><span class="p">:]</span> <span class="c1"># order has a leading space</span>
-</span><span id="Generator-2291"><a href="#Generator-2291"><span class="linenos">2291</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> WITHIN GROUP (</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2292"><a href="#Generator-2292"><span class="linenos">2292</span></a>
-</span><span id="Generator-2293"><a href="#Generator-2293"><span class="linenos">2293</span></a> <span class="k">def</span> <span class="nf">between_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">Between</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2294"><a href="#Generator-2294"><span class="linenos">2294</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2295"><a href="#Generator-2295"><span class="linenos">2295</span></a> <span class="n">low</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;low&quot;</span><span class="p">)</span>
-</span><span id="Generator-2296"><a href="#Generator-2296"><span class="linenos">2296</span></a> <span class="n">high</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;high&quot;</span><span class="p">)</span>
-</span><span id="Generator-2297"><a href="#Generator-2297"><span class="linenos">2297</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> BETWEEN </span><span class="si">{</span><span class="n">low</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">high</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2298"><a href="#Generator-2298"><span class="linenos">2298</span></a>
-</span><span id="Generator-2299"><a href="#Generator-2299"><span class="linenos">2299</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2300"><a href="#Generator-2300"><span class="linenos">2300</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span>
-</span><span id="Generator-2301"><a href="#Generator-2301"><span class="linenos">2301</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Generator-2302"><a href="#Generator-2302"><span class="linenos">2302</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Generator-2303"><a href="#Generator-2303"><span class="linenos">2303</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Generator-2304"><a href="#Generator-2304"><span class="linenos">2304</span></a> <span class="p">)</span>
-</span><span id="Generator-2305"><a href="#Generator-2305"><span class="linenos">2305</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-2306"><a href="#Generator-2306"><span class="linenos">2306</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">[</span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">]&quot;</span>
-</span><span id="Generator-2307"><a href="#Generator-2307"><span class="linenos">2307</span></a>
-</span><span id="Generator-2308"><a href="#Generator-2308"><span class="linenos">2308</span></a> <span class="k">def</span> <span class="nf">all_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">All</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2309"><a href="#Generator-2309"><span class="linenos">2309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2310"><a href="#Generator-2310"><span class="linenos">2310</span></a>
-</span><span id="Generator-2311"><a href="#Generator-2311"><span class="linenos">2311</span></a> <span class="k">def</span> <span class="nf">any_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">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2312"><a href="#Generator-2312"><span class="linenos">2312</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2313"><a href="#Generator-2313"><span class="linenos">2313</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Generator-2314"><a href="#Generator-2314"><span class="linenos">2314</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-2315"><a href="#Generator-2315"><span class="linenos">2315</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ANY </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2316"><a href="#Generator-2316"><span class="linenos">2316</span></a>
-</span><span id="Generator-2317"><a href="#Generator-2317"><span class="linenos">2317</span></a> <span class="k">def</span> <span class="nf">exists_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">Exists</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2318"><a href="#Generator-2318"><span class="linenos">2318</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXISTS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2319"><a href="#Generator-2319"><span class="linenos">2319</span></a>
-</span><span id="Generator-2320"><a href="#Generator-2320"><span class="linenos">2320</span></a> <span class="k">def</span> <span class="nf">case_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">Case</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2321"><a href="#Generator-2321"><span class="linenos">2321</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2322"><a href="#Generator-2322"><span class="linenos">2322</span></a> <span class="n">statements</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;CASE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;CASE&quot;</span><span class="p">]</span>
+</span><span id="Generator-2279"><a href="#Generator-2279"><span class="linenos">2279</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="Generator-2280"><a href="#Generator-2280"><span class="linenos">2280</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2281"><a href="#Generator-2281"><span class="linenos">2281</span></a>
+</span><span id="Generator-2282"><a href="#Generator-2282"><span class="linenos">2282</span></a> <span class="k">def</span> <span class="nf">partition_by_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">Window</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2283"><a href="#Generator-2283"><span class="linenos">2283</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2284"><a href="#Generator-2284"><span class="linenos">2284</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2285"><a href="#Generator-2285"><span class="linenos">2285</span></a>
+</span><span id="Generator-2286"><a href="#Generator-2286"><span class="linenos">2286</span></a> <span class="k">def</span> <span class="nf">windowspec_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">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2287"><a href="#Generator-2287"><span class="linenos">2287</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-2288"><a href="#Generator-2288"><span class="linenos">2288</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2289"><a href="#Generator-2289"><span class="linenos">2289</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-2290"><a href="#Generator-2290"><span class="linenos">2290</span></a> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2291"><a href="#Generator-2291"><span class="linenos">2291</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="Generator-2292"><a href="#Generator-2292"><span class="linenos">2292</span></a> <span class="p">)</span>
+</span><span id="Generator-2293"><a href="#Generator-2293"><span class="linenos">2293</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> 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="Generator-2294"><a href="#Generator-2294"><span class="linenos">2294</span></a>
+</span><span id="Generator-2295"><a href="#Generator-2295"><span class="linenos">2295</span></a> <span class="k">def</span> <span class="nf">withingroup_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">WithinGroup</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2296"><a href="#Generator-2296"><span class="linenos">2296</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2297"><a href="#Generator-2297"><span class="linenos">2297</span></a> <span class="n">expression_sql</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 class="mi">1</span><span class="p">:]</span> <span class="c1"># order has a leading space</span>
+</span><span id="Generator-2298"><a href="#Generator-2298"><span class="linenos">2298</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> WITHIN GROUP (</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2299"><a href="#Generator-2299"><span class="linenos">2299</span></a>
+</span><span id="Generator-2300"><a href="#Generator-2300"><span class="linenos">2300</span></a> <span class="k">def</span> <span class="nf">between_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">Between</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2301"><a href="#Generator-2301"><span class="linenos">2301</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2302"><a href="#Generator-2302"><span class="linenos">2302</span></a> <span class="n">low</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;low&quot;</span><span class="p">)</span>
+</span><span id="Generator-2303"><a href="#Generator-2303"><span class="linenos">2303</span></a> <span class="n">high</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;high&quot;</span><span class="p">)</span>
+</span><span id="Generator-2304"><a href="#Generator-2304"><span class="linenos">2304</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> BETWEEN </span><span class="si">{</span><span class="n">low</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">high</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2305"><a href="#Generator-2305"><span class="linenos">2305</span></a>
+</span><span id="Generator-2306"><a href="#Generator-2306"><span class="linenos">2306</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2307"><a href="#Generator-2307"><span class="linenos">2307</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span>
+</span><span id="Generator-2308"><a href="#Generator-2308"><span class="linenos">2308</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Generator-2309"><a href="#Generator-2309"><span class="linenos">2309</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Generator-2310"><a href="#Generator-2310"><span class="linenos">2310</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Generator-2311"><a href="#Generator-2311"><span class="linenos">2311</span></a> <span class="p">)</span>
+</span><span id="Generator-2312"><a href="#Generator-2312"><span class="linenos">2312</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-2313"><a href="#Generator-2313"><span class="linenos">2313</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">[</span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">]&quot;</span>
+</span><span id="Generator-2314"><a href="#Generator-2314"><span class="linenos">2314</span></a>
+</span><span id="Generator-2315"><a href="#Generator-2315"><span class="linenos">2315</span></a> <span class="k">def</span> <span class="nf">all_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">All</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2316"><a href="#Generator-2316"><span class="linenos">2316</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2317"><a href="#Generator-2317"><span class="linenos">2317</span></a>
+</span><span id="Generator-2318"><a href="#Generator-2318"><span class="linenos">2318</span></a> <span class="k">def</span> <span class="nf">any_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">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2319"><a href="#Generator-2319"><span class="linenos">2319</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2320"><a href="#Generator-2320"><span class="linenos">2320</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Generator-2321"><a href="#Generator-2321"><span class="linenos">2321</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2322"><a href="#Generator-2322"><span class="linenos">2322</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ANY </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2323"><a href="#Generator-2323"><span class="linenos">2323</span></a>
-</span><span id="Generator-2324"><a href="#Generator-2324"><span class="linenos">2324</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;ifs&quot;</span><span class="p">]:</span>
-</span><span id="Generator-2325"><a href="#Generator-2325"><span class="linenos">2325</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-2326"><a href="#Generator-2326"><span class="linenos">2326</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;THEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-2327"><a href="#Generator-2327"><span class="linenos">2327</span></a>
-</span><span id="Generator-2328"><a href="#Generator-2328"><span class="linenos">2328</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator-2329"><a href="#Generator-2329"><span class="linenos">2329</span></a>
-</span><span id="Generator-2330"><a href="#Generator-2330"><span class="linenos">2330</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-2331"><a href="#Generator-2331"><span class="linenos">2331</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ELSE </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-2332"><a href="#Generator-2332"><span class="linenos">2332</span></a>
-</span><span id="Generator-2333"><a href="#Generator-2333"><span class="linenos">2333</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
+</span><span id="Generator-2324"><a href="#Generator-2324"><span class="linenos">2324</span></a> <span class="k">def</span> <span class="nf">exists_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">Exists</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2325"><a href="#Generator-2325"><span class="linenos">2325</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXISTS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2326"><a href="#Generator-2326"><span class="linenos">2326</span></a>
+</span><span id="Generator-2327"><a href="#Generator-2327"><span class="linenos">2327</span></a> <span class="k">def</span> <span class="nf">case_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">Case</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2328"><a href="#Generator-2328"><span class="linenos">2328</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2329"><a href="#Generator-2329"><span class="linenos">2329</span></a> <span class="n">statements</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;CASE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;CASE&quot;</span><span class="p">]</span>
+</span><span id="Generator-2330"><a href="#Generator-2330"><span class="linenos">2330</span></a>
+</span><span id="Generator-2331"><a href="#Generator-2331"><span class="linenos">2331</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;ifs&quot;</span><span class="p">]:</span>
+</span><span id="Generator-2332"><a href="#Generator-2332"><span class="linenos">2332</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-2333"><a href="#Generator-2333"><span class="linenos">2333</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;THEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Generator-2334"><a href="#Generator-2334"><span class="linenos">2334</span></a>
-</span><span id="Generator-2335"><a href="#Generator-2335"><span class="linenos">2335</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
-</span><span id="Generator-2336"><a href="#Generator-2336"><span class="linenos">2336</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">),</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2337"><a href="#Generator-2337"><span class="linenos">2337</span></a>
-</span><span id="Generator-2338"><a href="#Generator-2338"><span class="linenos">2338</span></a> <span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span>
+</span><span id="Generator-2335"><a href="#Generator-2335"><span class="linenos">2335</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator-2336"><a href="#Generator-2336"><span class="linenos">2336</span></a>
+</span><span id="Generator-2337"><a href="#Generator-2337"><span class="linenos">2337</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-2338"><a href="#Generator-2338"><span class="linenos">2338</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ELSE </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Generator-2339"><a href="#Generator-2339"><span class="linenos">2339</span></a>
-</span><span id="Generator-2340"><a href="#Generator-2340"><span class="linenos">2340</span></a> <span class="k">def</span> <span class="nf">constraint_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">Constraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2341"><a href="#Generator-2341"><span class="linenos">2341</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2342"><a href="#Generator-2342"><span class="linenos">2342</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2343"><a href="#Generator-2343"><span class="linenos">2343</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2340"><a href="#Generator-2340"><span class="linenos">2340</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
+</span><span id="Generator-2341"><a href="#Generator-2341"><span class="linenos">2341</span></a>
+</span><span id="Generator-2342"><a href="#Generator-2342"><span class="linenos">2342</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
+</span><span id="Generator-2343"><a href="#Generator-2343"><span class="linenos">2343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">),</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Generator-2344"><a href="#Generator-2344"><span class="linenos">2344</span></a>
-</span><span id="Generator-2345"><a href="#Generator-2345"><span class="linenos">2345</span></a> <span class="k">def</span> <span class="nf">nextvaluefor_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">NextValueFor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2346"><a href="#Generator-2346"><span class="linenos">2346</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator-2347"><a href="#Generator-2347"><span class="linenos">2347</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OVER (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2348"><a href="#Generator-2348"><span class="linenos">2348</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NEXT VALUE FOR </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="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2349"><a href="#Generator-2349"><span class="linenos">2349</span></a>
-</span><span id="Generator-2350"><a href="#Generator-2350"><span class="linenos">2350</span></a> <span class="k">def</span> <span class="nf">extract_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">Extract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2351"><a href="#Generator-2351"><span class="linenos">2351</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator-2352"><a href="#Generator-2352"><span class="linenos">2352</span></a> <span class="n">expression_sql</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="Generator-2353"><a href="#Generator-2353"><span class="linenos">2353</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2354"><a href="#Generator-2354"><span class="linenos">2354</span></a>
-</span><span id="Generator-2355"><a href="#Generator-2355"><span class="linenos">2355</span></a> <span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2356"><a href="#Generator-2356"><span class="linenos">2356</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator-2357"><a href="#Generator-2357"><span class="linenos">2357</span></a>
-</span><span id="Generator-2358"><a href="#Generator-2358"><span class="linenos">2358</span></a> <span class="k">if</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span>
-</span><span id="Generator-2359"><a href="#Generator-2359"><span class="linenos">2359</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;LTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-2360"><a href="#Generator-2360"><span class="linenos">2360</span></a> <span class="k">elif</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span>
-</span><span id="Generator-2361"><a href="#Generator-2361"><span class="linenos">2361</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;RTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-2362"><a href="#Generator-2362"><span class="linenos">2362</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2363"><a href="#Generator-2363"><span class="linenos">2363</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;TRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2345"><a href="#Generator-2345"><span class="linenos">2345</span></a> <span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span>
+</span><span id="Generator-2346"><a href="#Generator-2346"><span class="linenos">2346</span></a>
+</span><span id="Generator-2347"><a href="#Generator-2347"><span class="linenos">2347</span></a> <span class="k">def</span> <span class="nf">constraint_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">Constraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2348"><a href="#Generator-2348"><span class="linenos">2348</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2349"><a href="#Generator-2349"><span class="linenos">2349</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2350"><a href="#Generator-2350"><span class="linenos">2350</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2351"><a href="#Generator-2351"><span class="linenos">2351</span></a>
+</span><span id="Generator-2352"><a href="#Generator-2352"><span class="linenos">2352</span></a> <span class="k">def</span> <span class="nf">nextvaluefor_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">NextValueFor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2353"><a href="#Generator-2353"><span class="linenos">2353</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator-2354"><a href="#Generator-2354"><span class="linenos">2354</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OVER (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2355"><a href="#Generator-2355"><span class="linenos">2355</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NEXT VALUE FOR </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="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2356"><a href="#Generator-2356"><span class="linenos">2356</span></a>
+</span><span id="Generator-2357"><a href="#Generator-2357"><span class="linenos">2357</span></a> <span class="k">def</span> <span class="nf">extract_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">Extract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2358"><a href="#Generator-2358"><span class="linenos">2358</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator-2359"><a href="#Generator-2359"><span class="linenos">2359</span></a> <span class="n">expression_sql</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="Generator-2360"><a href="#Generator-2360"><span class="linenos">2360</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2361"><a href="#Generator-2361"><span class="linenos">2361</span></a>
+</span><span id="Generator-2362"><a href="#Generator-2362"><span class="linenos">2362</span></a> <span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2363"><a href="#Generator-2363"><span class="linenos">2363</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="Generator-2364"><a href="#Generator-2364"><span class="linenos">2364</span></a>
-</span><span id="Generator-2365"><a href="#Generator-2365"><span class="linenos">2365</span></a> <span class="k">def</span> <span class="nf">convert_concat_args</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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Generator-2366"><a href="#Generator-2366"><span class="linenos">2366</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator-2367"><a href="#Generator-2367"><span class="linenos">2367</span></a> <span class="k">if</span> <span class="nb">isinstance</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">ConcatWs</span><span class="p">):</span>
-</span><span id="Generator-2368"><a href="#Generator-2368"><span class="linenos">2368</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># Skip the delimiter</span>
-</span><span id="Generator-2369"><a href="#Generator-2369"><span class="linenos">2369</span></a>
-</span><span id="Generator-2370"><a href="#Generator-2370"><span class="linenos">2370</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="Generator-2371"><a href="#Generator-2371"><span class="linenos">2371</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
-</span><span id="Generator-2372"><a href="#Generator-2372"><span class="linenos">2372</span></a>
-</span><span id="Generator-2373"><a href="#Generator-2373"><span class="linenos">2373</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span> <span class="ow">and</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;coalesce&quot;</span><span class="p">):</span>
-</span><span id="Generator-2374"><a href="#Generator-2374"><span class="linenos">2374</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</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">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 class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
-</span><span id="Generator-2375"><a href="#Generator-2375"><span class="linenos">2375</span></a>
-</span><span id="Generator-2376"><a href="#Generator-2376"><span class="linenos">2376</span></a> <span class="k">return</span> <span class="n">args</span>
-</span><span id="Generator-2377"><a href="#Generator-2377"><span class="linenos">2377</span></a>
-</span><span id="Generator-2378"><a href="#Generator-2378"><span class="linenos">2378</span></a> <span class="k">def</span> <span class="nf">concat_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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2379"><a href="#Generator-2379"><span class="linenos">2379</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2380"><a href="#Generator-2380"><span class="linenos">2380</span></a>
-</span><span id="Generator-2381"><a href="#Generator-2381"><span class="linenos">2381</span></a> <span class="c1"># Some dialects don&#39;t allow a single-argument CONCAT call</span>
-</span><span id="Generator-2382"><a href="#Generator-2382"><span class="linenos">2382</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator-2383"><a href="#Generator-2383"><span class="linenos">2383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="Generator-2365"><a href="#Generator-2365"><span class="linenos">2365</span></a> <span class="k">if</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span>
+</span><span id="Generator-2366"><a href="#Generator-2366"><span class="linenos">2366</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;LTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2367"><a href="#Generator-2367"><span class="linenos">2367</span></a> <span class="k">elif</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span>
+</span><span id="Generator-2368"><a href="#Generator-2368"><span class="linenos">2368</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;RTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2369"><a href="#Generator-2369"><span class="linenos">2369</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2370"><a href="#Generator-2370"><span class="linenos">2370</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;TRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2371"><a href="#Generator-2371"><span class="linenos">2371</span></a>
+</span><span id="Generator-2372"><a href="#Generator-2372"><span class="linenos">2372</span></a> <span class="k">def</span> <span class="nf">convert_concat_args</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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Generator-2373"><a href="#Generator-2373"><span class="linenos">2373</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator-2374"><a href="#Generator-2374"><span class="linenos">2374</span></a> <span class="k">if</span> <span class="nb">isinstance</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">ConcatWs</span><span class="p">):</span>
+</span><span id="Generator-2375"><a href="#Generator-2375"><span class="linenos">2375</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># Skip the delimiter</span>
+</span><span id="Generator-2376"><a href="#Generator-2376"><span class="linenos">2376</span></a>
+</span><span id="Generator-2377"><a href="#Generator-2377"><span class="linenos">2377</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="Generator-2378"><a href="#Generator-2378"><span class="linenos">2378</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="Generator-2379"><a href="#Generator-2379"><span class="linenos">2379</span></a>
+</span><span id="Generator-2380"><a href="#Generator-2380"><span class="linenos">2380</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span> <span class="ow">and</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;coalesce&quot;</span><span class="p">):</span>
+</span><span id="Generator-2381"><a href="#Generator-2381"><span class="linenos">2381</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</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">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 class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="Generator-2382"><a href="#Generator-2382"><span class="linenos">2382</span></a>
+</span><span id="Generator-2383"><a href="#Generator-2383"><span class="linenos">2383</span></a> <span class="k">return</span> <span class="n">args</span>
</span><span id="Generator-2384"><a href="#Generator-2384"><span class="linenos">2384</span></a>
-</span><span id="Generator-2385"><a href="#Generator-2385"><span class="linenos">2385</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-2386"><a href="#Generator-2386"><span class="linenos">2386</span></a>
-</span><span id="Generator-2387"><a href="#Generator-2387"><span class="linenos">2387</span></a> <span class="k">def</span> <span class="nf">concatws_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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2388"><a href="#Generator-2388"><span class="linenos">2388</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator-2389"><a href="#Generator-2389"><span class="linenos">2389</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2390"><a href="#Generator-2390"><span class="linenos">2390</span></a> <span class="p">)</span>
+</span><span id="Generator-2385"><a href="#Generator-2385"><span class="linenos">2385</span></a> <span class="k">def</span> <span class="nf">concat_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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2386"><a href="#Generator-2386"><span class="linenos">2386</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2387"><a href="#Generator-2387"><span class="linenos">2387</span></a>
+</span><span id="Generator-2388"><a href="#Generator-2388"><span class="linenos">2388</span></a> <span class="c1"># Some dialects don&#39;t allow a single-argument CONCAT call</span>
+</span><span id="Generator-2389"><a href="#Generator-2389"><span class="linenos">2389</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator-2390"><a href="#Generator-2390"><span class="linenos">2390</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span id="Generator-2391"><a href="#Generator-2391"><span class="linenos">2391</span></a>
-</span><span id="Generator-2392"><a href="#Generator-2392"><span class="linenos">2392</span></a> <span class="k">def</span> <span class="nf">check_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">Check</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2393"><a href="#Generator-2393"><span class="linenos">2393</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2394"><a href="#Generator-2394"><span class="linenos">2394</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2395"><a href="#Generator-2395"><span class="linenos">2395</span></a>
-</span><span id="Generator-2396"><a href="#Generator-2396"><span class="linenos">2396</span></a> <span class="k">def</span> <span class="nf">foreignkey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2397"><a href="#Generator-2397"><span class="linenos">2397</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2398"><a href="#Generator-2398"><span class="linenos">2398</span></a> <span class="n">reference</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;reference&quot;</span><span class="p">)</span>
-</span><span id="Generator-2399"><a href="#Generator-2399"><span class="linenos">2399</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">reference</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">reference</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2400"><a href="#Generator-2400"><span class="linenos">2400</span></a> <span class="n">delete</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;delete&quot;</span><span class="p">)</span>
-</span><span id="Generator-2401"><a href="#Generator-2401"><span class="linenos">2401</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON DELETE </span><span class="si">{</span><span class="n">delete</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">delete</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2402"><a href="#Generator-2402"><span class="linenos">2402</span></a> <span class="n">update</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;update&quot;</span><span class="p">)</span>
-</span><span id="Generator-2403"><a href="#Generator-2403"><span class="linenos">2403</span></a> <span class="n">update</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON UPDATE </span><span class="si">{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">update</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2404"><a href="#Generator-2404"><span class="linenos">2404</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOREIGN KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">reference</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2405"><a href="#Generator-2405"><span class="linenos">2405</span></a>
-</span><span id="Generator-2406"><a href="#Generator-2406"><span class="linenos">2406</span></a> <span class="k">def</span> <span class="nf">primarykey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2407"><a href="#Generator-2407"><span class="linenos">2407</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2408"><a href="#Generator-2408"><span class="linenos">2408</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-2409"><a href="#Generator-2409"><span class="linenos">2409</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2410"><a href="#Generator-2410"><span class="linenos">2410</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2411"><a href="#Generator-2411"><span class="linenos">2411</span></a>
-</span><span id="Generator-2412"><a href="#Generator-2412"><span class="linenos">2412</span></a> <span class="k">def</span> <span class="nf">if_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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2413"><a href="#Generator-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</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;false&quot;</span><span class="p">)))</span>
-</span><span id="Generator-2414"><a href="#Generator-2414"><span class="linenos">2414</span></a>
-</span><span id="Generator-2415"><a href="#Generator-2415"><span class="linenos">2415</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2416"><a href="#Generator-2416"><span class="linenos">2416</span></a> <span class="n">modifier</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;modifier&quot;</span><span class="p">)</span>
-</span><span id="Generator-2417"><a href="#Generator-2417"><span class="linenos">2417</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2418"><a href="#Generator-2418"><span class="linenos">2418</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s1">&#39;MATCH&#39;</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span><span class="si">}</span><span class="s2"> AGAINST(</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="n">modifier</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2419"><a href="#Generator-2419"><span class="linenos">2419</span></a>
-</span><span id="Generator-2420"><a href="#Generator-2420"><span class="linenos">2420</span></a> <span class="k">def</span> <span class="nf">jsonkeyvalue_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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2421"><a href="#Generator-2421"><span class="linenos">2421</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_PAIR_SEP</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2422"><a href="#Generator-2422"><span class="linenos">2422</span></a>
-</span><span id="Generator-2423"><a href="#Generator-2423"><span class="linenos">2423</span></a> <span class="k">def</span> <span class="nf">jsonpath_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">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2424"><a href="#Generator-2424"><span class="linenos">2424</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="Generator-2425"><a href="#Generator-2425"><span class="linenos">2425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2392"><a href="#Generator-2392"><span class="linenos">2392</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-2393"><a href="#Generator-2393"><span class="linenos">2393</span></a>
+</span><span id="Generator-2394"><a href="#Generator-2394"><span class="linenos">2394</span></a> <span class="k">def</span> <span class="nf">concatws_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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2395"><a href="#Generator-2395"><span class="linenos">2395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator-2396"><a href="#Generator-2396"><span class="linenos">2396</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2397"><a href="#Generator-2397"><span class="linenos">2397</span></a> <span class="p">)</span>
+</span><span id="Generator-2398"><a href="#Generator-2398"><span class="linenos">2398</span></a>
+</span><span id="Generator-2399"><a href="#Generator-2399"><span class="linenos">2399</span></a> <span class="k">def</span> <span class="nf">check_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">Check</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2400"><a href="#Generator-2400"><span class="linenos">2400</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2401"><a href="#Generator-2401"><span class="linenos">2401</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2402"><a href="#Generator-2402"><span class="linenos">2402</span></a>
+</span><span id="Generator-2403"><a href="#Generator-2403"><span class="linenos">2403</span></a> <span class="k">def</span> <span class="nf">foreignkey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2404"><a href="#Generator-2404"><span class="linenos">2404</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2405"><a href="#Generator-2405"><span class="linenos">2405</span></a> <span class="n">reference</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;reference&quot;</span><span class="p">)</span>
+</span><span id="Generator-2406"><a href="#Generator-2406"><span class="linenos">2406</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">reference</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">reference</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2407"><a href="#Generator-2407"><span class="linenos">2407</span></a> <span class="n">delete</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;delete&quot;</span><span class="p">)</span>
+</span><span id="Generator-2408"><a href="#Generator-2408"><span class="linenos">2408</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON DELETE </span><span class="si">{</span><span class="n">delete</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">delete</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2409"><a href="#Generator-2409"><span class="linenos">2409</span></a> <span class="n">update</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;update&quot;</span><span class="p">)</span>
+</span><span id="Generator-2410"><a href="#Generator-2410"><span class="linenos">2410</span></a> <span class="n">update</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON UPDATE </span><span class="si">{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">update</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2411"><a href="#Generator-2411"><span class="linenos">2411</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOREIGN KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">reference</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2412"><a href="#Generator-2412"><span class="linenos">2412</span></a>
+</span><span id="Generator-2413"><a href="#Generator-2413"><span class="linenos">2413</span></a> <span class="k">def</span> <span class="nf">primarykey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2414"><a href="#Generator-2414"><span class="linenos">2414</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2415"><a href="#Generator-2415"><span class="linenos">2415</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2416"><a href="#Generator-2416"><span class="linenos">2416</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2417"><a href="#Generator-2417"><span class="linenos">2417</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2418"><a href="#Generator-2418"><span class="linenos">2418</span></a>
+</span><span id="Generator-2419"><a href="#Generator-2419"><span class="linenos">2419</span></a> <span class="k">def</span> <span class="nf">if_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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2420"><a href="#Generator-2420"><span class="linenos">2420</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</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;false&quot;</span><span class="p">)))</span>
+</span><span id="Generator-2421"><a href="#Generator-2421"><span class="linenos">2421</span></a>
+</span><span id="Generator-2422"><a href="#Generator-2422"><span class="linenos">2422</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2423"><a href="#Generator-2423"><span class="linenos">2423</span></a> <span class="n">modifier</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;modifier&quot;</span><span class="p">)</span>
+</span><span id="Generator-2424"><a href="#Generator-2424"><span class="linenos">2424</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2425"><a href="#Generator-2425"><span class="linenos">2425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s1">&#39;MATCH&#39;</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span><span class="si">}</span><span class="s2"> AGAINST(</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="n">modifier</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="Generator-2426"><a href="#Generator-2426"><span class="linenos">2426</span></a>
-</span><span id="Generator-2427"><a href="#Generator-2427"><span class="linenos">2427</span></a> <span class="k">def</span> <span class="nf">json_path_part</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="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2428"><a href="#Generator-2428"><span class="linenos">2428</span></a> <span class="k">if</span> <span class="nb">isinstance</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">JSONPathPart</span><span class="p">):</span>
-</span><span id="Generator-2429"><a href="#Generator-2429"><span class="linenos">2429</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator-2430"><a href="#Generator-2430"><span class="linenos">2430</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="Generator-2431"><a href="#Generator-2431"><span class="linenos">2431</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported JSONPathPart type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-2432"><a href="#Generator-2432"><span class="linenos">2432</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2427"><a href="#Generator-2427"><span class="linenos">2427</span></a> <span class="k">def</span> <span class="nf">jsonkeyvalue_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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2428"><a href="#Generator-2428"><span class="linenos">2428</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_PAIR_SEP</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2429"><a href="#Generator-2429"><span class="linenos">2429</span></a>
+</span><span id="Generator-2430"><a href="#Generator-2430"><span class="linenos">2430</span></a> <span class="k">def</span> <span class="nf">jsonpath_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">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2431"><a href="#Generator-2431"><span class="linenos">2431</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="Generator-2432"><a href="#Generator-2432"><span class="linenos">2432</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2433"><a href="#Generator-2433"><span class="linenos">2433</span></a>
-</span><span id="Generator-2434"><a href="#Generator-2434"><span class="linenos">2434</span></a> <span class="k">return</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2435"><a href="#Generator-2435"><span class="linenos">2435</span></a>
-</span><span id="Generator-2436"><a href="#Generator-2436"><span class="linenos">2436</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
-</span><span id="Generator-2437"><a href="#Generator-2437"><span class="linenos">2437</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2438"><a href="#Generator-2438"><span class="linenos">2438</span></a>
-</span><span id="Generator-2439"><a href="#Generator-2439"><span class="linenos">2439</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span><span class="p">:</span>
-</span><span id="Generator-2440"><a href="#Generator-2440"><span class="linenos">2440</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2441"><a href="#Generator-2441"><span class="linenos">2441</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="se">\\</span><span class="s2">&#39;&quot;</span>
-</span><span id="Generator-2442"><a href="#Generator-2442"><span class="linenos">2442</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2443"><a href="#Generator-2443"><span class="linenos">2443</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
-</span><span id="Generator-2444"><a href="#Generator-2444"><span class="linenos">2444</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s1">&quot;&#39;</span>
+</span><span id="Generator-2434"><a href="#Generator-2434"><span class="linenos">2434</span></a> <span class="k">def</span> <span class="nf">json_path_part</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="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2435"><a href="#Generator-2435"><span class="linenos">2435</span></a> <span class="k">if</span> <span class="nb">isinstance</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">JSONPathPart</span><span class="p">):</span>
+</span><span id="Generator-2436"><a href="#Generator-2436"><span class="linenos">2436</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator-2437"><a href="#Generator-2437"><span class="linenos">2437</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="Generator-2438"><a href="#Generator-2438"><span class="linenos">2438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported JSONPathPart type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-2439"><a href="#Generator-2439"><span class="linenos">2439</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2440"><a href="#Generator-2440"><span class="linenos">2440</span></a>
+</span><span id="Generator-2441"><a href="#Generator-2441"><span class="linenos">2441</span></a> <span class="k">return</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2442"><a href="#Generator-2442"><span class="linenos">2442</span></a>
+</span><span id="Generator-2443"><a href="#Generator-2443"><span class="linenos">2443</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+</span><span id="Generator-2444"><a href="#Generator-2444"><span class="linenos">2444</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Generator-2445"><a href="#Generator-2445"><span class="linenos">2445</span></a>
-</span><span id="Generator-2446"><a href="#Generator-2446"><span class="linenos">2446</span></a> <span class="k">return</span> <span class="n">escaped</span>
-</span><span id="Generator-2447"><a href="#Generator-2447"><span class="linenos">2447</span></a>
-</span><span id="Generator-2448"><a href="#Generator-2448"><span class="linenos">2448</span></a> <span class="k">def</span> <span class="nf">formatjson_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">FormatJson</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2449"><a href="#Generator-2449"><span class="linenos">2449</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> FORMAT JSON&quot;</span>
-</span><span id="Generator-2450"><a href="#Generator-2450"><span class="linenos">2450</span></a>
-</span><span id="Generator-2451"><a href="#Generator-2451"><span class="linenos">2451</span></a> <span class="k">def</span> <span class="nf">jsonobject_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">JSONObject</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2452"><a href="#Generator-2452"><span class="linenos">2452</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator-2453"><a href="#Generator-2453"><span class="linenos">2453</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2446"><a href="#Generator-2446"><span class="linenos">2446</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span><span class="p">:</span>
+</span><span id="Generator-2447"><a href="#Generator-2447"><span class="linenos">2447</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2448"><a href="#Generator-2448"><span class="linenos">2448</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="se">\\</span><span class="s2">&#39;&quot;</span>
+</span><span id="Generator-2449"><a href="#Generator-2449"><span class="linenos">2449</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2450"><a href="#Generator-2450"><span class="linenos">2450</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
+</span><span id="Generator-2451"><a href="#Generator-2451"><span class="linenos">2451</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s1">&quot;&#39;</span>
+</span><span id="Generator-2452"><a href="#Generator-2452"><span class="linenos">2452</span></a>
+</span><span id="Generator-2453"><a href="#Generator-2453"><span class="linenos">2453</span></a> <span class="k">return</span> <span class="n">escaped</span>
</span><span id="Generator-2454"><a href="#Generator-2454"><span class="linenos">2454</span></a>
-</span><span id="Generator-2455"><a href="#Generator-2455"><span class="linenos">2455</span></a> <span class="n">unique_keys</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;unique_keys&quot;</span><span class="p">)</span>
-</span><span id="Generator-2456"><a href="#Generator-2456"><span class="linenos">2456</span></a> <span class="k">if</span> <span class="n">unique_keys</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-2457"><a href="#Generator-2457"><span class="linenos">2457</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;WITH&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">unique_keys</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;WITHOUT&#39;</span><span class="si">}</span><span class="s2"> UNIQUE KEYS&quot;</span>
-</span><span id="Generator-2458"><a href="#Generator-2458"><span class="linenos">2458</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2459"><a href="#Generator-2459"><span class="linenos">2459</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2460"><a href="#Generator-2460"><span class="linenos">2460</span></a>
-</span><span id="Generator-2461"><a href="#Generator-2461"><span class="linenos">2461</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="Generator-2462"><a href="#Generator-2462"><span class="linenos">2462</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2463"><a href="#Generator-2463"><span class="linenos">2463</span></a> <span class="n">encoding</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;encoding&quot;</span><span class="p">)</span>
-</span><span id="Generator-2464"><a href="#Generator-2464"><span class="linenos">2464</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ENCODING </span><span class="si">{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">encoding</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2465"><a href="#Generator-2465"><span class="linenos">2465</span></a>
-</span><span id="Generator-2466"><a href="#Generator-2466"><span class="linenos">2466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator-2467"><a href="#Generator-2467"><span class="linenos">2467</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span> <span class="k">if</span> <span class="nb">isinstance</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">JSONObject</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">,</span>
-</span><span id="Generator-2468"><a href="#Generator-2468"><span class="linenos">2468</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Generator-2469"><a href="#Generator-2469"><span class="linenos">2469</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Generator-2470"><a href="#Generator-2470"><span class="linenos">2470</span></a> <span class="p">)</span>
-</span><span id="Generator-2471"><a href="#Generator-2471"><span class="linenos">2471</span></a>
-</span><span id="Generator-2472"><a href="#Generator-2472"><span class="linenos">2472</span></a> <span class="k">def</span> <span class="nf">jsonobjectagg_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">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2473"><a href="#Generator-2473"><span class="linenos">2473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">jsonobject_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2474"><a href="#Generator-2474"><span class="linenos">2474</span></a>
-</span><span id="Generator-2475"><a href="#Generator-2475"><span class="linenos">2475</span></a> <span class="k">def</span> <span class="nf">jsonarray_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">JSONArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2476"><a href="#Generator-2476"><span class="linenos">2476</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator-2477"><a href="#Generator-2477"><span class="linenos">2477</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2478"><a href="#Generator-2478"><span class="linenos">2478</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="Generator-2479"><a href="#Generator-2479"><span class="linenos">2479</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2480"><a href="#Generator-2480"><span class="linenos">2480</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2481"><a href="#Generator-2481"><span class="linenos">2481</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator-2482"><a href="#Generator-2482"><span class="linenos">2482</span></a> <span class="s2">&quot;JSON_ARRAY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2483"><a href="#Generator-2483"><span class="linenos">2483</span></a> <span class="p">)</span>
-</span><span id="Generator-2484"><a href="#Generator-2484"><span class="linenos">2484</span></a>
-</span><span id="Generator-2485"><a href="#Generator-2485"><span class="linenos">2485</span></a> <span class="k">def</span> <span class="nf">jsonarrayagg_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">JSONArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2486"><a href="#Generator-2486"><span class="linenos">2486</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2487"><a href="#Generator-2487"><span class="linenos">2487</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator-2488"><a href="#Generator-2488"><span class="linenos">2488</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator-2489"><a href="#Generator-2489"><span class="linenos">2489</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2490"><a href="#Generator-2490"><span class="linenos">2490</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="Generator-2491"><a href="#Generator-2491"><span class="linenos">2491</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2492"><a href="#Generator-2492"><span class="linenos">2492</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2493"><a href="#Generator-2493"><span class="linenos">2493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator-2494"><a href="#Generator-2494"><span class="linenos">2494</span></a> <span class="s2">&quot;JSON_ARRAYAGG&quot;</span><span class="p">,</span>
-</span><span id="Generator-2495"><a href="#Generator-2495"><span class="linenos">2495</span></a> <span class="n">this</span><span class="p">,</span>
-</span><span id="Generator-2496"><a href="#Generator-2496"><span class="linenos">2496</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Generator-2497"><a href="#Generator-2497"><span class="linenos">2497</span></a> <span class="p">)</span>
-</span><span id="Generator-2498"><a href="#Generator-2498"><span class="linenos">2498</span></a>
-</span><span id="Generator-2499"><a href="#Generator-2499"><span class="linenos">2499</span></a> <span class="k">def</span> <span class="nf">jsoncolumndef_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">JSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2500"><a href="#Generator-2500"><span class="linenos">2500</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator-2501"><a href="#Generator-2501"><span class="linenos">2501</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PATH </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2502"><a href="#Generator-2502"><span class="linenos">2502</span></a> <span class="n">nested_schema</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;nested_schema&quot;</span><span class="p">)</span>
-</span><span id="Generator-2503"><a href="#Generator-2503"><span class="linenos">2503</span></a>
-</span><span id="Generator-2504"><a href="#Generator-2504"><span class="linenos">2504</span></a> <span class="k">if</span> <span class="n">nested_schema</span><span class="p">:</span>
-</span><span id="Generator-2505"><a href="#Generator-2505"><span class="linenos">2505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NESTED</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">nested_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2506"><a href="#Generator-2506"><span class="linenos">2506</span></a>
-</span><span id="Generator-2507"><a href="#Generator-2507"><span class="linenos">2507</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2508"><a href="#Generator-2508"><span class="linenos">2508</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-2509"><a href="#Generator-2509"><span class="linenos">2509</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2510"><a href="#Generator-2510"><span class="linenos">2510</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2511"><a href="#Generator-2511"><span class="linenos">2511</span></a>
-</span><span id="Generator-2512"><a href="#Generator-2512"><span class="linenos">2512</span></a> <span class="k">def</span> <span class="nf">jsonschema_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">JSONSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2513"><a href="#Generator-2513"><span class="linenos">2513</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;COLUMNS&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-2514"><a href="#Generator-2514"><span class="linenos">2514</span></a>
-</span><span id="Generator-2515"><a href="#Generator-2515"><span class="linenos">2515</span></a> <span class="k">def</span> <span class="nf">jsontable_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">JSONTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2516"><a href="#Generator-2516"><span class="linenos">2516</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2517"><a href="#Generator-2517"><span class="linenos">2517</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator-2518"><a href="#Generator-2518"><span class="linenos">2518</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2519"><a href="#Generator-2519"><span class="linenos">2519</span></a> <span class="n">error_handling</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;error_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator-2520"><a href="#Generator-2520"><span class="linenos">2520</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">error_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">error_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2521"><a href="#Generator-2521"><span class="linenos">2521</span></a> <span class="n">empty_handling</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;empty_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator-2522"><a href="#Generator-2522"><span class="linenos">2522</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">empty_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2523"><a href="#Generator-2523"><span class="linenos">2523</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator-2524"><a href="#Generator-2524"><span class="linenos">2524</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator-2525"><a href="#Generator-2525"><span class="linenos">2525</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">path</span><span class="si">}{</span><span class="n">error_handling</span><span class="si">}{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2526"><a href="#Generator-2526"><span class="linenos">2526</span></a> <span class="p">)</span>
-</span><span id="Generator-2527"><a href="#Generator-2527"><span class="linenos">2527</span></a>
-</span><span id="Generator-2528"><a href="#Generator-2528"><span class="linenos">2528</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_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">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2529"><a href="#Generator-2529"><span class="linenos">2529</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2530"><a href="#Generator-2530"><span class="linenos">2530</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-2531"><a href="#Generator-2531"><span class="linenos">2531</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator-2532"><a href="#Generator-2532"><span class="linenos">2532</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2533"><a href="#Generator-2533"><span class="linenos">2533</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2534"><a href="#Generator-2534"><span class="linenos">2534</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2535"><a href="#Generator-2535"><span class="linenos">2535</span></a>
-</span><span id="Generator-2536"><a href="#Generator-2536"><span class="linenos">2536</span></a> <span class="k">def</span> <span class="nf">openjson_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">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2537"><a href="#Generator-2537"><span class="linenos">2537</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2455"><a href="#Generator-2455"><span class="linenos">2455</span></a> <span class="k">def</span> <span class="nf">formatjson_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">FormatJson</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2456"><a href="#Generator-2456"><span class="linenos">2456</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> FORMAT JSON&quot;</span>
+</span><span id="Generator-2457"><a href="#Generator-2457"><span class="linenos">2457</span></a>
+</span><span id="Generator-2458"><a href="#Generator-2458"><span class="linenos">2458</span></a> <span class="k">def</span> <span class="nf">jsonobject_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">JSONObject</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2459"><a href="#Generator-2459"><span class="linenos">2459</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator-2460"><a href="#Generator-2460"><span class="linenos">2460</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2461"><a href="#Generator-2461"><span class="linenos">2461</span></a>
+</span><span id="Generator-2462"><a href="#Generator-2462"><span class="linenos">2462</span></a> <span class="n">unique_keys</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;unique_keys&quot;</span><span class="p">)</span>
+</span><span id="Generator-2463"><a href="#Generator-2463"><span class="linenos">2463</span></a> <span class="k">if</span> <span class="n">unique_keys</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-2464"><a href="#Generator-2464"><span class="linenos">2464</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;WITH&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">unique_keys</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;WITHOUT&#39;</span><span class="si">}</span><span class="s2"> UNIQUE KEYS&quot;</span>
+</span><span id="Generator-2465"><a href="#Generator-2465"><span class="linenos">2465</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2466"><a href="#Generator-2466"><span class="linenos">2466</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2467"><a href="#Generator-2467"><span class="linenos">2467</span></a>
+</span><span id="Generator-2468"><a href="#Generator-2468"><span class="linenos">2468</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="Generator-2469"><a href="#Generator-2469"><span class="linenos">2469</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2470"><a href="#Generator-2470"><span class="linenos">2470</span></a> <span class="n">encoding</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;encoding&quot;</span><span class="p">)</span>
+</span><span id="Generator-2471"><a href="#Generator-2471"><span class="linenos">2471</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ENCODING </span><span class="si">{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">encoding</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2472"><a href="#Generator-2472"><span class="linenos">2472</span></a>
+</span><span id="Generator-2473"><a href="#Generator-2473"><span class="linenos">2473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator-2474"><a href="#Generator-2474"><span class="linenos">2474</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span> <span class="k">if</span> <span class="nb">isinstance</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">JSONObject</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">,</span>
+</span><span id="Generator-2475"><a href="#Generator-2475"><span class="linenos">2475</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Generator-2476"><a href="#Generator-2476"><span class="linenos">2476</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator-2477"><a href="#Generator-2477"><span class="linenos">2477</span></a> <span class="p">)</span>
+</span><span id="Generator-2478"><a href="#Generator-2478"><span class="linenos">2478</span></a>
+</span><span id="Generator-2479"><a href="#Generator-2479"><span class="linenos">2479</span></a> <span class="k">def</span> <span class="nf">jsonobjectagg_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">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2480"><a href="#Generator-2480"><span class="linenos">2480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">jsonobject_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2481"><a href="#Generator-2481"><span class="linenos">2481</span></a>
+</span><span id="Generator-2482"><a href="#Generator-2482"><span class="linenos">2482</span></a> <span class="k">def</span> <span class="nf">jsonarray_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">JSONArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2483"><a href="#Generator-2483"><span class="linenos">2483</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator-2484"><a href="#Generator-2484"><span class="linenos">2484</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2485"><a href="#Generator-2485"><span class="linenos">2485</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="Generator-2486"><a href="#Generator-2486"><span class="linenos">2486</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2487"><a href="#Generator-2487"><span class="linenos">2487</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2488"><a href="#Generator-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator-2489"><a href="#Generator-2489"><span class="linenos">2489</span></a> <span class="s2">&quot;JSON_ARRAY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2490"><a href="#Generator-2490"><span class="linenos">2490</span></a> <span class="p">)</span>
+</span><span id="Generator-2491"><a href="#Generator-2491"><span class="linenos">2491</span></a>
+</span><span id="Generator-2492"><a href="#Generator-2492"><span class="linenos">2492</span></a> <span class="k">def</span> <span class="nf">jsonarrayagg_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">JSONArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2493"><a href="#Generator-2493"><span class="linenos">2493</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2494"><a href="#Generator-2494"><span class="linenos">2494</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator-2495"><a href="#Generator-2495"><span class="linenos">2495</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator-2496"><a href="#Generator-2496"><span class="linenos">2496</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2497"><a href="#Generator-2497"><span class="linenos">2497</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="Generator-2498"><a href="#Generator-2498"><span class="linenos">2498</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2499"><a href="#Generator-2499"><span class="linenos">2499</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2500"><a href="#Generator-2500"><span class="linenos">2500</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator-2501"><a href="#Generator-2501"><span class="linenos">2501</span></a> <span class="s2">&quot;JSON_ARRAYAGG&quot;</span><span class="p">,</span>
+</span><span id="Generator-2502"><a href="#Generator-2502"><span class="linenos">2502</span></a> <span class="n">this</span><span class="p">,</span>
+</span><span id="Generator-2503"><a href="#Generator-2503"><span class="linenos">2503</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator-2504"><a href="#Generator-2504"><span class="linenos">2504</span></a> <span class="p">)</span>
+</span><span id="Generator-2505"><a href="#Generator-2505"><span class="linenos">2505</span></a>
+</span><span id="Generator-2506"><a href="#Generator-2506"><span class="linenos">2506</span></a> <span class="k">def</span> <span class="nf">jsoncolumndef_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">JSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2507"><a href="#Generator-2507"><span class="linenos">2507</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="Generator-2508"><a href="#Generator-2508"><span class="linenos">2508</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PATH </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2509"><a href="#Generator-2509"><span class="linenos">2509</span></a> <span class="n">nested_schema</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;nested_schema&quot;</span><span class="p">)</span>
+</span><span id="Generator-2510"><a href="#Generator-2510"><span class="linenos">2510</span></a>
+</span><span id="Generator-2511"><a href="#Generator-2511"><span class="linenos">2511</span></a> <span class="k">if</span> <span class="n">nested_schema</span><span class="p">:</span>
+</span><span id="Generator-2512"><a href="#Generator-2512"><span class="linenos">2512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NESTED</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">nested_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2513"><a href="#Generator-2513"><span class="linenos">2513</span></a>
+</span><span id="Generator-2514"><a href="#Generator-2514"><span class="linenos">2514</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2515"><a href="#Generator-2515"><span class="linenos">2515</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-2516"><a href="#Generator-2516"><span class="linenos">2516</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2517"><a href="#Generator-2517"><span class="linenos">2517</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2518"><a href="#Generator-2518"><span class="linenos">2518</span></a>
+</span><span id="Generator-2519"><a href="#Generator-2519"><span class="linenos">2519</span></a> <span class="k">def</span> <span class="nf">jsonschema_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">JSONSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2520"><a href="#Generator-2520"><span class="linenos">2520</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;COLUMNS&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-2521"><a href="#Generator-2521"><span class="linenos">2521</span></a>
+</span><span id="Generator-2522"><a href="#Generator-2522"><span class="linenos">2522</span></a> <span class="k">def</span> <span class="nf">jsontable_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">JSONTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2523"><a href="#Generator-2523"><span class="linenos">2523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2524"><a href="#Generator-2524"><span class="linenos">2524</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="Generator-2525"><a href="#Generator-2525"><span class="linenos">2525</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2526"><a href="#Generator-2526"><span class="linenos">2526</span></a> <span class="n">error_handling</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;error_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator-2527"><a href="#Generator-2527"><span class="linenos">2527</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">error_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">error_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2528"><a href="#Generator-2528"><span class="linenos">2528</span></a> <span class="n">empty_handling</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;empty_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator-2529"><a href="#Generator-2529"><span class="linenos">2529</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">empty_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2530"><a href="#Generator-2530"><span class="linenos">2530</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator-2531"><a href="#Generator-2531"><span class="linenos">2531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator-2532"><a href="#Generator-2532"><span class="linenos">2532</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">path</span><span class="si">}{</span><span class="n">error_handling</span><span class="si">}{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2533"><a href="#Generator-2533"><span class="linenos">2533</span></a> <span class="p">)</span>
+</span><span id="Generator-2534"><a href="#Generator-2534"><span class="linenos">2534</span></a>
+</span><span id="Generator-2535"><a href="#Generator-2535"><span class="linenos">2535</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_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">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2536"><a href="#Generator-2536"><span class="linenos">2536</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2537"><a href="#Generator-2537"><span class="linenos">2537</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
</span><span id="Generator-2538"><a href="#Generator-2538"><span class="linenos">2538</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator-2539"><a href="#Generator-2539"><span class="linenos">2539</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2540"><a href="#Generator-2540"><span class="linenos">2540</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2541"><a href="#Generator-2541"><span class="linenos">2541</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-2542"><a href="#Generator-2542"><span class="linenos">2542</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2543"><a href="#Generator-2543"><span class="linenos">2543</span></a> <span class="k">if</span> <span class="n">expressions</span>
-</span><span id="Generator-2544"><a href="#Generator-2544"><span class="linenos">2544</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2545"><a href="#Generator-2545"><span class="linenos">2545</span></a> <span class="p">)</span>
-</span><span id="Generator-2546"><a href="#Generator-2546"><span class="linenos">2546</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2547"><a href="#Generator-2547"><span class="linenos">2547</span></a>
-</span><span id="Generator-2548"><a href="#Generator-2548"><span class="linenos">2548</span></a> <span class="k">def</span> <span class="nf">in_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">In</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2549"><a href="#Generator-2549"><span class="linenos">2549</span></a> <span class="n">query</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;query&quot;</span><span class="p">)</span>
-</span><span id="Generator-2550"><a href="#Generator-2550"><span class="linenos">2550</span></a> <span class="n">unnest</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;unnest&quot;</span><span class="p">)</span>
-</span><span id="Generator-2551"><a href="#Generator-2551"><span class="linenos">2551</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
-</span><span id="Generator-2552"><a href="#Generator-2552"><span class="linenos">2552</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="s2">&quot; GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2553"><a href="#Generator-2553"><span class="linenos">2553</span></a>
-</span><span id="Generator-2554"><a href="#Generator-2554"><span class="linenos">2554</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Generator-2555"><a href="#Generator-2555"><span class="linenos">2555</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
-</span><span id="Generator-2556"><a href="#Generator-2556"><span class="linenos">2556</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Generator-2557"><a href="#Generator-2557"><span class="linenos">2557</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_unnest_op</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
-</span><span id="Generator-2558"><a href="#Generator-2558"><span class="linenos">2558</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Generator-2559"><a href="#Generator-2559"><span class="linenos">2559</span></a> <span class="n">in_sql</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">field</span><span class="p">)</span>
-</span><span id="Generator-2560"><a href="#Generator-2560"><span class="linenos">2560</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2561"><a href="#Generator-2561"><span class="linenos">2561</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2562"><a href="#Generator-2562"><span class="linenos">2562</span></a>
-</span><span id="Generator-2563"><a href="#Generator-2563"><span class="linenos">2563</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">is_global</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">in_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2564"><a href="#Generator-2564"><span class="linenos">2564</span></a>
-</span><span id="Generator-2565"><a href="#Generator-2565"><span class="linenos">2565</span></a> <span class="k">def</span> <span class="nf">in_unnest_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unnest</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2566"><a href="#Generator-2566"><span class="linenos">2566</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(SELECT </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">unnest</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2567"><a href="#Generator-2567"><span class="linenos">2567</span></a>
-</span><span id="Generator-2568"><a href="#Generator-2568"><span class="linenos">2568</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2569"><a href="#Generator-2569"><span class="linenos">2569</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
-</span><span id="Generator-2570"><a href="#Generator-2570"><span class="linenos">2570</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span><span class="p">:</span>
-</span><span id="Generator-2571"><a href="#Generator-2571"><span class="linenos">2571</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
-</span><span id="Generator-2572"><a href="#Generator-2572"><span class="linenos">2572</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2573"><a href="#Generator-2573"><span class="linenos">2573</span></a>
-</span><span id="Generator-2574"><a href="#Generator-2574"><span class="linenos">2574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_STRING_INTERVAL</span><span class="p">:</span>
-</span><span id="Generator-2575"><a href="#Generator-2575"><span class="linenos">2575</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2576"><a href="#Generator-2576"><span class="linenos">2576</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2577"><a href="#Generator-2577"><span class="linenos">2577</span></a>
-</span><span id="Generator-2578"><a href="#Generator-2578"><span class="linenos">2578</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2579"><a href="#Generator-2579"><span class="linenos">2579</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Generator-2580"><a href="#Generator-2580"><span class="linenos">2580</span></a> <span class="n">unwrapped</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">)</span>
-</span><span id="Generator-2581"><a href="#Generator-2581"><span class="linenos">2581</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unwrapped</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2582"><a href="#Generator-2582"><span class="linenos">2582</span></a>
-</span><span id="Generator-2583"><a href="#Generator-2583"><span class="linenos">2583</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2539"><a href="#Generator-2539"><span class="linenos">2539</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2540"><a href="#Generator-2540"><span class="linenos">2540</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2541"><a href="#Generator-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2542"><a href="#Generator-2542"><span class="linenos">2542</span></a>
+</span><span id="Generator-2543"><a href="#Generator-2543"><span class="linenos">2543</span></a> <span class="k">def</span> <span class="nf">openjson_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">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2544"><a href="#Generator-2544"><span class="linenos">2544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2545"><a href="#Generator-2545"><span class="linenos">2545</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="Generator-2546"><a href="#Generator-2546"><span class="linenos">2546</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2547"><a href="#Generator-2547"><span class="linenos">2547</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2548"><a href="#Generator-2548"><span class="linenos">2548</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-2549"><a href="#Generator-2549"><span class="linenos">2549</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2550"><a href="#Generator-2550"><span class="linenos">2550</span></a> <span class="k">if</span> <span class="n">expressions</span>
+</span><span id="Generator-2551"><a href="#Generator-2551"><span class="linenos">2551</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2552"><a href="#Generator-2552"><span class="linenos">2552</span></a> <span class="p">)</span>
+</span><span id="Generator-2553"><a href="#Generator-2553"><span class="linenos">2553</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2554"><a href="#Generator-2554"><span class="linenos">2554</span></a>
+</span><span id="Generator-2555"><a href="#Generator-2555"><span class="linenos">2555</span></a> <span class="k">def</span> <span class="nf">in_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">In</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2556"><a href="#Generator-2556"><span class="linenos">2556</span></a> <span class="n">query</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;query&quot;</span><span class="p">)</span>
+</span><span id="Generator-2557"><a href="#Generator-2557"><span class="linenos">2557</span></a> <span class="n">unnest</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;unnest&quot;</span><span class="p">)</span>
+</span><span id="Generator-2558"><a href="#Generator-2558"><span class="linenos">2558</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
+</span><span id="Generator-2559"><a href="#Generator-2559"><span class="linenos">2559</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="s2">&quot; GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2560"><a href="#Generator-2560"><span class="linenos">2560</span></a>
+</span><span id="Generator-2561"><a href="#Generator-2561"><span class="linenos">2561</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Generator-2562"><a href="#Generator-2562"><span class="linenos">2562</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
+</span><span id="Generator-2563"><a href="#Generator-2563"><span class="linenos">2563</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Generator-2564"><a href="#Generator-2564"><span class="linenos">2564</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_unnest_op</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
+</span><span id="Generator-2565"><a href="#Generator-2565"><span class="linenos">2565</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Generator-2566"><a href="#Generator-2566"><span class="linenos">2566</span></a> <span class="n">in_sql</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">field</span><span class="p">)</span>
+</span><span id="Generator-2567"><a href="#Generator-2567"><span class="linenos">2567</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2568"><a href="#Generator-2568"><span class="linenos">2568</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2569"><a href="#Generator-2569"><span class="linenos">2569</span></a>
+</span><span id="Generator-2570"><a href="#Generator-2570"><span class="linenos">2570</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">is_global</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">in_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2571"><a href="#Generator-2571"><span class="linenos">2571</span></a>
+</span><span id="Generator-2572"><a href="#Generator-2572"><span class="linenos">2572</span></a> <span class="k">def</span> <span class="nf">in_unnest_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unnest</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2573"><a href="#Generator-2573"><span class="linenos">2573</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(SELECT </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">unnest</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2574"><a href="#Generator-2574"><span class="linenos">2574</span></a>
+</span><span id="Generator-2575"><a href="#Generator-2575"><span class="linenos">2575</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2576"><a href="#Generator-2576"><span class="linenos">2576</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
+</span><span id="Generator-2577"><a href="#Generator-2577"><span class="linenos">2577</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span><span class="p">:</span>
+</span><span id="Generator-2578"><a href="#Generator-2578"><span class="linenos">2578</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
+</span><span id="Generator-2579"><a href="#Generator-2579"><span class="linenos">2579</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2580"><a href="#Generator-2580"><span class="linenos">2580</span></a>
+</span><span id="Generator-2581"><a href="#Generator-2581"><span class="linenos">2581</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_STRING_INTERVAL</span><span class="p">:</span>
+</span><span id="Generator-2582"><a href="#Generator-2582"><span class="linenos">2582</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2583"><a href="#Generator-2583"><span class="linenos">2583</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2584"><a href="#Generator-2584"><span class="linenos">2584</span></a>
-</span><span id="Generator-2585"><a href="#Generator-2585"><span class="linenos">2585</span></a> <span class="k">def</span> <span class="nf">return_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">Return</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2586"><a href="#Generator-2586"><span class="linenos">2586</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURN </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="Generator-2587"><a href="#Generator-2587"><span class="linenos">2587</span></a>
-</span><span id="Generator-2588"><a href="#Generator-2588"><span class="linenos">2588</span></a> <span class="k">def</span> <span class="nf">reference_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">Reference</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2589"><a href="#Generator-2589"><span class="linenos">2589</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2590"><a href="#Generator-2590"><span class="linenos">2590</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2591"><a href="#Generator-2591"><span class="linenos">2591</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2592"><a href="#Generator-2592"><span class="linenos">2592</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-2593"><a href="#Generator-2593"><span class="linenos">2593</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2594"><a href="#Generator-2594"><span class="linenos">2594</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFERENCES </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2595"><a href="#Generator-2595"><span class="linenos">2595</span></a>
-</span><span id="Generator-2596"><a href="#Generator-2596"><span class="linenos">2596</span></a> <span class="k">def</span> <span class="nf">anonymous_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">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2597"><a href="#Generator-2597"><span class="linenos">2597</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-2598"><a href="#Generator-2598"><span class="linenos">2598</span></a>
-</span><span id="Generator-2599"><a href="#Generator-2599"><span class="linenos">2599</span></a> <span class="k">def</span> <span class="nf">paren_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">Paren</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2600"><a href="#Generator-2600"><span class="linenos">2600</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="Generator-2601"><a href="#Generator-2601"><span class="linenos">2601</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2602"><a href="#Generator-2602"><span class="linenos">2602</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2603"><a href="#Generator-2603"><span class="linenos">2603</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2604"><a href="#Generator-2604"><span class="linenos">2604</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2585"><a href="#Generator-2585"><span class="linenos">2585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2586"><a href="#Generator-2586"><span class="linenos">2586</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-2587"><a href="#Generator-2587"><span class="linenos">2587</span></a> <span class="n">unwrapped</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">)</span>
+</span><span id="Generator-2588"><a href="#Generator-2588"><span class="linenos">2588</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unwrapped</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2589"><a href="#Generator-2589"><span class="linenos">2589</span></a>
+</span><span id="Generator-2590"><a href="#Generator-2590"><span class="linenos">2590</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2591"><a href="#Generator-2591"><span class="linenos">2591</span></a>
+</span><span id="Generator-2592"><a href="#Generator-2592"><span class="linenos">2592</span></a> <span class="k">def</span> <span class="nf">return_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">Return</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2593"><a href="#Generator-2593"><span class="linenos">2593</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURN </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="Generator-2594"><a href="#Generator-2594"><span class="linenos">2594</span></a>
+</span><span id="Generator-2595"><a href="#Generator-2595"><span class="linenos">2595</span></a> <span class="k">def</span> <span class="nf">reference_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">Reference</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2596"><a href="#Generator-2596"><span class="linenos">2596</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2597"><a href="#Generator-2597"><span class="linenos">2597</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2598"><a href="#Generator-2598"><span class="linenos">2598</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2599"><a href="#Generator-2599"><span class="linenos">2599</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-2600"><a href="#Generator-2600"><span class="linenos">2600</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2601"><a href="#Generator-2601"><span class="linenos">2601</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFERENCES </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2602"><a href="#Generator-2602"><span class="linenos">2602</span></a>
+</span><span id="Generator-2603"><a href="#Generator-2603"><span class="linenos">2603</span></a> <span class="k">def</span> <span class="nf">anonymous_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">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2604"><a href="#Generator-2604"><span class="linenos">2604</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Generator-2605"><a href="#Generator-2605"><span class="linenos">2605</span></a>
-</span><span id="Generator-2606"><a href="#Generator-2606"><span class="linenos">2606</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator-2607"><a href="#Generator-2607"><span class="linenos">2607</span></a>
-</span><span id="Generator-2608"><a href="#Generator-2608"><span class="linenos">2608</span></a> <span class="k">def</span> <span class="nf">neg_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">Neg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2609"><a href="#Generator-2609"><span class="linenos">2609</span></a> <span class="c1"># This makes sure we don&#39;t convert &quot;- - 5&quot; to &quot;--5&quot;, which is a comment</span>
-</span><span id="Generator-2610"><a href="#Generator-2610"><span class="linenos">2610</span></a> <span class="n">this_sql</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="Generator-2611"><a href="#Generator-2611"><span class="linenos">2611</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">this_sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2612"><a href="#Generator-2612"><span class="linenos">2612</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;-</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2613"><a href="#Generator-2613"><span class="linenos">2613</span></a>
-</span><span id="Generator-2614"><a href="#Generator-2614"><span class="linenos">2614</span></a> <span class="k">def</span> <span class="nf">not_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">Not</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2615"><a href="#Generator-2615"><span class="linenos">2615</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NOT </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="Generator-2616"><a href="#Generator-2616"><span class="linenos">2616</span></a>
-</span><span id="Generator-2617"><a href="#Generator-2617"><span class="linenos">2617</span></a> <span class="k">def</span> <span class="nf">alias_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">Alias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2618"><a href="#Generator-2618"><span class="linenos">2618</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator-2619"><a href="#Generator-2619"><span class="linenos">2619</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2620"><a href="#Generator-2620"><span class="linenos">2620</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2621"><a href="#Generator-2621"><span class="linenos">2621</span></a>
-</span><span id="Generator-2622"><a href="#Generator-2622"><span class="linenos">2622</span></a> <span class="k">def</span> <span class="nf">pivotalias_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">PivotAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2623"><a href="#Generator-2623"><span class="linenos">2623</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
-</span><span id="Generator-2624"><a href="#Generator-2624"><span class="linenos">2624</span></a> <span class="n">identifier_alias</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
-</span><span id="Generator-2625"><a href="#Generator-2625"><span class="linenos">2625</span></a>
-</span><span id="Generator-2626"><a href="#Generator-2626"><span class="linenos">2626</span></a> <span class="k">if</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="Generator-2627"><a href="#Generator-2627"><span class="linenos">2627</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
-</span><span id="Generator-2628"><a href="#Generator-2628"><span class="linenos">2628</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="Generator-2629"><a href="#Generator-2629"><span class="linenos">2629</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
-</span><span id="Generator-2630"><a href="#Generator-2630"><span class="linenos">2630</span></a>
-</span><span id="Generator-2631"><a href="#Generator-2631"><span class="linenos">2631</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2606"><a href="#Generator-2606"><span class="linenos">2606</span></a> <span class="k">def</span> <span class="nf">paren_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">Paren</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2607"><a href="#Generator-2607"><span class="linenos">2607</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="Generator-2608"><a href="#Generator-2608"><span class="linenos">2608</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2609"><a href="#Generator-2609"><span class="linenos">2609</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2610"><a href="#Generator-2610"><span class="linenos">2610</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2611"><a href="#Generator-2611"><span class="linenos">2611</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2612"><a href="#Generator-2612"><span class="linenos">2612</span></a>
+</span><span id="Generator-2613"><a href="#Generator-2613"><span class="linenos">2613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator-2614"><a href="#Generator-2614"><span class="linenos">2614</span></a>
+</span><span id="Generator-2615"><a href="#Generator-2615"><span class="linenos">2615</span></a> <span class="k">def</span> <span class="nf">neg_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">Neg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2616"><a href="#Generator-2616"><span class="linenos">2616</span></a> <span class="c1"># This makes sure we don&#39;t convert &quot;- - 5&quot; to &quot;--5&quot;, which is a comment</span>
+</span><span id="Generator-2617"><a href="#Generator-2617"><span class="linenos">2617</span></a> <span class="n">this_sql</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="Generator-2618"><a href="#Generator-2618"><span class="linenos">2618</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">this_sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2619"><a href="#Generator-2619"><span class="linenos">2619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;-</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2620"><a href="#Generator-2620"><span class="linenos">2620</span></a>
+</span><span id="Generator-2621"><a href="#Generator-2621"><span class="linenos">2621</span></a> <span class="k">def</span> <span class="nf">not_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">Not</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2622"><a href="#Generator-2622"><span class="linenos">2622</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NOT </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="Generator-2623"><a href="#Generator-2623"><span class="linenos">2623</span></a>
+</span><span id="Generator-2624"><a href="#Generator-2624"><span class="linenos">2624</span></a> <span class="k">def</span> <span class="nf">alias_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">Alias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2625"><a href="#Generator-2625"><span class="linenos">2625</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator-2626"><a href="#Generator-2626"><span class="linenos">2626</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2627"><a href="#Generator-2627"><span class="linenos">2627</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2628"><a href="#Generator-2628"><span class="linenos">2628</span></a>
+</span><span id="Generator-2629"><a href="#Generator-2629"><span class="linenos">2629</span></a> <span class="k">def</span> <span class="nf">pivotalias_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">PivotAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2630"><a href="#Generator-2630"><span class="linenos">2630</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
+</span><span id="Generator-2631"><a href="#Generator-2631"><span class="linenos">2631</span></a> <span class="n">identifier_alias</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
</span><span id="Generator-2632"><a href="#Generator-2632"><span class="linenos">2632</span></a>
-</span><span id="Generator-2633"><a href="#Generator-2633"><span class="linenos">2633</span></a> <span class="k">def</span> <span class="nf">aliases_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">Aliases</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2634"><a href="#Generator-2634"><span class="linenos">2634</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2635"><a href="#Generator-2635"><span class="linenos">2635</span></a>
-</span><span id="Generator-2636"><a href="#Generator-2636"><span class="linenos">2636</span></a> <span class="k">def</span> <span class="nf">atindex_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2637"><a href="#Generator-2637"><span class="linenos">2637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2638"><a href="#Generator-2638"><span class="linenos">2638</span></a> <span class="n">index</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="Generator-2639"><a href="#Generator-2639"><span class="linenos">2639</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2640"><a href="#Generator-2640"><span class="linenos">2640</span></a>
-</span><span id="Generator-2641"><a href="#Generator-2641"><span class="linenos">2641</span></a> <span class="k">def</span> <span class="nf">attimezone_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2642"><a href="#Generator-2642"><span class="linenos">2642</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2643"><a href="#Generator-2643"><span class="linenos">2643</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
-</span><span id="Generator-2644"><a href="#Generator-2644"><span class="linenos">2644</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2645"><a href="#Generator-2645"><span class="linenos">2645</span></a>
-</span><span id="Generator-2646"><a href="#Generator-2646"><span class="linenos">2646</span></a> <span class="k">def</span> <span class="nf">fromtimezone_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">FromTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2647"><a href="#Generator-2647"><span class="linenos">2647</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2648"><a href="#Generator-2648"><span class="linenos">2648</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
-</span><span id="Generator-2649"><a href="#Generator-2649"><span class="linenos">2649</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2"> AT TIME ZONE &#39;UTC&#39;&quot;</span>
-</span><span id="Generator-2650"><a href="#Generator-2650"><span class="linenos">2650</span></a>
-</span><span id="Generator-2651"><a href="#Generator-2651"><span class="linenos">2651</span></a> <span class="k">def</span> <span class="nf">add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2652"><a href="#Generator-2652"><span class="linenos">2652</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;+&quot;</span><span class="p">)</span>
-</span><span id="Generator-2653"><a href="#Generator-2653"><span class="linenos">2653</span></a>
-</span><span id="Generator-2654"><a href="#Generator-2654"><span class="linenos">2654</span></a> <span class="k">def</span> <span class="nf">and_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">And</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2655"><a href="#Generator-2655"><span class="linenos">2655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">)</span>
-</span><span id="Generator-2656"><a href="#Generator-2656"><span class="linenos">2656</span></a>
-</span><span id="Generator-2657"><a href="#Generator-2657"><span class="linenos">2657</span></a> <span class="k">def</span> <span class="nf">xor_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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2658"><a href="#Generator-2658"><span class="linenos">2658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
-</span><span id="Generator-2659"><a href="#Generator-2659"><span class="linenos">2659</span></a>
-</span><span id="Generator-2660"><a href="#Generator-2660"><span class="linenos">2660</span></a> <span class="k">def</span> <span class="nf">connector_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">Connector</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2661"><a href="#Generator-2661"><span class="linenos">2661</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator-2662"><a href="#Generator-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span>
+</span><span id="Generator-2633"><a href="#Generator-2633"><span class="linenos">2633</span></a> <span class="k">if</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="Generator-2634"><a href="#Generator-2634"><span class="linenos">2634</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
+</span><span id="Generator-2635"><a href="#Generator-2635"><span class="linenos">2635</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="Generator-2636"><a href="#Generator-2636"><span class="linenos">2636</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
+</span><span id="Generator-2637"><a href="#Generator-2637"><span class="linenos">2637</span></a>
+</span><span id="Generator-2638"><a href="#Generator-2638"><span class="linenos">2638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2639"><a href="#Generator-2639"><span class="linenos">2639</span></a>
+</span><span id="Generator-2640"><a href="#Generator-2640"><span class="linenos">2640</span></a> <span class="k">def</span> <span class="nf">aliases_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">Aliases</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2641"><a href="#Generator-2641"><span class="linenos">2641</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2642"><a href="#Generator-2642"><span class="linenos">2642</span></a>
+</span><span id="Generator-2643"><a href="#Generator-2643"><span class="linenos">2643</span></a> <span class="k">def</span> <span class="nf">atindex_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2644"><a href="#Generator-2644"><span class="linenos">2644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2645"><a href="#Generator-2645"><span class="linenos">2645</span></a> <span class="n">index</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="Generator-2646"><a href="#Generator-2646"><span class="linenos">2646</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2647"><a href="#Generator-2647"><span class="linenos">2647</span></a>
+</span><span id="Generator-2648"><a href="#Generator-2648"><span class="linenos">2648</span></a> <span class="k">def</span> <span class="nf">attimezone_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2649"><a href="#Generator-2649"><span class="linenos">2649</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2650"><a href="#Generator-2650"><span class="linenos">2650</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
+</span><span id="Generator-2651"><a href="#Generator-2651"><span class="linenos">2651</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2652"><a href="#Generator-2652"><span class="linenos">2652</span></a>
+</span><span id="Generator-2653"><a href="#Generator-2653"><span class="linenos">2653</span></a> <span class="k">def</span> <span class="nf">fromtimezone_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">FromTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2654"><a href="#Generator-2654"><span class="linenos">2654</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2655"><a href="#Generator-2655"><span class="linenos">2655</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
+</span><span id="Generator-2656"><a href="#Generator-2656"><span class="linenos">2656</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2"> AT TIME ZONE &#39;UTC&#39;&quot;</span>
+</span><span id="Generator-2657"><a href="#Generator-2657"><span class="linenos">2657</span></a>
+</span><span id="Generator-2658"><a href="#Generator-2658"><span class="linenos">2658</span></a> <span class="k">def</span> <span class="nf">add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2659"><a href="#Generator-2659"><span class="linenos">2659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;+&quot;</span><span class="p">)</span>
+</span><span id="Generator-2660"><a href="#Generator-2660"><span class="linenos">2660</span></a>
+</span><span id="Generator-2661"><a href="#Generator-2661"><span class="linenos">2661</span></a> <span class="k">def</span> <span class="nf">and_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">And</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2662"><a href="#Generator-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">)</span>
</span><span id="Generator-2663"><a href="#Generator-2663"><span class="linenos">2663</span></a>
-</span><span id="Generator-2664"><a href="#Generator-2664"><span class="linenos">2664</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="Generator-2665"><a href="#Generator-2665"><span class="linenos">2665</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="Generator-2666"><a href="#Generator-2666"><span class="linenos">2666</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">unnest</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Generator-2667"><a href="#Generator-2667"><span class="linenos">2667</span></a> <span class="p">)</span>
-</span><span id="Generator-2668"><a href="#Generator-2668"><span class="linenos">2668</span></a>
-</span><span id="Generator-2669"><a href="#Generator-2669"><span class="linenos">2669</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator-2670"><a href="#Generator-2670"><span class="linenos">2670</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span>
-</span><span id="Generator-2671"><a href="#Generator-2671"><span class="linenos">2671</span></a>
-</span><span id="Generator-2672"><a href="#Generator-2672"><span class="linenos">2672</span></a> <span class="k">def</span> <span class="nf">bitwiseand_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">BitwiseAnd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2673"><a href="#Generator-2673"><span class="linenos">2673</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&amp;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2674"><a href="#Generator-2674"><span class="linenos">2674</span></a>
-</span><span id="Generator-2675"><a href="#Generator-2675"><span class="linenos">2675</span></a> <span class="k">def</span> <span class="nf">bitwiseleftshift_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">BitwiseLeftShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2676"><a href="#Generator-2676"><span class="linenos">2676</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&lt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2677"><a href="#Generator-2677"><span class="linenos">2677</span></a>
-</span><span id="Generator-2678"><a href="#Generator-2678"><span class="linenos">2678</span></a> <span class="k">def</span> <span class="nf">bitwisenot_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">BitwiseNot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2679"><a href="#Generator-2679"><span class="linenos">2679</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="Generator-2680"><a href="#Generator-2680"><span class="linenos">2680</span></a>
-</span><span id="Generator-2681"><a href="#Generator-2681"><span class="linenos">2681</span></a> <span class="k">def</span> <span class="nf">bitwiseor_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">BitwiseOr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2682"><a href="#Generator-2682"><span class="linenos">2682</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;|&quot;</span><span class="p">)</span>
-</span><span id="Generator-2683"><a href="#Generator-2683"><span class="linenos">2683</span></a>
-</span><span id="Generator-2684"><a href="#Generator-2684"><span class="linenos">2684</span></a> <span class="k">def</span> <span class="nf">bitwiserightshift_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">BitwiseRightShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2685"><a href="#Generator-2685"><span class="linenos">2685</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2686"><a href="#Generator-2686"><span class="linenos">2686</span></a>
-</span><span id="Generator-2687"><a href="#Generator-2687"><span class="linenos">2687</span></a> <span class="k">def</span> <span class="nf">bitwisexor_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">BitwiseXor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2688"><a href="#Generator-2688"><span class="linenos">2688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">)</span>
-</span><span id="Generator-2689"><a href="#Generator-2689"><span class="linenos">2689</span></a>
-</span><span id="Generator-2690"><a href="#Generator-2690"><span class="linenos">2690</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2691"><a href="#Generator-2691"><span class="linenos">2691</span></a> <span class="n">format_sql</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;format&quot;</span><span class="p">)</span>
-</span><span id="Generator-2692"><a href="#Generator-2692"><span class="linenos">2692</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2693"><a href="#Generator-2693"><span class="linenos">2693</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
-</span><span id="Generator-2694"><a href="#Generator-2694"><span class="linenos">2694</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2695"><a href="#Generator-2695"><span class="linenos">2695</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS</span><span class="si">{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2664"><a href="#Generator-2664"><span class="linenos">2664</span></a> <span class="k">def</span> <span class="nf">xor_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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2665"><a href="#Generator-2665"><span class="linenos">2665</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+</span><span id="Generator-2666"><a href="#Generator-2666"><span class="linenos">2666</span></a>
+</span><span id="Generator-2667"><a href="#Generator-2667"><span class="linenos">2667</span></a> <span class="k">def</span> <span class="nf">connector_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">Connector</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2668"><a href="#Generator-2668"><span class="linenos">2668</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator-2669"><a href="#Generator-2669"><span class="linenos">2669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span>
+</span><span id="Generator-2670"><a href="#Generator-2670"><span class="linenos">2670</span></a>
+</span><span id="Generator-2671"><a href="#Generator-2671"><span class="linenos">2671</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="Generator-2672"><a href="#Generator-2672"><span class="linenos">2672</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="Generator-2673"><a href="#Generator-2673"><span class="linenos">2673</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">unnest</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Generator-2674"><a href="#Generator-2674"><span class="linenos">2674</span></a> <span class="p">)</span>
+</span><span id="Generator-2675"><a href="#Generator-2675"><span class="linenos">2675</span></a>
+</span><span id="Generator-2676"><a href="#Generator-2676"><span class="linenos">2676</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator-2677"><a href="#Generator-2677"><span class="linenos">2677</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span>
+</span><span id="Generator-2678"><a href="#Generator-2678"><span class="linenos">2678</span></a>
+</span><span id="Generator-2679"><a href="#Generator-2679"><span class="linenos">2679</span></a> <span class="k">def</span> <span class="nf">bitwiseand_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">BitwiseAnd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2680"><a href="#Generator-2680"><span class="linenos">2680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&amp;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2681"><a href="#Generator-2681"><span class="linenos">2681</span></a>
+</span><span id="Generator-2682"><a href="#Generator-2682"><span class="linenos">2682</span></a> <span class="k">def</span> <span class="nf">bitwiseleftshift_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">BitwiseLeftShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2683"><a href="#Generator-2683"><span class="linenos">2683</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&lt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2684"><a href="#Generator-2684"><span class="linenos">2684</span></a>
+</span><span id="Generator-2685"><a href="#Generator-2685"><span class="linenos">2685</span></a> <span class="k">def</span> <span class="nf">bitwisenot_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">BitwiseNot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2686"><a href="#Generator-2686"><span class="linenos">2686</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="Generator-2687"><a href="#Generator-2687"><span class="linenos">2687</span></a>
+</span><span id="Generator-2688"><a href="#Generator-2688"><span class="linenos">2688</span></a> <span class="k">def</span> <span class="nf">bitwiseor_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">BitwiseOr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2689"><a href="#Generator-2689"><span class="linenos">2689</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;|&quot;</span><span class="p">)</span>
+</span><span id="Generator-2690"><a href="#Generator-2690"><span class="linenos">2690</span></a>
+</span><span id="Generator-2691"><a href="#Generator-2691"><span class="linenos">2691</span></a> <span class="k">def</span> <span class="nf">bitwiserightshift_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">BitwiseRightShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2692"><a href="#Generator-2692"><span class="linenos">2692</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2693"><a href="#Generator-2693"><span class="linenos">2693</span></a>
+</span><span id="Generator-2694"><a href="#Generator-2694"><span class="linenos">2694</span></a> <span class="k">def</span> <span class="nf">bitwisexor_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">BitwiseXor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2695"><a href="#Generator-2695"><span class="linenos">2695</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">)</span>
</span><span id="Generator-2696"><a href="#Generator-2696"><span class="linenos">2696</span></a>
-</span><span id="Generator-2697"><a href="#Generator-2697"><span class="linenos">2697</span></a> <span class="k">def</span> <span class="nf">currentdate_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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2698"><a href="#Generator-2698"><span class="linenos">2698</span></a> <span class="n">zone</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="Generator-2699"><a href="#Generator-2699"><span class="linenos">2699</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE(</span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
-</span><span id="Generator-2700"><a href="#Generator-2700"><span class="linenos">2700</span></a>
-</span><span id="Generator-2701"><a href="#Generator-2701"><span class="linenos">2701</span></a> <span class="k">def</span> <span class="nf">currenttimestamp_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">CurrentTimestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2702"><a href="#Generator-2702"><span class="linenos">2702</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;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2697"><a href="#Generator-2697"><span class="linenos">2697</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2698"><a href="#Generator-2698"><span class="linenos">2698</span></a> <span class="n">format_sql</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;format&quot;</span><span class="p">)</span>
+</span><span id="Generator-2699"><a href="#Generator-2699"><span class="linenos">2699</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2700"><a href="#Generator-2700"><span class="linenos">2700</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
+</span><span id="Generator-2701"><a href="#Generator-2701"><span class="linenos">2701</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2702"><a href="#Generator-2702"><span class="linenos">2702</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS</span><span class="si">{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="Generator-2703"><a href="#Generator-2703"><span class="linenos">2703</span></a>
-</span><span id="Generator-2704"><a href="#Generator-2704"><span class="linenos">2704</span></a> <span class="k">def</span> <span class="nf">collate_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">Collate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2705"><a href="#Generator-2705"><span class="linenos">2705</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLLATE_IS_FUNC</span><span class="p">:</span>
-</span><span id="Generator-2706"><a href="#Generator-2706"><span class="linenos">2706</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2707"><a href="#Generator-2707"><span class="linenos">2707</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;COLLATE&quot;</span><span class="p">)</span>
-</span><span id="Generator-2708"><a href="#Generator-2708"><span class="linenos">2708</span></a>
-</span><span id="Generator-2709"><a href="#Generator-2709"><span class="linenos">2709</span></a> <span class="k">def</span> <span class="nf">command_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">Command</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2710"><a href="#Generator-2710"><span class="linenos">2710</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2711"><a href="#Generator-2711"><span class="linenos">2711</span></a>
-</span><span id="Generator-2712"><a href="#Generator-2712"><span class="linenos">2712</span></a> <span class="k">def</span> <span class="nf">comment_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">Comment</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2713"><a href="#Generator-2713"><span class="linenos">2713</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2714"><a href="#Generator-2714"><span class="linenos">2714</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="Generator-2715"><a href="#Generator-2715"><span class="linenos">2715</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator-2716"><a href="#Generator-2716"><span class="linenos">2716</span></a> <span class="n">expression_sql</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="Generator-2717"><a href="#Generator-2717"><span class="linenos">2717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2704"><a href="#Generator-2704"><span class="linenos">2704</span></a> <span class="k">def</span> <span class="nf">currentdate_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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2705"><a href="#Generator-2705"><span class="linenos">2705</span></a> <span class="n">zone</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="Generator-2706"><a href="#Generator-2706"><span class="linenos">2706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE(</span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
+</span><span id="Generator-2707"><a href="#Generator-2707"><span class="linenos">2707</span></a>
+</span><span id="Generator-2708"><a href="#Generator-2708"><span class="linenos">2708</span></a> <span class="k">def</span> <span class="nf">currenttimestamp_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">CurrentTimestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2709"><a href="#Generator-2709"><span class="linenos">2709</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;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2710"><a href="#Generator-2710"><span class="linenos">2710</span></a>
+</span><span id="Generator-2711"><a href="#Generator-2711"><span class="linenos">2711</span></a> <span class="k">def</span> <span class="nf">collate_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">Collate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2712"><a href="#Generator-2712"><span class="linenos">2712</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLLATE_IS_FUNC</span><span class="p">:</span>
+</span><span id="Generator-2713"><a href="#Generator-2713"><span class="linenos">2713</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2714"><a href="#Generator-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;COLLATE&quot;</span><span class="p">)</span>
+</span><span id="Generator-2715"><a href="#Generator-2715"><span class="linenos">2715</span></a>
+</span><span id="Generator-2716"><a href="#Generator-2716"><span class="linenos">2716</span></a> <span class="k">def</span> <span class="nf">command_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">Command</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2717"><a href="#Generator-2717"><span class="linenos">2717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2718"><a href="#Generator-2718"><span class="linenos">2718</span></a>
-</span><span id="Generator-2719"><a href="#Generator-2719"><span class="linenos">2719</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_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">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2719"><a href="#Generator-2719"><span class="linenos">2719</span></a> <span class="k">def</span> <span class="nf">comment_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">Comment</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Generator-2720"><a href="#Generator-2720"><span class="linenos">2720</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2721"><a href="#Generator-2721"><span class="linenos">2721</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2722"><a href="#Generator-2722"><span class="linenos">2722</span></a> <span class="n">recompress</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;recompress&quot;</span><span class="p">)</span>
-</span><span id="Generator-2723"><a href="#Generator-2723"><span class="linenos">2723</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2724"><a href="#Generator-2724"><span class="linenos">2724</span></a> <span class="n">to_disk</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;to_disk&quot;</span><span class="p">)</span>
-</span><span id="Generator-2725"><a href="#Generator-2725"><span class="linenos">2725</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2726"><a href="#Generator-2726"><span class="linenos">2726</span></a> <span class="n">to_volume</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;to_volume&quot;</span><span class="p">)</span>
-</span><span id="Generator-2727"><a href="#Generator-2727"><span class="linenos">2727</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2728"><a href="#Generator-2728"><span class="linenos">2728</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2729"><a href="#Generator-2729"><span class="linenos">2729</span></a>
-</span><span id="Generator-2730"><a href="#Generator-2730"><span class="linenos">2730</span></a> <span class="k">def</span> <span class="nf">mergetreettl_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">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2731"><a href="#Generator-2731"><span class="linenos">2731</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator-2732"><a href="#Generator-2732"><span class="linenos">2732</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
-</span><span id="Generator-2733"><a href="#Generator-2733"><span class="linenos">2733</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
-</span><span id="Generator-2734"><a href="#Generator-2734"><span class="linenos">2734</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2735"><a href="#Generator-2735"><span class="linenos">2735</span></a>
-</span><span id="Generator-2736"><a href="#Generator-2736"><span class="linenos">2736</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator-2737"><a href="#Generator-2737"><span class="linenos">2737</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2738"><a href="#Generator-2738"><span class="linenos">2738</span></a>
-</span><span id="Generator-2739"><a href="#Generator-2739"><span class="linenos">2739</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2740"><a href="#Generator-2740"><span class="linenos">2740</span></a>
-</span><span id="Generator-2741"><a href="#Generator-2741"><span class="linenos">2741</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2742"><a href="#Generator-2742"><span class="linenos">2742</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
-</span><span id="Generator-2743"><a href="#Generator-2743"><span class="linenos">2743</span></a>
-</span><span id="Generator-2744"><a href="#Generator-2744"><span class="linenos">2744</span></a> <span class="k">def</span> <span class="nf">commit_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">Commit</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2745"><a href="#Generator-2745"><span class="linenos">2745</span></a> <span class="n">chain</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;chain&quot;</span><span class="p">)</span>
-</span><span id="Generator-2746"><a href="#Generator-2746"><span class="linenos">2746</span></a> <span class="k">if</span> <span class="n">chain</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-2747"><a href="#Generator-2747"><span class="linenos">2747</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="s2">&quot; AND CHAIN&quot;</span> <span class="k">if</span> <span class="n">chain</span> <span class="k">else</span> <span class="s2">&quot; AND NO CHAIN&quot;</span>
-</span><span id="Generator-2748"><a href="#Generator-2748"><span class="linenos">2748</span></a>
-</span><span id="Generator-2749"><a href="#Generator-2749"><span class="linenos">2749</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT</span><span class="si">{</span><span class="n">chain</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2721"><a href="#Generator-2721"><span class="linenos">2721</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="Generator-2722"><a href="#Generator-2722"><span class="linenos">2722</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator-2723"><a href="#Generator-2723"><span class="linenos">2723</span></a> <span class="n">expression_sql</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="Generator-2724"><a href="#Generator-2724"><span class="linenos">2724</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2725"><a href="#Generator-2725"><span class="linenos">2725</span></a>
+</span><span id="Generator-2726"><a href="#Generator-2726"><span class="linenos">2726</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_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">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2727"><a href="#Generator-2727"><span class="linenos">2727</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2728"><a href="#Generator-2728"><span class="linenos">2728</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2729"><a href="#Generator-2729"><span class="linenos">2729</span></a> <span class="n">recompress</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;recompress&quot;</span><span class="p">)</span>
+</span><span id="Generator-2730"><a href="#Generator-2730"><span class="linenos">2730</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2731"><a href="#Generator-2731"><span class="linenos">2731</span></a> <span class="n">to_disk</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;to_disk&quot;</span><span class="p">)</span>
+</span><span id="Generator-2732"><a href="#Generator-2732"><span class="linenos">2732</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2733"><a href="#Generator-2733"><span class="linenos">2733</span></a> <span class="n">to_volume</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;to_volume&quot;</span><span class="p">)</span>
+</span><span id="Generator-2734"><a href="#Generator-2734"><span class="linenos">2734</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2735"><a href="#Generator-2735"><span class="linenos">2735</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2736"><a href="#Generator-2736"><span class="linenos">2736</span></a>
+</span><span id="Generator-2737"><a href="#Generator-2737"><span class="linenos">2737</span></a> <span class="k">def</span> <span class="nf">mergetreettl_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">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2738"><a href="#Generator-2738"><span class="linenos">2738</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator-2739"><a href="#Generator-2739"><span class="linenos">2739</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
+</span><span id="Generator-2740"><a href="#Generator-2740"><span class="linenos">2740</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
+</span><span id="Generator-2741"><a href="#Generator-2741"><span class="linenos">2741</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2742"><a href="#Generator-2742"><span class="linenos">2742</span></a>
+</span><span id="Generator-2743"><a href="#Generator-2743"><span class="linenos">2743</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator-2744"><a href="#Generator-2744"><span class="linenos">2744</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2745"><a href="#Generator-2745"><span class="linenos">2745</span></a>
+</span><span id="Generator-2746"><a href="#Generator-2746"><span class="linenos">2746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2747"><a href="#Generator-2747"><span class="linenos">2747</span></a>
+</span><span id="Generator-2748"><a href="#Generator-2748"><span class="linenos">2748</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2749"><a href="#Generator-2749"><span class="linenos">2749</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
</span><span id="Generator-2750"><a href="#Generator-2750"><span class="linenos">2750</span></a>
-</span><span id="Generator-2751"><a href="#Generator-2751"><span class="linenos">2751</span></a> <span class="k">def</span> <span class="nf">rollback_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">Rollback</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2752"><a href="#Generator-2752"><span class="linenos">2752</span></a> <span class="n">savepoint</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;savepoint&quot;</span><span class="p">)</span>
-</span><span id="Generator-2753"><a href="#Generator-2753"><span class="linenos">2753</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">savepoint</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2754"><a href="#Generator-2754"><span class="linenos">2754</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2751"><a href="#Generator-2751"><span class="linenos">2751</span></a> <span class="k">def</span> <span class="nf">commit_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">Commit</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2752"><a href="#Generator-2752"><span class="linenos">2752</span></a> <span class="n">chain</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;chain&quot;</span><span class="p">)</span>
+</span><span id="Generator-2753"><a href="#Generator-2753"><span class="linenos">2753</span></a> <span class="k">if</span> <span class="n">chain</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-2754"><a href="#Generator-2754"><span class="linenos">2754</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="s2">&quot; AND CHAIN&quot;</span> <span class="k">if</span> <span class="n">chain</span> <span class="k">else</span> <span class="s2">&quot; AND NO CHAIN&quot;</span>
</span><span id="Generator-2755"><a href="#Generator-2755"><span class="linenos">2755</span></a>
-</span><span id="Generator-2756"><a href="#Generator-2756"><span class="linenos">2756</span></a> <span class="k">def</span> <span class="nf">altercolumn_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">AlterColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2757"><a href="#Generator-2757"><span class="linenos">2757</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2758"><a href="#Generator-2758"><span class="linenos">2758</span></a>
-</span><span id="Generator-2759"><a href="#Generator-2759"><span class="linenos">2759</span></a> <span class="n">dtype</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;dtype&quot;</span><span class="p">)</span>
-</span><span id="Generator-2760"><a href="#Generator-2760"><span class="linenos">2760</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="Generator-2761"><a href="#Generator-2761"><span class="linenos">2761</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
-</span><span id="Generator-2762"><a href="#Generator-2762"><span class="linenos">2762</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2763"><a href="#Generator-2763"><span class="linenos">2763</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator-2764"><a href="#Generator-2764"><span class="linenos">2764</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2765"><a href="#Generator-2765"><span class="linenos">2765</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DATA TYPE </span><span class="si">{</span><span class="n">dtype</span><span class="si">}{</span><span class="n">collate</span><span class="si">}{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2766"><a href="#Generator-2766"><span class="linenos">2766</span></a>
-</span><span id="Generator-2767"><a href="#Generator-2767"><span class="linenos">2767</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator-2768"><a href="#Generator-2768"><span class="linenos">2768</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-2769"><a href="#Generator-2769"><span class="linenos">2769</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DEFAULT </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2770"><a href="#Generator-2770"><span class="linenos">2770</span></a>
-</span><span id="Generator-2771"><a href="#Generator-2771"><span class="linenos">2771</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
-</span><span id="Generator-2772"><a href="#Generator-2772"><span class="linenos">2772</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="Generator-2773"><a href="#Generator-2773"><span class="linenos">2773</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2774"><a href="#Generator-2774"><span class="linenos">2774</span></a>
-</span><span id="Generator-2775"><a href="#Generator-2775"><span class="linenos">2775</span></a> <span class="k">if</span> <span class="ow">not</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;drop&quot;</span><span class="p">):</span>
-</span><span id="Generator-2776"><a href="#Generator-2776"><span class="linenos">2776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported ALTER COLUMN syntax&quot;</span><span class="p">)</span>
+</span><span id="Generator-2756"><a href="#Generator-2756"><span class="linenos">2756</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT</span><span class="si">{</span><span class="n">chain</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2757"><a href="#Generator-2757"><span class="linenos">2757</span></a>
+</span><span id="Generator-2758"><a href="#Generator-2758"><span class="linenos">2758</span></a> <span class="k">def</span> <span class="nf">rollback_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">Rollback</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2759"><a href="#Generator-2759"><span class="linenos">2759</span></a> <span class="n">savepoint</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;savepoint&quot;</span><span class="p">)</span>
+</span><span id="Generator-2760"><a href="#Generator-2760"><span class="linenos">2760</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">savepoint</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2761"><a href="#Generator-2761"><span class="linenos">2761</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2762"><a href="#Generator-2762"><span class="linenos">2762</span></a>
+</span><span id="Generator-2763"><a href="#Generator-2763"><span class="linenos">2763</span></a> <span class="k">def</span> <span class="nf">altercolumn_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">AlterColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2764"><a href="#Generator-2764"><span class="linenos">2764</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2765"><a href="#Generator-2765"><span class="linenos">2765</span></a>
+</span><span id="Generator-2766"><a href="#Generator-2766"><span class="linenos">2766</span></a> <span class="n">dtype</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;dtype&quot;</span><span class="p">)</span>
+</span><span id="Generator-2767"><a href="#Generator-2767"><span class="linenos">2767</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="Generator-2768"><a href="#Generator-2768"><span class="linenos">2768</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
+</span><span id="Generator-2769"><a href="#Generator-2769"><span class="linenos">2769</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2770"><a href="#Generator-2770"><span class="linenos">2770</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator-2771"><a href="#Generator-2771"><span class="linenos">2771</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2772"><a href="#Generator-2772"><span class="linenos">2772</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DATA TYPE </span><span class="si">{</span><span class="n">dtype</span><span class="si">}{</span><span class="n">collate</span><span class="si">}{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2773"><a href="#Generator-2773"><span class="linenos">2773</span></a>
+</span><span id="Generator-2774"><a href="#Generator-2774"><span class="linenos">2774</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator-2775"><a href="#Generator-2775"><span class="linenos">2775</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-2776"><a href="#Generator-2776"><span class="linenos">2776</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DEFAULT </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2777"><a href="#Generator-2777"><span class="linenos">2777</span></a>
-</span><span id="Generator-2778"><a href="#Generator-2778"><span class="linenos">2778</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DROP DEFAULT&quot;</span>
-</span><span id="Generator-2779"><a href="#Generator-2779"><span class="linenos">2779</span></a>
-</span><span id="Generator-2780"><a href="#Generator-2780"><span class="linenos">2780</span></a> <span class="k">def</span> <span class="nf">renametable_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">RenameTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2781"><a href="#Generator-2781"><span class="linenos">2781</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
-</span><span id="Generator-2782"><a href="#Generator-2782"><span class="linenos">2782</span></a> <span class="c1"># Remove db from tables</span>
-</span><span id="Generator-2783"><a href="#Generator-2783"><span class="linenos">2783</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Generator-2784"><a href="#Generator-2784"><span class="linenos">2784</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
-</span><span id="Generator-2785"><a href="#Generator-2785"><span class="linenos">2785</span></a> <span class="p">)</span>
-</span><span id="Generator-2786"><a href="#Generator-2786"><span class="linenos">2786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2787"><a href="#Generator-2787"><span class="linenos">2787</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME TO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2788"><a href="#Generator-2788"><span class="linenos">2788</span></a>
-</span><span id="Generator-2789"><a href="#Generator-2789"><span class="linenos">2789</span></a> <span class="k">def</span> <span class="nf">renamecolumn_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">RenameColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2790"><a href="#Generator-2790"><span class="linenos">2790</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2791"><a href="#Generator-2791"><span class="linenos">2791</span></a> <span class="n">old_column</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="Generator-2792"><a href="#Generator-2792"><span class="linenos">2792</span></a> <span class="n">new_column</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;to&quot;</span><span class="p">)</span>
-</span><span id="Generator-2793"><a href="#Generator-2793"><span class="linenos">2793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME COLUMN</span><span class="si">{</span><span class="n">exists</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">old_column</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">new_column</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2794"><a href="#Generator-2794"><span class="linenos">2794</span></a>
-</span><span id="Generator-2795"><a href="#Generator-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">altertable_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">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2796"><a href="#Generator-2796"><span class="linenos">2796</span></a> <span class="n">actions</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;actions&quot;</span><span class="p">]</span>
-</span><span id="Generator-2797"><a href="#Generator-2797"><span class="linenos">2797</span></a>
-</span><span id="Generator-2798"><a href="#Generator-2798"><span class="linenos">2798</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">):</span>
-</span><span id="Generator-2799"><a href="#Generator-2799"><span class="linenos">2799</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2800"><a href="#Generator-2800"><span class="linenos">2800</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="Generator-2801"><a href="#Generator-2801"><span class="linenos">2801</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMNS &quot;</span><span class="p">)</span>
-</span><span id="Generator-2802"><a href="#Generator-2802"><span class="linenos">2802</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">):</span>
-</span><span id="Generator-2803"><a href="#Generator-2803"><span class="linenos">2803</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2804"><a href="#Generator-2804"><span class="linenos">2804</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2805"><a href="#Generator-2805"><span class="linenos">2805</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2806"><a href="#Generator-2806"><span class="linenos">2806</span></a>
-</span><span id="Generator-2807"><a href="#Generator-2807"><span class="linenos">2807</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2808"><a href="#Generator-2808"><span class="linenos">2808</span></a> <span class="n">only</span> <span class="o">=</span> <span class="s2">&quot; ONLY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2809"><a href="#Generator-2809"><span class="linenos">2809</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER TABLE</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">only</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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"> </span><span class="si">{</span><span class="n">actions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2810"><a href="#Generator-2810"><span class="linenos">2810</span></a>
-</span><span id="Generator-2811"><a href="#Generator-2811"><span class="linenos">2811</span></a> <span class="k">def</span> <span class="nf">add_column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2812"><a href="#Generator-2812"><span class="linenos">2812</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_INCLUDE_COLUMN_KEYWORD</span><span class="p">:</span>
-</span><span id="Generator-2813"><a href="#Generator-2813"><span class="linenos">2813</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="Generator-2814"><a href="#Generator-2814"><span class="linenos">2814</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-2815"><a href="#Generator-2815"><span class="linenos">2815</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
-</span><span id="Generator-2816"><a href="#Generator-2816"><span class="linenos">2816</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
-</span><span id="Generator-2817"><a href="#Generator-2817"><span class="linenos">2817</span></a> <span class="p">)</span>
-</span><span id="Generator-2818"><a href="#Generator-2818"><span class="linenos">2818</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2819"><a href="#Generator-2819"><span class="linenos">2819</span></a>
-</span><span id="Generator-2820"><a href="#Generator-2820"><span class="linenos">2820</span></a> <span class="k">def</span> <span class="nf">droppartition_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">DropPartition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2821"><a href="#Generator-2821"><span class="linenos">2821</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-2822"><a href="#Generator-2822"><span class="linenos">2822</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator-2823"><a href="#Generator-2823"><span class="linenos">2823</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2824"><a href="#Generator-2824"><span class="linenos">2824</span></a>
-</span><span id="Generator-2825"><a href="#Generator-2825"><span class="linenos">2825</span></a> <span class="k">def</span> <span class="nf">addconstraint_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">AddConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2826"><a href="#Generator-2826"><span class="linenos">2826</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2827"><a href="#Generator-2827"><span class="linenos">2827</span></a> <span class="n">expression_</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="Generator-2828"><a href="#Generator-2828"><span class="linenos">2828</span></a> <span class="n">add_constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;ADD&quot;</span>
-</span><span id="Generator-2829"><a href="#Generator-2829"><span class="linenos">2829</span></a>
-</span><span id="Generator-2830"><a href="#Generator-2830"><span class="linenos">2830</span></a> <span class="n">enforced</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;enforced&quot;</span><span class="p">)</span>
-</span><span id="Generator-2831"><a href="#Generator-2831"><span class="linenos">2831</span></a> <span class="k">if</span> <span class="n">enforced</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-2832"><a href="#Generator-2832"><span class="linenos">2832</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> CHECK (</span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="s1">&#39; ENFORCED&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">enforced</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2833"><a href="#Generator-2833"><span class="linenos">2833</span></a>
-</span><span id="Generator-2834"><a href="#Generator-2834"><span class="linenos">2834</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2835"><a href="#Generator-2835"><span class="linenos">2835</span></a>
-</span><span id="Generator-2836"><a href="#Generator-2836"><span class="linenos">2836</span></a> <span class="k">def</span> <span class="nf">distinct_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">Distinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2837"><a href="#Generator-2837"><span class="linenos">2837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-2838"><a href="#Generator-2838"><span class="linenos">2838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2839"><a href="#Generator-2839"><span class="linenos">2839</span></a>
-</span><span id="Generator-2840"><a href="#Generator-2840"><span class="linenos">2840</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
-</span><span id="Generator-2841"><a href="#Generator-2841"><span class="linenos">2841</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2842"><a href="#Generator-2842"><span class="linenos">2842</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DISTINCT</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2843"><a href="#Generator-2843"><span class="linenos">2843</span></a>
-</span><span id="Generator-2844"><a href="#Generator-2844"><span class="linenos">2844</span></a> <span class="k">def</span> <span class="nf">ignorenulls_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">IgnoreNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2845"><a href="#Generator-2845"><span class="linenos">2845</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">)</span>
-</span><span id="Generator-2846"><a href="#Generator-2846"><span class="linenos">2846</span></a>
-</span><span id="Generator-2847"><a href="#Generator-2847"><span class="linenos">2847</span></a> <span class="k">def</span> <span class="nf">respectnulls_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">RespectNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2848"><a href="#Generator-2848"><span class="linenos">2848</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">)</span>
-</span><span id="Generator-2849"><a href="#Generator-2849"><span class="linenos">2849</span></a>
-</span><span id="Generator-2850"><a href="#Generator-2850"><span class="linenos">2850</span></a> <span class="k">def</span> <span class="nf">_embed_ignore_nulls</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">IgnoreNulls</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2851"><a href="#Generator-2851"><span class="linenos">2851</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IGNORE_NULLS_IN_FUNC</span><span class="p">:</span>
-</span><span id="Generator-2852"><a href="#Generator-2852"><span class="linenos">2852</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">)</span>
-</span><span id="Generator-2853"><a href="#Generator-2853"><span class="linenos">2853</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Generator-2854"><a href="#Generator-2854"><span class="linenos">2854</span></a> <span class="n">sql</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">this</span><span class="p">)</span>
-</span><span id="Generator-2855"><a href="#Generator-2855"><span class="linenos">2855</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2856"><a href="#Generator-2856"><span class="linenos">2856</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-2778"><a href="#Generator-2778"><span class="linenos">2778</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
+</span><span id="Generator-2779"><a href="#Generator-2779"><span class="linenos">2779</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="Generator-2780"><a href="#Generator-2780"><span class="linenos">2780</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2781"><a href="#Generator-2781"><span class="linenos">2781</span></a>
+</span><span id="Generator-2782"><a href="#Generator-2782"><span class="linenos">2782</span></a> <span class="k">if</span> <span class="ow">not</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;drop&quot;</span><span class="p">):</span>
+</span><span id="Generator-2783"><a href="#Generator-2783"><span class="linenos">2783</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported ALTER COLUMN syntax&quot;</span><span class="p">)</span>
+</span><span id="Generator-2784"><a href="#Generator-2784"><span class="linenos">2784</span></a>
+</span><span id="Generator-2785"><a href="#Generator-2785"><span class="linenos">2785</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DROP DEFAULT&quot;</span>
+</span><span id="Generator-2786"><a href="#Generator-2786"><span class="linenos">2786</span></a>
+</span><span id="Generator-2787"><a href="#Generator-2787"><span class="linenos">2787</span></a> <span class="k">def</span> <span class="nf">renametable_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">RenameTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2788"><a href="#Generator-2788"><span class="linenos">2788</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
+</span><span id="Generator-2789"><a href="#Generator-2789"><span class="linenos">2789</span></a> <span class="c1"># Remove db from tables</span>
+</span><span id="Generator-2790"><a href="#Generator-2790"><span class="linenos">2790</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Generator-2791"><a href="#Generator-2791"><span class="linenos">2791</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
+</span><span id="Generator-2792"><a href="#Generator-2792"><span class="linenos">2792</span></a> <span class="p">)</span>
+</span><span id="Generator-2793"><a href="#Generator-2793"><span class="linenos">2793</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2794"><a href="#Generator-2794"><span class="linenos">2794</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME TO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2795"><a href="#Generator-2795"><span class="linenos">2795</span></a>
+</span><span id="Generator-2796"><a href="#Generator-2796"><span class="linenos">2796</span></a> <span class="k">def</span> <span class="nf">renamecolumn_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">RenameColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2797"><a href="#Generator-2797"><span class="linenos">2797</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2798"><a href="#Generator-2798"><span class="linenos">2798</span></a> <span class="n">old_column</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="Generator-2799"><a href="#Generator-2799"><span class="linenos">2799</span></a> <span class="n">new_column</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;to&quot;</span><span class="p">)</span>
+</span><span id="Generator-2800"><a href="#Generator-2800"><span class="linenos">2800</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME COLUMN</span><span class="si">{</span><span class="n">exists</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">old_column</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">new_column</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2801"><a href="#Generator-2801"><span class="linenos">2801</span></a>
+</span><span id="Generator-2802"><a href="#Generator-2802"><span class="linenos">2802</span></a> <span class="k">def</span> <span class="nf">altertable_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">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2803"><a href="#Generator-2803"><span class="linenos">2803</span></a> <span class="n">actions</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;actions&quot;</span><span class="p">]</span>
+</span><span id="Generator-2804"><a href="#Generator-2804"><span class="linenos">2804</span></a>
+</span><span id="Generator-2805"><a href="#Generator-2805"><span class="linenos">2805</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">):</span>
+</span><span id="Generator-2806"><a href="#Generator-2806"><span class="linenos">2806</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2807"><a href="#Generator-2807"><span class="linenos">2807</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="Generator-2808"><a href="#Generator-2808"><span class="linenos">2808</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMNS &quot;</span><span class="p">)</span>
+</span><span id="Generator-2809"><a href="#Generator-2809"><span class="linenos">2809</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">):</span>
+</span><span id="Generator-2810"><a href="#Generator-2810"><span class="linenos">2810</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2811"><a href="#Generator-2811"><span class="linenos">2811</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2812"><a href="#Generator-2812"><span class="linenos">2812</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2813"><a href="#Generator-2813"><span class="linenos">2813</span></a>
+</span><span id="Generator-2814"><a href="#Generator-2814"><span class="linenos">2814</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2815"><a href="#Generator-2815"><span class="linenos">2815</span></a> <span class="n">only</span> <span class="o">=</span> <span class="s2">&quot; ONLY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2816"><a href="#Generator-2816"><span class="linenos">2816</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER TABLE</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">only</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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"> </span><span class="si">{</span><span class="n">actions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2817"><a href="#Generator-2817"><span class="linenos">2817</span></a>
+</span><span id="Generator-2818"><a href="#Generator-2818"><span class="linenos">2818</span></a> <span class="k">def</span> <span class="nf">add_column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2819"><a href="#Generator-2819"><span class="linenos">2819</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_INCLUDE_COLUMN_KEYWORD</span><span class="p">:</span>
+</span><span id="Generator-2820"><a href="#Generator-2820"><span class="linenos">2820</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
+</span><span id="Generator-2821"><a href="#Generator-2821"><span class="linenos">2821</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-2822"><a href="#Generator-2822"><span class="linenos">2822</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
+</span><span id="Generator-2823"><a href="#Generator-2823"><span class="linenos">2823</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
+</span><span id="Generator-2824"><a href="#Generator-2824"><span class="linenos">2824</span></a> <span class="p">)</span>
+</span><span id="Generator-2825"><a href="#Generator-2825"><span class="linenos">2825</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2826"><a href="#Generator-2826"><span class="linenos">2826</span></a>
+</span><span id="Generator-2827"><a href="#Generator-2827"><span class="linenos">2827</span></a> <span class="k">def</span> <span class="nf">droppartition_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">DropPartition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2828"><a href="#Generator-2828"><span class="linenos">2828</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-2829"><a href="#Generator-2829"><span class="linenos">2829</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator-2830"><a href="#Generator-2830"><span class="linenos">2830</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2831"><a href="#Generator-2831"><span class="linenos">2831</span></a>
+</span><span id="Generator-2832"><a href="#Generator-2832"><span class="linenos">2832</span></a> <span class="k">def</span> <span class="nf">addconstraint_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">AddConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2833"><a href="#Generator-2833"><span class="linenos">2833</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2834"><a href="#Generator-2834"><span class="linenos">2834</span></a> <span class="n">expression_</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="Generator-2835"><a href="#Generator-2835"><span class="linenos">2835</span></a> <span class="n">add_constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;ADD&quot;</span>
+</span><span id="Generator-2836"><a href="#Generator-2836"><span class="linenos">2836</span></a>
+</span><span id="Generator-2837"><a href="#Generator-2837"><span class="linenos">2837</span></a> <span class="n">enforced</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;enforced&quot;</span><span class="p">)</span>
+</span><span id="Generator-2838"><a href="#Generator-2838"><span class="linenos">2838</span></a> <span class="k">if</span> <span class="n">enforced</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-2839"><a href="#Generator-2839"><span class="linenos">2839</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> CHECK (</span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="s1">&#39; ENFORCED&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">enforced</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2840"><a href="#Generator-2840"><span class="linenos">2840</span></a>
+</span><span id="Generator-2841"><a href="#Generator-2841"><span class="linenos">2841</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2842"><a href="#Generator-2842"><span class="linenos">2842</span></a>
+</span><span id="Generator-2843"><a href="#Generator-2843"><span class="linenos">2843</span></a> <span class="k">def</span> <span class="nf">distinct_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">Distinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2844"><a href="#Generator-2844"><span class="linenos">2844</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-2845"><a href="#Generator-2845"><span class="linenos">2845</span></a>
+</span><span id="Generator-2846"><a href="#Generator-2846"><span class="linenos">2846</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">MULTI_ARG_DISTINCT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator-2847"><a href="#Generator-2847"><span class="linenos">2847</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">case</span><span class="p">()</span>
+</span><span id="Generator-2848"><a href="#Generator-2848"><span class="linenos">2848</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-2849"><a href="#Generator-2849"><span class="linenos">2849</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">case</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
+</span><span id="Generator-2850"><a href="#Generator-2850"><span class="linenos">2850</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">))</span>
+</span><span id="Generator-2851"><a href="#Generator-2851"><span class="linenos">2851</span></a>
+</span><span id="Generator-2852"><a href="#Generator-2852"><span class="linenos">2852</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2853"><a href="#Generator-2853"><span class="linenos">2853</span></a>
+</span><span id="Generator-2854"><a href="#Generator-2854"><span class="linenos">2854</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
+</span><span id="Generator-2855"><a href="#Generator-2855"><span class="linenos">2855</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2856"><a href="#Generator-2856"><span class="linenos">2856</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DISTINCT</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-2857"><a href="#Generator-2857"><span class="linenos">2857</span></a>
-</span><span id="Generator-2858"><a href="#Generator-2858"><span class="linenos">2858</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2859"><a href="#Generator-2859"><span class="linenos">2859</span></a>
-</span><span id="Generator-2860"><a href="#Generator-2860"><span class="linenos">2860</span></a> <span class="k">def</span> <span class="nf">intdiv_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">IntDiv</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2861"><a href="#Generator-2861"><span class="linenos">2861</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-2862"><a href="#Generator-2862"><span class="linenos">2862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
-</span><span id="Generator-2863"><a href="#Generator-2863"><span class="linenos">2863</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator-2864"><a href="#Generator-2864"><span class="linenos">2864</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="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">),</span>
-</span><span id="Generator-2865"><a href="#Generator-2865"><span class="linenos">2865</span></a> <span class="p">)</span>
-</span><span id="Generator-2866"><a href="#Generator-2866"><span class="linenos">2866</span></a> <span class="p">)</span>
-</span><span id="Generator-2867"><a href="#Generator-2867"><span class="linenos">2867</span></a>
-</span><span id="Generator-2868"><a href="#Generator-2868"><span class="linenos">2868</span></a> <span class="k">def</span> <span class="nf">dpipe_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">DPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2869"><a href="#Generator-2869"><span class="linenos">2869</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="Generator-2870"><a href="#Generator-2870"><span class="linenos">2870</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
-</span><span id="Generator-2871"><a href="#Generator-2871"><span class="linenos">2871</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">)</span>
-</span><span id="Generator-2872"><a href="#Generator-2872"><span class="linenos">2872</span></a>
-</span><span id="Generator-2873"><a href="#Generator-2873"><span class="linenos">2873</span></a> <span class="k">def</span> <span class="nf">div_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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2874"><a href="#Generator-2874"><span class="linenos">2874</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="Generator-2875"><a href="#Generator-2875"><span class="linenos">2875</span></a>
-</span><span id="Generator-2876"><a href="#Generator-2876"><span class="linenos">2876</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="Generator-2877"><a href="#Generator-2877"><span class="linenos">2877</span></a> <span class="n">r</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">r</span><span class="o">.</span><span class="n">copy</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">0</span><span class="p">)))</span>
-</span><span id="Generator-2878"><a href="#Generator-2878"><span class="linenos">2878</span></a>
-</span><span id="Generator-2879"><a href="#Generator-2879"><span class="linenos">2879</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</span> <span class="ow">not</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;typed&quot;</span><span class="p">):</span>
-</span><span id="Generator-2880"><a href="#Generator-2880"><span class="linenos">2880</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">FLOAT_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
-</span><span id="Generator-2881"><a href="#Generator-2881"><span class="linenos">2881</span></a> <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">FLOAT_TYPES</span>
-</span><span id="Generator-2882"><a href="#Generator-2882"><span class="linenos">2882</span></a> <span class="p">):</span>
-</span><span id="Generator-2883"><a href="#Generator-2883"><span class="linenos">2883</span></a> <span class="n">l</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <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">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">))</span>
-</span><span id="Generator-2884"><a href="#Generator-2884"><span class="linenos">2884</span></a>
-</span><span id="Generator-2885"><a href="#Generator-2885"><span class="linenos">2885</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</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;typed&quot;</span><span class="p">):</span>
-</span><span id="Generator-2886"><a href="#Generator-2886"><span class="linenos">2886</span></a> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">):</span>
-</span><span id="Generator-2887"><a href="#Generator-2887"><span class="linenos">2887</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-2888"><a href="#Generator-2888"><span class="linenos">2888</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="Generator-2889"><a href="#Generator-2889"><span class="linenos">2889</span></a> <span class="n">l</span> <span class="o">/</span> <span class="n">r</span><span class="p">,</span>
-</span><span id="Generator-2890"><a href="#Generator-2890"><span class="linenos">2890</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">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="Generator-2891"><a href="#Generator-2891"><span class="linenos">2891</span></a> <span class="p">)</span>
-</span><span id="Generator-2892"><a href="#Generator-2892"><span class="linenos">2892</span></a> <span class="p">)</span>
-</span><span id="Generator-2893"><a href="#Generator-2893"><span class="linenos">2893</span></a>
-</span><span id="Generator-2894"><a href="#Generator-2894"><span class="linenos">2894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
-</span><span id="Generator-2895"><a href="#Generator-2895"><span class="linenos">2895</span></a>
-</span><span id="Generator-2896"><a href="#Generator-2896"><span class="linenos">2896</span></a> <span class="k">def</span> <span class="nf">overlaps_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">Overlaps</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2897"><a href="#Generator-2897"><span class="linenos">2897</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">)</span>
+</span><span id="Generator-2858"><a href="#Generator-2858"><span class="linenos">2858</span></a> <span class="k">def</span> <span class="nf">ignorenulls_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">IgnoreNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2859"><a href="#Generator-2859"><span class="linenos">2859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">)</span>
+</span><span id="Generator-2860"><a href="#Generator-2860"><span class="linenos">2860</span></a>
+</span><span id="Generator-2861"><a href="#Generator-2861"><span class="linenos">2861</span></a> <span class="k">def</span> <span class="nf">respectnulls_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">RespectNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2862"><a href="#Generator-2862"><span class="linenos">2862</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">)</span>
+</span><span id="Generator-2863"><a href="#Generator-2863"><span class="linenos">2863</span></a>
+</span><span id="Generator-2864"><a href="#Generator-2864"><span class="linenos">2864</span></a> <span class="k">def</span> <span class="nf">_embed_ignore_nulls</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">IgnoreNulls</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2865"><a href="#Generator-2865"><span class="linenos">2865</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IGNORE_NULLS_IN_FUNC</span><span class="p">:</span>
+</span><span id="Generator-2866"><a href="#Generator-2866"><span class="linenos">2866</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">)</span>
+</span><span id="Generator-2867"><a href="#Generator-2867"><span class="linenos">2867</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-2868"><a href="#Generator-2868"><span class="linenos">2868</span></a> <span class="n">sql</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">this</span><span class="p">)</span>
+</span><span id="Generator-2869"><a href="#Generator-2869"><span class="linenos">2869</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2870"><a href="#Generator-2870"><span class="linenos">2870</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator-2871"><a href="#Generator-2871"><span class="linenos">2871</span></a>
+</span><span id="Generator-2872"><a href="#Generator-2872"><span class="linenos">2872</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2873"><a href="#Generator-2873"><span class="linenos">2873</span></a>
+</span><span id="Generator-2874"><a href="#Generator-2874"><span class="linenos">2874</span></a> <span class="k">def</span> <span class="nf">intdiv_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">IntDiv</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2875"><a href="#Generator-2875"><span class="linenos">2875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-2876"><a href="#Generator-2876"><span class="linenos">2876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
+</span><span id="Generator-2877"><a href="#Generator-2877"><span class="linenos">2877</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator-2878"><a href="#Generator-2878"><span class="linenos">2878</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="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">),</span>
+</span><span id="Generator-2879"><a href="#Generator-2879"><span class="linenos">2879</span></a> <span class="p">)</span>
+</span><span id="Generator-2880"><a href="#Generator-2880"><span class="linenos">2880</span></a> <span class="p">)</span>
+</span><span id="Generator-2881"><a href="#Generator-2881"><span class="linenos">2881</span></a>
+</span><span id="Generator-2882"><a href="#Generator-2882"><span class="linenos">2882</span></a> <span class="k">def</span> <span class="nf">dpipe_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">DPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2883"><a href="#Generator-2883"><span class="linenos">2883</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="Generator-2884"><a href="#Generator-2884"><span class="linenos">2884</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
+</span><span id="Generator-2885"><a href="#Generator-2885"><span class="linenos">2885</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">)</span>
+</span><span id="Generator-2886"><a href="#Generator-2886"><span class="linenos">2886</span></a>
+</span><span id="Generator-2887"><a href="#Generator-2887"><span class="linenos">2887</span></a> <span class="k">def</span> <span class="nf">div_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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2888"><a href="#Generator-2888"><span class="linenos">2888</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="Generator-2889"><a href="#Generator-2889"><span class="linenos">2889</span></a>
+</span><span id="Generator-2890"><a href="#Generator-2890"><span class="linenos">2890</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="Generator-2891"><a href="#Generator-2891"><span class="linenos">2891</span></a> <span class="n">r</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">r</span><span class="o">.</span><span class="n">copy</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">0</span><span class="p">)))</span>
+</span><span id="Generator-2892"><a href="#Generator-2892"><span class="linenos">2892</span></a>
+</span><span id="Generator-2893"><a href="#Generator-2893"><span class="linenos">2893</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</span> <span class="ow">not</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;typed&quot;</span><span class="p">):</span>
+</span><span id="Generator-2894"><a href="#Generator-2894"><span class="linenos">2894</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">FLOAT_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
+</span><span id="Generator-2895"><a href="#Generator-2895"><span class="linenos">2895</span></a> <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">FLOAT_TYPES</span>
+</span><span id="Generator-2896"><a href="#Generator-2896"><span class="linenos">2896</span></a> <span class="p">):</span>
+</span><span id="Generator-2897"><a href="#Generator-2897"><span class="linenos">2897</span></a> <span class="n">l</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <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">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">))</span>
</span><span id="Generator-2898"><a href="#Generator-2898"><span class="linenos">2898</span></a>
-</span><span id="Generator-2899"><a href="#Generator-2899"><span class="linenos">2899</span></a> <span class="k">def</span> <span class="nf">distance_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">Distance</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2900"><a href="#Generator-2900"><span class="linenos">2900</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2901"><a href="#Generator-2901"><span class="linenos">2901</span></a>
-</span><span id="Generator-2902"><a href="#Generator-2902"><span class="linenos">2902</span></a> <span class="k">def</span> <span class="nf">dot_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">Dot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2903"><a href="#Generator-2903"><span class="linenos">2903</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2904"><a href="#Generator-2904"><span class="linenos">2904</span></a>
-</span><span id="Generator-2905"><a href="#Generator-2905"><span class="linenos">2905</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2906"><a href="#Generator-2906"><span class="linenos">2906</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">)</span>
+</span><span id="Generator-2899"><a href="#Generator-2899"><span class="linenos">2899</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</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;typed&quot;</span><span class="p">):</span>
+</span><span id="Generator-2900"><a href="#Generator-2900"><span class="linenos">2900</span></a> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">):</span>
+</span><span id="Generator-2901"><a href="#Generator-2901"><span class="linenos">2901</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-2902"><a href="#Generator-2902"><span class="linenos">2902</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="Generator-2903"><a href="#Generator-2903"><span class="linenos">2903</span></a> <span class="n">l</span> <span class="o">/</span> <span class="n">r</span><span class="p">,</span>
+</span><span id="Generator-2904"><a href="#Generator-2904"><span class="linenos">2904</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">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="Generator-2905"><a href="#Generator-2905"><span class="linenos">2905</span></a> <span class="p">)</span>
+</span><span id="Generator-2906"><a href="#Generator-2906"><span class="linenos">2906</span></a> <span class="p">)</span>
</span><span id="Generator-2907"><a href="#Generator-2907"><span class="linenos">2907</span></a>
-</span><span id="Generator-2908"><a href="#Generator-2908"><span class="linenos">2908</span></a> <span class="k">def</span> <span class="nf">propertyeq_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">PropertyEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2909"><a href="#Generator-2909"><span class="linenos">2909</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:=&quot;</span><span class="p">)</span>
-</span><span id="Generator-2910"><a href="#Generator-2910"><span class="linenos">2910</span></a>
-</span><span id="Generator-2911"><a href="#Generator-2911"><span class="linenos">2911</span></a> <span class="k">def</span> <span class="nf">escape_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">Escape</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2912"><a href="#Generator-2912"><span class="linenos">2912</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">)</span>
-</span><span id="Generator-2913"><a href="#Generator-2913"><span class="linenos">2913</span></a>
-</span><span id="Generator-2914"><a href="#Generator-2914"><span class="linenos">2914</span></a> <span class="k">def</span> <span class="nf">glob_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">Glob</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2915"><a href="#Generator-2915"><span class="linenos">2915</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;GLOB&quot;</span><span class="p">)</span>
-</span><span id="Generator-2916"><a href="#Generator-2916"><span class="linenos">2916</span></a>
-</span><span id="Generator-2917"><a href="#Generator-2917"><span class="linenos">2917</span></a> <span class="k">def</span> <span class="nf">gt_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">GT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2918"><a href="#Generator-2918"><span class="linenos">2918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2919"><a href="#Generator-2919"><span class="linenos">2919</span></a>
-</span><span id="Generator-2920"><a href="#Generator-2920"><span class="linenos">2920</span></a> <span class="k">def</span> <span class="nf">gte_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">GTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2921"><a href="#Generator-2921"><span class="linenos">2921</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;=&quot;</span><span class="p">)</span>
-</span><span id="Generator-2922"><a href="#Generator-2922"><span class="linenos">2922</span></a>
-</span><span id="Generator-2923"><a href="#Generator-2923"><span class="linenos">2923</span></a> <span class="k">def</span> <span class="nf">ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2924"><a href="#Generator-2924"><span class="linenos">2924</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE&quot;</span><span class="p">)</span>
-</span><span id="Generator-2925"><a href="#Generator-2925"><span class="linenos">2925</span></a>
-</span><span id="Generator-2926"><a href="#Generator-2926"><span class="linenos">2926</span></a> <span class="k">def</span> <span class="nf">ilikeany_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">ILikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2927"><a href="#Generator-2927"><span class="linenos">2927</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">)</span>
-</span><span id="Generator-2928"><a href="#Generator-2928"><span class="linenos">2928</span></a>
-</span><span id="Generator-2929"><a href="#Generator-2929"><span class="linenos">2929</span></a> <span class="k">def</span> <span class="nf">is_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">Is</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2930"><a href="#Generator-2930"><span class="linenos">2930</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
-</span><span id="Generator-2931"><a href="#Generator-2931"><span class="linenos">2931</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-2932"><a href="#Generator-2932"><span class="linenos">2932</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-2933"><a href="#Generator-2933"><span class="linenos">2933</span></a> <span class="p">)</span>
-</span><span id="Generator-2934"><a href="#Generator-2934"><span class="linenos">2934</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS&quot;</span><span class="p">)</span>
-</span><span id="Generator-2935"><a href="#Generator-2935"><span class="linenos">2935</span></a>
-</span><span id="Generator-2936"><a href="#Generator-2936"><span class="linenos">2936</span></a> <span class="k">def</span> <span class="nf">like_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">Like</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2937"><a href="#Generator-2937"><span class="linenos">2937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">)</span>
-</span><span id="Generator-2938"><a href="#Generator-2938"><span class="linenos">2938</span></a>
-</span><span id="Generator-2939"><a href="#Generator-2939"><span class="linenos">2939</span></a> <span class="k">def</span> <span class="nf">likeany_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">LikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2940"><a href="#Generator-2940"><span class="linenos">2940</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">)</span>
-</span><span id="Generator-2941"><a href="#Generator-2941"><span class="linenos">2941</span></a>
-</span><span id="Generator-2942"><a href="#Generator-2942"><span class="linenos">2942</span></a> <span class="k">def</span> <span class="nf">similarto_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">SimilarTo</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2943"><a href="#Generator-2943"><span class="linenos">2943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">)</span>
-</span><span id="Generator-2944"><a href="#Generator-2944"><span class="linenos">2944</span></a>
-</span><span id="Generator-2945"><a href="#Generator-2945"><span class="linenos">2945</span></a> <span class="k">def</span> <span class="nf">lt_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">LT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2946"><a href="#Generator-2946"><span class="linenos">2946</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2947"><a href="#Generator-2947"><span class="linenos">2947</span></a>
-</span><span id="Generator-2948"><a href="#Generator-2948"><span class="linenos">2948</span></a> <span class="k">def</span> <span class="nf">lte_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">LTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2949"><a href="#Generator-2949"><span class="linenos">2949</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;=&quot;</span><span class="p">)</span>
-</span><span id="Generator-2950"><a href="#Generator-2950"><span class="linenos">2950</span></a>
-</span><span id="Generator-2951"><a href="#Generator-2951"><span class="linenos">2951</span></a> <span class="k">def</span> <span class="nf">mod_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">Mod</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2952"><a href="#Generator-2952"><span class="linenos">2952</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;%&quot;</span><span class="p">)</span>
-</span><span id="Generator-2953"><a href="#Generator-2953"><span class="linenos">2953</span></a>
-</span><span id="Generator-2954"><a href="#Generator-2954"><span class="linenos">2954</span></a> <span class="k">def</span> <span class="nf">mul_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">Mul</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2955"><a href="#Generator-2955"><span class="linenos">2955</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">)</span>
-</span><span id="Generator-2956"><a href="#Generator-2956"><span class="linenos">2956</span></a>
-</span><span id="Generator-2957"><a href="#Generator-2957"><span class="linenos">2957</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2958"><a href="#Generator-2958"><span class="linenos">2958</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-2959"><a href="#Generator-2959"><span class="linenos">2959</span></a>
-</span><span id="Generator-2960"><a href="#Generator-2960"><span class="linenos">2960</span></a> <span class="k">def</span> <span class="nf">nullsafeeq_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">NullSafeEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2961"><a href="#Generator-2961"><span class="linenos">2961</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS NOT DISTINCT FROM&quot;</span><span class="p">)</span>
-</span><span id="Generator-2962"><a href="#Generator-2962"><span class="linenos">2962</span></a>
-</span><span id="Generator-2963"><a href="#Generator-2963"><span class="linenos">2963</span></a> <span class="k">def</span> <span class="nf">nullsafeneq_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">NullSafeNEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2964"><a href="#Generator-2964"><span class="linenos">2964</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS DISTINCT FROM&quot;</span><span class="p">)</span>
-</span><span id="Generator-2965"><a href="#Generator-2965"><span class="linenos">2965</span></a>
-</span><span id="Generator-2966"><a href="#Generator-2966"><span class="linenos">2966</span></a> <span class="k">def</span> <span class="nf">or_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">Or</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2967"><a href="#Generator-2967"><span class="linenos">2967</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OR&quot;</span><span class="p">)</span>
-</span><span id="Generator-2968"><a href="#Generator-2968"><span class="linenos">2968</span></a>
-</span><span id="Generator-2969"><a href="#Generator-2969"><span class="linenos">2969</span></a> <span class="k">def</span> <span class="nf">slice_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">Slice</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2970"><a href="#Generator-2970"><span class="linenos">2970</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">)</span>
-</span><span id="Generator-2971"><a href="#Generator-2971"><span class="linenos">2971</span></a>
-</span><span id="Generator-2972"><a href="#Generator-2972"><span class="linenos">2972</span></a> <span class="k">def</span> <span class="nf">sub_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">Sub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2973"><a href="#Generator-2973"><span class="linenos">2973</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)</span>
-</span><span id="Generator-2974"><a href="#Generator-2974"><span class="linenos">2974</span></a>
-</span><span id="Generator-2975"><a href="#Generator-2975"><span class="linenos">2975</span></a> <span class="k">def</span> <span class="nf">trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2976"><a href="#Generator-2976"><span class="linenos">2976</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
-</span><span id="Generator-2977"><a href="#Generator-2977"><span class="linenos">2977</span></a>
-</span><span id="Generator-2978"><a href="#Generator-2978"><span class="linenos">2978</span></a> <span class="k">def</span> <span class="nf">log_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">Log</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2979"><a href="#Generator-2979"><span class="linenos">2979</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-2980"><a href="#Generator-2980"><span class="linenos">2980</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Generator-2981"><a href="#Generator-2981"><span class="linenos">2981</span></a>
-</span><span id="Generator-2982"><a href="#Generator-2982"><span class="linenos">2982</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
-</span><span id="Generator-2983"><a href="#Generator-2983"><span class="linenos">2983</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span><span class="p">,</span> <span class="n">this</span>
-</span><span id="Generator-2984"><a href="#Generator-2984"><span class="linenos">2984</span></a>
-</span><span id="Generator-2985"><a href="#Generator-2985"><span class="linenos">2985</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;LOG&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span><span class="p">)</span>
-</span><span id="Generator-2986"><a href="#Generator-2986"><span class="linenos">2986</span></a>
-</span><span id="Generator-2987"><a href="#Generator-2987"><span class="linenos">2987</span></a> <span class="k">def</span> <span class="nf">use_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">Use</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2988"><a href="#Generator-2988"><span class="linenos">2988</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-2989"><a href="#Generator-2989"><span class="linenos">2989</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2990"><a href="#Generator-2990"><span class="linenos">2990</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2991"><a href="#Generator-2991"><span class="linenos">2991</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2992"><a href="#Generator-2992"><span class="linenos">2992</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USE</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2993"><a href="#Generator-2993"><span class="linenos">2993</span></a>
-</span><span id="Generator-2994"><a href="#Generator-2994"><span class="linenos">2994</span></a> <span class="k">def</span> <span class="nf">binary</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">Binary</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2995"><a href="#Generator-2995"><span class="linenos">2995</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Generator-2996"><a href="#Generator-2996"><span class="linenos">2996</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2997"><a href="#Generator-2997"><span class="linenos">2997</span></a>
-</span><span id="Generator-2998"><a href="#Generator-2998"><span class="linenos">2998</span></a> <span class="k">def</span> <span class="nf">function_fallback_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">Func</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2999"><a href="#Generator-2999"><span class="linenos">2999</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-2908"><a href="#Generator-2908"><span class="linenos">2908</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
+</span><span id="Generator-2909"><a href="#Generator-2909"><span class="linenos">2909</span></a>
+</span><span id="Generator-2910"><a href="#Generator-2910"><span class="linenos">2910</span></a> <span class="k">def</span> <span class="nf">overlaps_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">Overlaps</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2911"><a href="#Generator-2911"><span class="linenos">2911</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">)</span>
+</span><span id="Generator-2912"><a href="#Generator-2912"><span class="linenos">2912</span></a>
+</span><span id="Generator-2913"><a href="#Generator-2913"><span class="linenos">2913</span></a> <span class="k">def</span> <span class="nf">distance_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">Distance</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2914"><a href="#Generator-2914"><span class="linenos">2914</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2915"><a href="#Generator-2915"><span class="linenos">2915</span></a>
+</span><span id="Generator-2916"><a href="#Generator-2916"><span class="linenos">2916</span></a> <span class="k">def</span> <span class="nf">dot_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">Dot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2917"><a href="#Generator-2917"><span class="linenos">2917</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2918"><a href="#Generator-2918"><span class="linenos">2918</span></a>
+</span><span id="Generator-2919"><a href="#Generator-2919"><span class="linenos">2919</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2920"><a href="#Generator-2920"><span class="linenos">2920</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">)</span>
+</span><span id="Generator-2921"><a href="#Generator-2921"><span class="linenos">2921</span></a>
+</span><span id="Generator-2922"><a href="#Generator-2922"><span class="linenos">2922</span></a> <span class="k">def</span> <span class="nf">propertyeq_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">PropertyEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2923"><a href="#Generator-2923"><span class="linenos">2923</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:=&quot;</span><span class="p">)</span>
+</span><span id="Generator-2924"><a href="#Generator-2924"><span class="linenos">2924</span></a>
+</span><span id="Generator-2925"><a href="#Generator-2925"><span class="linenos">2925</span></a> <span class="k">def</span> <span class="nf">escape_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">Escape</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2926"><a href="#Generator-2926"><span class="linenos">2926</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">)</span>
+</span><span id="Generator-2927"><a href="#Generator-2927"><span class="linenos">2927</span></a>
+</span><span id="Generator-2928"><a href="#Generator-2928"><span class="linenos">2928</span></a> <span class="k">def</span> <span class="nf">glob_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">Glob</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2929"><a href="#Generator-2929"><span class="linenos">2929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;GLOB&quot;</span><span class="p">)</span>
+</span><span id="Generator-2930"><a href="#Generator-2930"><span class="linenos">2930</span></a>
+</span><span id="Generator-2931"><a href="#Generator-2931"><span class="linenos">2931</span></a> <span class="k">def</span> <span class="nf">gt_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">GT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2932"><a href="#Generator-2932"><span class="linenos">2932</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2933"><a href="#Generator-2933"><span class="linenos">2933</span></a>
+</span><span id="Generator-2934"><a href="#Generator-2934"><span class="linenos">2934</span></a> <span class="k">def</span> <span class="nf">gte_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">GTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2935"><a href="#Generator-2935"><span class="linenos">2935</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;=&quot;</span><span class="p">)</span>
+</span><span id="Generator-2936"><a href="#Generator-2936"><span class="linenos">2936</span></a>
+</span><span id="Generator-2937"><a href="#Generator-2937"><span class="linenos">2937</span></a> <span class="k">def</span> <span class="nf">ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2938"><a href="#Generator-2938"><span class="linenos">2938</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE&quot;</span><span class="p">)</span>
+</span><span id="Generator-2939"><a href="#Generator-2939"><span class="linenos">2939</span></a>
+</span><span id="Generator-2940"><a href="#Generator-2940"><span class="linenos">2940</span></a> <span class="k">def</span> <span class="nf">ilikeany_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">ILikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2941"><a href="#Generator-2941"><span class="linenos">2941</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">)</span>
+</span><span id="Generator-2942"><a href="#Generator-2942"><span class="linenos">2942</span></a>
+</span><span id="Generator-2943"><a href="#Generator-2943"><span class="linenos">2943</span></a> <span class="k">def</span> <span class="nf">is_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">Is</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2944"><a href="#Generator-2944"><span class="linenos">2944</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
+</span><span id="Generator-2945"><a href="#Generator-2945"><span class="linenos">2945</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-2946"><a href="#Generator-2946"><span class="linenos">2946</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-2947"><a href="#Generator-2947"><span class="linenos">2947</span></a> <span class="p">)</span>
+</span><span id="Generator-2948"><a href="#Generator-2948"><span class="linenos">2948</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS&quot;</span><span class="p">)</span>
+</span><span id="Generator-2949"><a href="#Generator-2949"><span class="linenos">2949</span></a>
+</span><span id="Generator-2950"><a href="#Generator-2950"><span class="linenos">2950</span></a> <span class="k">def</span> <span class="nf">like_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">Like</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2951"><a href="#Generator-2951"><span class="linenos">2951</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">)</span>
+</span><span id="Generator-2952"><a href="#Generator-2952"><span class="linenos">2952</span></a>
+</span><span id="Generator-2953"><a href="#Generator-2953"><span class="linenos">2953</span></a> <span class="k">def</span> <span class="nf">likeany_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">LikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2954"><a href="#Generator-2954"><span class="linenos">2954</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">)</span>
+</span><span id="Generator-2955"><a href="#Generator-2955"><span class="linenos">2955</span></a>
+</span><span id="Generator-2956"><a href="#Generator-2956"><span class="linenos">2956</span></a> <span class="k">def</span> <span class="nf">similarto_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">SimilarTo</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2957"><a href="#Generator-2957"><span class="linenos">2957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">)</span>
+</span><span id="Generator-2958"><a href="#Generator-2958"><span class="linenos">2958</span></a>
+</span><span id="Generator-2959"><a href="#Generator-2959"><span class="linenos">2959</span></a> <span class="k">def</span> <span class="nf">lt_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">LT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2960"><a href="#Generator-2960"><span class="linenos">2960</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2961"><a href="#Generator-2961"><span class="linenos">2961</span></a>
+</span><span id="Generator-2962"><a href="#Generator-2962"><span class="linenos">2962</span></a> <span class="k">def</span> <span class="nf">lte_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">LTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2963"><a href="#Generator-2963"><span class="linenos">2963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;=&quot;</span><span class="p">)</span>
+</span><span id="Generator-2964"><a href="#Generator-2964"><span class="linenos">2964</span></a>
+</span><span id="Generator-2965"><a href="#Generator-2965"><span class="linenos">2965</span></a> <span class="k">def</span> <span class="nf">mod_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">Mod</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2966"><a href="#Generator-2966"><span class="linenos">2966</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;%&quot;</span><span class="p">)</span>
+</span><span id="Generator-2967"><a href="#Generator-2967"><span class="linenos">2967</span></a>
+</span><span id="Generator-2968"><a href="#Generator-2968"><span class="linenos">2968</span></a> <span class="k">def</span> <span class="nf">mul_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">Mul</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2969"><a href="#Generator-2969"><span class="linenos">2969</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">)</span>
+</span><span id="Generator-2970"><a href="#Generator-2970"><span class="linenos">2970</span></a>
+</span><span id="Generator-2971"><a href="#Generator-2971"><span class="linenos">2971</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2972"><a href="#Generator-2972"><span class="linenos">2972</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-2973"><a href="#Generator-2973"><span class="linenos">2973</span></a>
+</span><span id="Generator-2974"><a href="#Generator-2974"><span class="linenos">2974</span></a> <span class="k">def</span> <span class="nf">nullsafeeq_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">NullSafeEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2975"><a href="#Generator-2975"><span class="linenos">2975</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS NOT DISTINCT FROM&quot;</span><span class="p">)</span>
+</span><span id="Generator-2976"><a href="#Generator-2976"><span class="linenos">2976</span></a>
+</span><span id="Generator-2977"><a href="#Generator-2977"><span class="linenos">2977</span></a> <span class="k">def</span> <span class="nf">nullsafeneq_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">NullSafeNEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2978"><a href="#Generator-2978"><span class="linenos">2978</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS DISTINCT FROM&quot;</span><span class="p">)</span>
+</span><span id="Generator-2979"><a href="#Generator-2979"><span class="linenos">2979</span></a>
+</span><span id="Generator-2980"><a href="#Generator-2980"><span class="linenos">2980</span></a> <span class="k">def</span> <span class="nf">or_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">Or</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2981"><a href="#Generator-2981"><span class="linenos">2981</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OR&quot;</span><span class="p">)</span>
+</span><span id="Generator-2982"><a href="#Generator-2982"><span class="linenos">2982</span></a>
+</span><span id="Generator-2983"><a href="#Generator-2983"><span class="linenos">2983</span></a> <span class="k">def</span> <span class="nf">slice_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">Slice</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2984"><a href="#Generator-2984"><span class="linenos">2984</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">)</span>
+</span><span id="Generator-2985"><a href="#Generator-2985"><span class="linenos">2985</span></a>
+</span><span id="Generator-2986"><a href="#Generator-2986"><span class="linenos">2986</span></a> <span class="k">def</span> <span class="nf">sub_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">Sub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2987"><a href="#Generator-2987"><span class="linenos">2987</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)</span>
+</span><span id="Generator-2988"><a href="#Generator-2988"><span class="linenos">2988</span></a>
+</span><span id="Generator-2989"><a href="#Generator-2989"><span class="linenos">2989</span></a> <span class="k">def</span> <span class="nf">trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2990"><a href="#Generator-2990"><span class="linenos">2990</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
+</span><span id="Generator-2991"><a href="#Generator-2991"><span class="linenos">2991</span></a>
+</span><span id="Generator-2992"><a href="#Generator-2992"><span class="linenos">2992</span></a> <span class="k">def</span> <span class="nf">log_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">Log</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2993"><a href="#Generator-2993"><span class="linenos">2993</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-2994"><a href="#Generator-2994"><span class="linenos">2994</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Generator-2995"><a href="#Generator-2995"><span class="linenos">2995</span></a>
+</span><span id="Generator-2996"><a href="#Generator-2996"><span class="linenos">2996</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
+</span><span id="Generator-2997"><a href="#Generator-2997"><span class="linenos">2997</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span><span class="p">,</span> <span class="n">this</span>
+</span><span id="Generator-2998"><a href="#Generator-2998"><span class="linenos">2998</span></a>
+</span><span id="Generator-2999"><a href="#Generator-2999"><span class="linenos">2999</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;LOG&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span><span class="p">)</span>
</span><span id="Generator-3000"><a href="#Generator-3000"><span class="linenos">3000</span></a>
-</span><span id="Generator-3001"><a href="#Generator-3001"><span class="linenos">3001</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="Generator-3002"><a href="#Generator-3002"><span class="linenos">3002</span></a> <span class="n">arg_value</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="n">key</span><span class="p">)</span>
-</span><span id="Generator-3003"><a href="#Generator-3003"><span class="linenos">3003</span></a>
-</span><span id="Generator-3004"><a href="#Generator-3004"><span class="linenos">3004</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator-3005"><a href="#Generator-3005"><span class="linenos">3005</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">arg_value</span><span class="p">:</span>
-</span><span id="Generator-3006"><a href="#Generator-3006"><span class="linenos">3006</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator-3007"><a href="#Generator-3007"><span class="linenos">3007</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-3008"><a href="#Generator-3008"><span class="linenos">3008</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_value</span><span class="p">)</span>
-</span><span id="Generator-3009"><a href="#Generator-3009"><span class="linenos">3009</span></a>
-</span><span id="Generator-3010"><a href="#Generator-3010"><span class="linenos">3010</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
-</span><span id="Generator-3011"><a href="#Generator-3011"><span class="linenos">3011</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="Generator-3012"><a href="#Generator-3012"><span class="linenos">3012</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-3013"><a href="#Generator-3013"><span class="linenos">3013</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator-3001"><a href="#Generator-3001"><span class="linenos">3001</span></a> <span class="k">def</span> <span class="nf">use_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">Use</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3002"><a href="#Generator-3002"><span class="linenos">3002</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-3003"><a href="#Generator-3003"><span class="linenos">3003</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3004"><a href="#Generator-3004"><span class="linenos">3004</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3005"><a href="#Generator-3005"><span class="linenos">3005</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3006"><a href="#Generator-3006"><span class="linenos">3006</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USE</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3007"><a href="#Generator-3007"><span class="linenos">3007</span></a>
+</span><span id="Generator-3008"><a href="#Generator-3008"><span class="linenos">3008</span></a> <span class="k">def</span> <span class="nf">binary</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">Binary</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3009"><a href="#Generator-3009"><span class="linenos">3009</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Generator-3010"><a href="#Generator-3010"><span class="linenos">3010</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3011"><a href="#Generator-3011"><span class="linenos">3011</span></a>
+</span><span id="Generator-3012"><a href="#Generator-3012"><span class="linenos">3012</span></a> <span class="k">def</span> <span class="nf">function_fallback_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">Func</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3013"><a href="#Generator-3013"><span class="linenos">3013</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Generator-3014"><a href="#Generator-3014"><span class="linenos">3014</span></a>
-</span><span id="Generator-3015"><a href="#Generator-3015"><span class="linenos">3015</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">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Generator-3016"><a href="#Generator-3016"><span class="linenos">3016</span></a>
-</span><span id="Generator-3017"><a href="#Generator-3017"><span class="linenos">3017</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
-</span><span id="Generator-3018"><a href="#Generator-3018"><span class="linenos">3018</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-3019"><a href="#Generator-3019"><span class="linenos">3019</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator-3020"><a href="#Generator-3020"><span class="linenos">3020</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="Generator-3021"><a href="#Generator-3021"><span class="linenos">3021</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
-</span><span id="Generator-3022"><a href="#Generator-3022"><span class="linenos">3022</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
-</span><span id="Generator-3023"><a href="#Generator-3023"><span class="linenos">3023</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3024"><a href="#Generator-3024"><span class="linenos">3024</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</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="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3025"><a href="#Generator-3025"><span class="linenos">3025</span></a>
-</span><span id="Generator-3026"><a href="#Generator-3026"><span class="linenos">3026</span></a> <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3027"><a href="#Generator-3027"><span class="linenos">3027</span></a> <span class="n">arg_sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Generator-3028"><a href="#Generator-3028"><span class="linenos">3028</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
-</span><span id="Generator-3029"><a href="#Generator-3029"><span class="linenos">3029</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;,</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-3030"><a href="#Generator-3030"><span class="linenos">3030</span></a> <span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span>
-</span><span id="Generator-3031"><a href="#Generator-3031"><span class="linenos">3031</span></a>
-</span><span id="Generator-3032"><a href="#Generator-3032"><span class="linenos">3032</span></a> <span class="k">def</span> <span class="nf">text_width</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="Generator-3033"><a href="#Generator-3033"><span class="linenos">3033</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Generator-3034"><a href="#Generator-3034"><span class="linenos">3034</span></a>
-</span><span id="Generator-3035"><a href="#Generator-3035"><span class="linenos">3035</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator-3036"><a href="#Generator-3036"><span class="linenos">3036</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Generator-3037"><a href="#Generator-3037"><span class="linenos">3037</span></a> <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;format&quot;</span><span class="p">),</span>
-</span><span id="Generator-3038"><a href="#Generator-3038"><span class="linenos">3038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span>
-</span><span id="Generator-3039"><a href="#Generator-3039"><span class="linenos">3039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span><span class="p">,</span>
-</span><span id="Generator-3040"><a href="#Generator-3040"><span class="linenos">3040</span></a> <span class="p">)</span>
-</span><span id="Generator-3041"><a href="#Generator-3041"><span class="linenos">3041</span></a>
-</span><span id="Generator-3042"><a href="#Generator-3042"><span class="linenos">3042</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="Generator-3043"><a href="#Generator-3043"><span class="linenos">3043</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-3044"><a href="#Generator-3044"><span class="linenos">3044</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-3045"><a href="#Generator-3045"><span class="linenos">3045</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-3046"><a href="#Generator-3046"><span class="linenos">3046</span></a> <span class="n">sqls</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-3047"><a href="#Generator-3047"><span class="linenos">3047</span></a> <span class="n">flat</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-3048"><a href="#Generator-3048"><span class="linenos">3048</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator-3049"><a href="#Generator-3049"><span class="linenos">3049</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-3050"><a href="#Generator-3050"><span class="linenos">3050</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
-</span><span id="Generator-3051"><a href="#Generator-3051"><span class="linenos">3051</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-3052"><a href="#Generator-3052"><span class="linenos">3052</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3053"><a href="#Generator-3053"><span class="linenos">3053</span></a> <span class="n">expressions</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="n">key</span> <span class="ow">or</span> <span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="n">sqls</span>
-</span><span id="Generator-3054"><a href="#Generator-3054"><span class="linenos">3054</span></a>
-</span><span id="Generator-3055"><a href="#Generator-3055"><span class="linenos">3055</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator-3056"><a href="#Generator-3056"><span class="linenos">3056</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3057"><a href="#Generator-3057"><span class="linenos">3057</span></a>
-</span><span id="Generator-3058"><a href="#Generator-3058"><span class="linenos">3058</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator-3059"><a href="#Generator-3059"><span class="linenos">3059</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator-3060"><a href="#Generator-3060"><span class="linenos">3060</span></a>
-</span><span id="Generator-3061"><a href="#Generator-3061"><span class="linenos">3061</span></a> <span class="n">num_sqls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-3062"><a href="#Generator-3062"><span class="linenos">3062</span></a>
-</span><span id="Generator-3063"><a href="#Generator-3063"><span class="linenos">3063</span></a> <span class="c1"># These are calculated once in case we have the leading_comma / pretty option set, correspondingly</span>
-</span><span id="Generator-3064"><a href="#Generator-3064"><span class="linenos">3064</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span>
-</span><span id="Generator-3065"><a href="#Generator-3065"><span class="linenos">3065</span></a> <span class="n">stripped_sep</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator-3066"><a href="#Generator-3066"><span class="linenos">3066</span></a>
-</span><span id="Generator-3067"><a href="#Generator-3067"><span class="linenos">3067</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-3068"><a href="#Generator-3068"><span class="linenos">3068</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Generator-3069"><a href="#Generator-3069"><span class="linenos">3069</span></a> <span class="n">sql</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">e</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-3070"><a href="#Generator-3070"><span class="linenos">3070</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
-</span><span id="Generator-3071"><a href="#Generator-3071"><span class="linenos">3071</span></a> <span class="k">continue</span>
-</span><span id="Generator-3072"><a href="#Generator-3072"><span class="linenos">3072</span></a>
-</span><span id="Generator-3073"><a href="#Generator-3073"><span class="linenos">3073</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3015"><a href="#Generator-3015"><span class="linenos">3015</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="Generator-3016"><a href="#Generator-3016"><span class="linenos">3016</span></a> <span class="n">arg_value</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="n">key</span><span class="p">)</span>
+</span><span id="Generator-3017"><a href="#Generator-3017"><span class="linenos">3017</span></a>
+</span><span id="Generator-3018"><a href="#Generator-3018"><span class="linenos">3018</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator-3019"><a href="#Generator-3019"><span class="linenos">3019</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">arg_value</span><span class="p">:</span>
+</span><span id="Generator-3020"><a href="#Generator-3020"><span class="linenos">3020</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator-3021"><a href="#Generator-3021"><span class="linenos">3021</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-3022"><a href="#Generator-3022"><span class="linenos">3022</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_value</span><span class="p">)</span>
+</span><span id="Generator-3023"><a href="#Generator-3023"><span class="linenos">3023</span></a>
+</span><span id="Generator-3024"><a href="#Generator-3024"><span class="linenos">3024</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
+</span><span id="Generator-3025"><a href="#Generator-3025"><span class="linenos">3025</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator-3026"><a href="#Generator-3026"><span class="linenos">3026</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-3027"><a href="#Generator-3027"><span class="linenos">3027</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator-3028"><a href="#Generator-3028"><span class="linenos">3028</span></a>
+</span><span id="Generator-3029"><a href="#Generator-3029"><span class="linenos">3029</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">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Generator-3030"><a href="#Generator-3030"><span class="linenos">3030</span></a>
+</span><span id="Generator-3031"><a href="#Generator-3031"><span class="linenos">3031</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
+</span><span id="Generator-3032"><a href="#Generator-3032"><span class="linenos">3032</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-3033"><a href="#Generator-3033"><span class="linenos">3033</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator-3034"><a href="#Generator-3034"><span class="linenos">3034</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="Generator-3035"><a href="#Generator-3035"><span class="linenos">3035</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
+</span><span id="Generator-3036"><a href="#Generator-3036"><span class="linenos">3036</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
+</span><span id="Generator-3037"><a href="#Generator-3037"><span class="linenos">3037</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3038"><a href="#Generator-3038"><span class="linenos">3038</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</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="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3039"><a href="#Generator-3039"><span class="linenos">3039</span></a>
+</span><span id="Generator-3040"><a href="#Generator-3040"><span class="linenos">3040</span></a> <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3041"><a href="#Generator-3041"><span class="linenos">3041</span></a> <span class="n">arg_sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator-3042"><a href="#Generator-3042"><span class="linenos">3042</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
+</span><span id="Generator-3043"><a href="#Generator-3043"><span class="linenos">3043</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;,</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-3044"><a href="#Generator-3044"><span class="linenos">3044</span></a> <span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span>
+</span><span id="Generator-3045"><a href="#Generator-3045"><span class="linenos">3045</span></a>
+</span><span id="Generator-3046"><a href="#Generator-3046"><span class="linenos">3046</span></a> <span class="k">def</span> <span class="nf">text_width</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="Generator-3047"><a href="#Generator-3047"><span class="linenos">3047</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Generator-3048"><a href="#Generator-3048"><span class="linenos">3048</span></a>
+</span><span id="Generator-3049"><a href="#Generator-3049"><span class="linenos">3049</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator-3050"><a href="#Generator-3050"><span class="linenos">3050</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Generator-3051"><a href="#Generator-3051"><span class="linenos">3051</span></a> <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;format&quot;</span><span class="p">),</span>
+</span><span id="Generator-3052"><a href="#Generator-3052"><span class="linenos">3052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span>
+</span><span id="Generator-3053"><a href="#Generator-3053"><span class="linenos">3053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span><span class="p">,</span>
+</span><span id="Generator-3054"><a href="#Generator-3054"><span class="linenos">3054</span></a> <span class="p">)</span>
+</span><span id="Generator-3055"><a href="#Generator-3055"><span class="linenos">3055</span></a>
+</span><span id="Generator-3056"><a href="#Generator-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
+</span><span id="Generator-3057"><a href="#Generator-3057"><span class="linenos">3057</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator-3058"><a href="#Generator-3058"><span class="linenos">3058</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-3059"><a href="#Generator-3059"><span class="linenos">3059</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-3060"><a href="#Generator-3060"><span class="linenos">3060</span></a> <span class="n">sqls</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-3061"><a href="#Generator-3061"><span class="linenos">3061</span></a> <span class="n">flat</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-3062"><a href="#Generator-3062"><span class="linenos">3062</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator-3063"><a href="#Generator-3063"><span class="linenos">3063</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-3064"><a href="#Generator-3064"><span class="linenos">3064</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
+</span><span id="Generator-3065"><a href="#Generator-3065"><span class="linenos">3065</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-3066"><a href="#Generator-3066"><span class="linenos">3066</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3067"><a href="#Generator-3067"><span class="linenos">3067</span></a> <span class="n">expressions</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="n">key</span> <span class="ow">or</span> <span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="n">sqls</span>
+</span><span id="Generator-3068"><a href="#Generator-3068"><span class="linenos">3068</span></a>
+</span><span id="Generator-3069"><a href="#Generator-3069"><span class="linenos">3069</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator-3070"><a href="#Generator-3070"><span class="linenos">3070</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3071"><a href="#Generator-3071"><span class="linenos">3071</span></a>
+</span><span id="Generator-3072"><a href="#Generator-3072"><span class="linenos">3072</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator-3073"><a href="#Generator-3073"><span class="linenos">3073</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="Generator-3074"><a href="#Generator-3074"><span class="linenos">3074</span></a>
-</span><span id="Generator-3075"><a href="#Generator-3075"><span class="linenos">3075</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator-3076"><a href="#Generator-3076"><span class="linenos">3076</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span><span class="p">:</span>
-</span><span id="Generator-3077"><a href="#Generator-3077"><span class="linenos">3077</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">pad</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-3078"><a href="#Generator-3078"><span class="linenos">3078</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-3079"><a href="#Generator-3079"><span class="linenos">3079</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Generator-3080"><a href="#Generator-3080"><span class="linenos">3080</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">stripped_sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3081"><a href="#Generator-3081"><span class="linenos">3081</span></a> <span class="p">)</span>
-</span><span id="Generator-3082"><a href="#Generator-3082"><span class="linenos">3082</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-3083"><a href="#Generator-3083"><span class="linenos">3083</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-3084"><a href="#Generator-3084"><span class="linenos">3084</span></a>
-</span><span id="Generator-3085"><a href="#Generator-3085"><span class="linenos">3085</span></a> <span class="n">result_sql</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span>
-</span><span id="Generator-3086"><a href="#Generator-3086"><span class="linenos">3086</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
-</span><span id="Generator-3087"><a href="#Generator-3087"><span class="linenos">3087</span></a>
-</span><span id="Generator-3088"><a href="#Generator-3088"><span class="linenos">3088</span></a> <span class="k">def</span> <span class="nf">op_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3089"><a href="#Generator-3089"><span class="linenos">3089</span></a> <span class="n">flat</span> <span class="o">=</span> <span class="n">flat</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span>
-</span><span id="Generator-3090"><a href="#Generator-3090"><span class="linenos">3090</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">flat</span><span class="p">)</span>
-</span><span id="Generator-3091"><a href="#Generator-3091"><span class="linenos">3091</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator-3092"><a href="#Generator-3092"><span class="linenos">3092</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3093"><a href="#Generator-3093"><span class="linenos">3093</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expressions_sql</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3094"><a href="#Generator-3094"><span class="linenos">3094</span></a>
-</span><span id="Generator-3095"><a href="#Generator-3095"><span class="linenos">3095</span></a> <span class="k">def</span> <span class="nf">naked_property</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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3096"><a href="#Generator-3096"><span class="linenos">3096</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator-3097"><a href="#Generator-3097"><span class="linenos">3097</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
-</span><span id="Generator-3098"><a href="#Generator-3098"><span class="linenos">3098</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-3099"><a href="#Generator-3099"><span class="linenos">3099</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-3100"><a href="#Generator-3100"><span class="linenos">3100</span></a>
-</span><span id="Generator-3101"><a href="#Generator-3101"><span class="linenos">3101</span></a> <span class="k">def</span> <span class="nf">set_operation</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">Union</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3102"><a href="#Generator-3102"><span class="linenos">3102</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Generator-3103"><a href="#Generator-3103"><span class="linenos">3103</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
-</span><span id="Generator-3104"><a href="#Generator-3104"><span class="linenos">3104</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
-</span><span id="Generator-3105"><a href="#Generator-3105"><span class="linenos">3105</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3106"><a href="#Generator-3106"><span class="linenos">3106</span></a> <span class="p">)</span>
-</span><span id="Generator-3107"><a href="#Generator-3107"><span class="linenos">3107</span></a>
-</span><span id="Generator-3108"><a href="#Generator-3108"><span class="linenos">3108</span></a> <span class="k">def</span> <span class="nf">tag_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">Tag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3109"><a href="#Generator-3109"><span class="linenos">3109</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</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="s1">&#39;prefix&#39;</span><span class="p">)</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="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}{</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="s1">&#39;postfix&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3110"><a href="#Generator-3110"><span class="linenos">3110</span></a>
-</span><span id="Generator-3111"><a href="#Generator-3111"><span class="linenos">3111</span></a> <span class="k">def</span> <span class="nf">token_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3112"><a href="#Generator-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">TOKEN_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">token_type</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Generator-3113"><a href="#Generator-3113"><span class="linenos">3113</span></a>
-</span><span id="Generator-3114"><a href="#Generator-3114"><span class="linenos">3114</span></a> <span class="k">def</span> <span class="nf">userdefinedfunction_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">UserDefinedFunction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3115"><a href="#Generator-3115"><span class="linenos">3115</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3116"><a href="#Generator-3116"><span class="linenos">3116</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-3117"><a href="#Generator-3117"><span class="linenos">3117</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-3118"><a href="#Generator-3118"><span class="linenos">3118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wrapped&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3119"><a href="#Generator-3119"><span class="linenos">3119</span></a> <span class="p">)</span>
-</span><span id="Generator-3120"><a href="#Generator-3120"><span class="linenos">3120</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3075"><a href="#Generator-3075"><span class="linenos">3075</span></a> <span class="n">num_sqls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-3076"><a href="#Generator-3076"><span class="linenos">3076</span></a>
+</span><span id="Generator-3077"><a href="#Generator-3077"><span class="linenos">3077</span></a> <span class="c1"># These are calculated once in case we have the leading_comma / pretty option set, correspondingly</span>
+</span><span id="Generator-3078"><a href="#Generator-3078"><span class="linenos">3078</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span>
+</span><span id="Generator-3079"><a href="#Generator-3079"><span class="linenos">3079</span></a> <span class="n">stripped_sep</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator-3080"><a href="#Generator-3080"><span class="linenos">3080</span></a>
+</span><span id="Generator-3081"><a href="#Generator-3081"><span class="linenos">3081</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-3082"><a href="#Generator-3082"><span class="linenos">3082</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Generator-3083"><a href="#Generator-3083"><span class="linenos">3083</span></a> <span class="n">sql</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">e</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-3084"><a href="#Generator-3084"><span class="linenos">3084</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
+</span><span id="Generator-3085"><a href="#Generator-3085"><span class="linenos">3085</span></a> <span class="k">continue</span>
+</span><span id="Generator-3086"><a href="#Generator-3086"><span class="linenos">3086</span></a>
+</span><span id="Generator-3087"><a href="#Generator-3087"><span class="linenos">3087</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3088"><a href="#Generator-3088"><span class="linenos">3088</span></a>
+</span><span id="Generator-3089"><a href="#Generator-3089"><span class="linenos">3089</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator-3090"><a href="#Generator-3090"><span class="linenos">3090</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span><span class="p">:</span>
+</span><span id="Generator-3091"><a href="#Generator-3091"><span class="linenos">3091</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">pad</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-3092"><a href="#Generator-3092"><span class="linenos">3092</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-3093"><a href="#Generator-3093"><span class="linenos">3093</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Generator-3094"><a href="#Generator-3094"><span class="linenos">3094</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">stripped_sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3095"><a href="#Generator-3095"><span class="linenos">3095</span></a> <span class="p">)</span>
+</span><span id="Generator-3096"><a href="#Generator-3096"><span class="linenos">3096</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-3097"><a href="#Generator-3097"><span class="linenos">3097</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-3098"><a href="#Generator-3098"><span class="linenos">3098</span></a>
+</span><span id="Generator-3099"><a href="#Generator-3099"><span class="linenos">3099</span></a> <span class="n">result_sql</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span>
+</span><span id="Generator-3100"><a href="#Generator-3100"><span class="linenos">3100</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
+</span><span id="Generator-3101"><a href="#Generator-3101"><span class="linenos">3101</span></a>
+</span><span id="Generator-3102"><a href="#Generator-3102"><span class="linenos">3102</span></a> <span class="k">def</span> <span class="nf">op_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3103"><a href="#Generator-3103"><span class="linenos">3103</span></a> <span class="n">flat</span> <span class="o">=</span> <span class="n">flat</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span>
+</span><span id="Generator-3104"><a href="#Generator-3104"><span class="linenos">3104</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">flat</span><span class="p">)</span>
+</span><span id="Generator-3105"><a href="#Generator-3105"><span class="linenos">3105</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator-3106"><a href="#Generator-3106"><span class="linenos">3106</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3107"><a href="#Generator-3107"><span class="linenos">3107</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expressions_sql</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3108"><a href="#Generator-3108"><span class="linenos">3108</span></a>
+</span><span id="Generator-3109"><a href="#Generator-3109"><span class="linenos">3109</span></a> <span class="k">def</span> <span class="nf">naked_property</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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3110"><a href="#Generator-3110"><span class="linenos">3110</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator-3111"><a href="#Generator-3111"><span class="linenos">3111</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
+</span><span id="Generator-3112"><a href="#Generator-3112"><span class="linenos">3112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-3113"><a href="#Generator-3113"><span class="linenos">3113</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator-3114"><a href="#Generator-3114"><span class="linenos">3114</span></a>
+</span><span id="Generator-3115"><a href="#Generator-3115"><span class="linenos">3115</span></a> <span class="k">def</span> <span class="nf">set_operation</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">Union</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3116"><a href="#Generator-3116"><span class="linenos">3116</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Generator-3117"><a href="#Generator-3117"><span class="linenos">3117</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
+</span><span id="Generator-3118"><a href="#Generator-3118"><span class="linenos">3118</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
+</span><span id="Generator-3119"><a href="#Generator-3119"><span class="linenos">3119</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3120"><a href="#Generator-3120"><span class="linenos">3120</span></a> <span class="p">)</span>
</span><span id="Generator-3121"><a href="#Generator-3121"><span class="linenos">3121</span></a>
-</span><span id="Generator-3122"><a href="#Generator-3122"><span class="linenos">3122</span></a> <span class="k">def</span> <span class="nf">joinhint_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">JoinHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3123"><a href="#Generator-3123"><span class="linenos">3123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3124"><a href="#Generator-3124"><span class="linenos">3124</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-3125"><a href="#Generator-3125"><span class="linenos">3125</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-3126"><a href="#Generator-3126"><span class="linenos">3126</span></a>
-</span><span id="Generator-3127"><a href="#Generator-3127"><span class="linenos">3127</span></a> <span class="k">def</span> <span class="nf">kwarg_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">Kwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3128"><a href="#Generator-3128"><span class="linenos">3128</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">)</span>
-</span><span id="Generator-3129"><a href="#Generator-3129"><span class="linenos">3129</span></a>
-</span><span id="Generator-3130"><a href="#Generator-3130"><span class="linenos">3130</span></a> <span class="k">def</span> <span class="nf">when_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">When</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3131"><a href="#Generator-3131"><span class="linenos">3131</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="s2">&quot;MATCHED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;matched&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;NOT MATCHED&quot;</span>
-</span><span id="Generator-3132"><a href="#Generator-3132"><span class="linenos">3132</span></a> <span class="n">source</span> <span class="o">=</span> <span class="s2">&quot; BY SOURCE&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">MATCHED_BY_SOURCE</span> <span class="ow">and</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;source&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3133"><a href="#Generator-3133"><span class="linenos">3133</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
-</span><span id="Generator-3134"><a href="#Generator-3134"><span class="linenos">3134</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3122"><a href="#Generator-3122"><span class="linenos">3122</span></a> <span class="k">def</span> <span class="nf">tag_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">Tag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3123"><a href="#Generator-3123"><span class="linenos">3123</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</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="s1">&#39;prefix&#39;</span><span class="p">)</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="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}{</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="s1">&#39;postfix&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3124"><a href="#Generator-3124"><span class="linenos">3124</span></a>
+</span><span id="Generator-3125"><a href="#Generator-3125"><span class="linenos">3125</span></a> <span class="k">def</span> <span class="nf">token_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3126"><a href="#Generator-3126"><span class="linenos">3126</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">TOKEN_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">token_type</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Generator-3127"><a href="#Generator-3127"><span class="linenos">3127</span></a>
+</span><span id="Generator-3128"><a href="#Generator-3128"><span class="linenos">3128</span></a> <span class="k">def</span> <span class="nf">userdefinedfunction_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">UserDefinedFunction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3129"><a href="#Generator-3129"><span class="linenos">3129</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3130"><a href="#Generator-3130"><span class="linenos">3130</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-3131"><a href="#Generator-3131"><span class="linenos">3131</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-3132"><a href="#Generator-3132"><span class="linenos">3132</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wrapped&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3133"><a href="#Generator-3133"><span class="linenos">3133</span></a> <span class="p">)</span>
+</span><span id="Generator-3134"><a href="#Generator-3134"><span class="linenos">3134</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-3135"><a href="#Generator-3135"><span class="linenos">3135</span></a>
-</span><span id="Generator-3136"><a href="#Generator-3136"><span class="linenos">3136</span></a> <span class="n">then_expression</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;then&quot;</span><span class="p">)</span>
-</span><span id="Generator-3137"><a href="#Generator-3137"><span class="linenos">3137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">):</span>
-</span><span id="Generator-3138"><a href="#Generator-3138"><span class="linenos">3138</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT </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">then_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="Generator-3139"><a href="#Generator-3139"><span class="linenos">3139</span></a> <span class="k">if</span> <span class="s2">&quot;expression&quot;</span> <span class="ow">in</span> <span class="n">then_expression</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
-</span><span id="Generator-3140"><a href="#Generator-3140"><span class="linenos">3140</span></a> <span class="n">then</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; VALUES </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3141"><a href="#Generator-3141"><span class="linenos">3141</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">):</span>
-</span><span id="Generator-3142"><a href="#Generator-3142"><span class="linenos">3142</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_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;expressions&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">):</span>
-</span><span id="Generator-3143"><a href="#Generator-3143"><span class="linenos">3143</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3144"><a href="#Generator-3144"><span class="linenos">3144</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-3145"><a href="#Generator-3145"><span class="linenos">3145</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3146"><a href="#Generator-3146"><span class="linenos">3146</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-3147"><a href="#Generator-3147"><span class="linenos">3147</span></a> <span class="n">then</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">then_expression</span><span class="p">)</span>
-</span><span id="Generator-3148"><a href="#Generator-3148"><span class="linenos">3148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="n">matched</span><span class="si">}{</span><span class="n">source</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2"> THEN </span><span class="si">{</span><span class="n">then</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3136"><a href="#Generator-3136"><span class="linenos">3136</span></a> <span class="k">def</span> <span class="nf">joinhint_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">JoinHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3137"><a href="#Generator-3137"><span class="linenos">3137</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3138"><a href="#Generator-3138"><span class="linenos">3138</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-3139"><a href="#Generator-3139"><span class="linenos">3139</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-3140"><a href="#Generator-3140"><span class="linenos">3140</span></a>
+</span><span id="Generator-3141"><a href="#Generator-3141"><span class="linenos">3141</span></a> <span class="k">def</span> <span class="nf">kwarg_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">Kwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3142"><a href="#Generator-3142"><span class="linenos">3142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">)</span>
+</span><span id="Generator-3143"><a href="#Generator-3143"><span class="linenos">3143</span></a>
+</span><span id="Generator-3144"><a href="#Generator-3144"><span class="linenos">3144</span></a> <span class="k">def</span> <span class="nf">when_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">When</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3145"><a href="#Generator-3145"><span class="linenos">3145</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="s2">&quot;MATCHED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;matched&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;NOT MATCHED&quot;</span>
+</span><span id="Generator-3146"><a href="#Generator-3146"><span class="linenos">3146</span></a> <span class="n">source</span> <span class="o">=</span> <span class="s2">&quot; BY SOURCE&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">MATCHED_BY_SOURCE</span> <span class="ow">and</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;source&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3147"><a href="#Generator-3147"><span class="linenos">3147</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
+</span><span id="Generator-3148"><a href="#Generator-3148"><span class="linenos">3148</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-3149"><a href="#Generator-3149"><span class="linenos">3149</span></a>
-</span><span id="Generator-3150"><a href="#Generator-3150"><span class="linenos">3150</span></a> <span class="k">def</span> <span class="nf">merge_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">Merge</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3151"><a href="#Generator-3151"><span class="linenos">3151</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-3152"><a href="#Generator-3152"><span class="linenos">3152</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3153"><a href="#Generator-3153"><span class="linenos">3153</span></a>
-</span><span id="Generator-3154"><a href="#Generator-3154"><span class="linenos">3154</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</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;hints&quot;</span><span class="p">)</span>
-</span><span id="Generator-3155"><a href="#Generator-3155"><span class="linenos">3155</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
-</span><span id="Generator-3156"><a href="#Generator-3156"><span class="linenos">3156</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
-</span><span id="Generator-3157"><a href="#Generator-3157"><span class="linenos">3157</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3158"><a href="#Generator-3158"><span class="linenos">3158</span></a>
-</span><span id="Generator-3159"><a href="#Generator-3159"><span class="linenos">3159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="Generator-3160"><a href="#Generator-3160"><span class="linenos">3160</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;USING </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;using&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3161"><a href="#Generator-3161"><span class="linenos">3161</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON </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;on&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3162"><a href="#Generator-3162"><span class="linenos">3162</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-3150"><a href="#Generator-3150"><span class="linenos">3150</span></a> <span class="n">then_expression</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;then&quot;</span><span class="p">)</span>
+</span><span id="Generator-3151"><a href="#Generator-3151"><span class="linenos">3151</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">):</span>
+</span><span id="Generator-3152"><a href="#Generator-3152"><span class="linenos">3152</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT </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">then_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="Generator-3153"><a href="#Generator-3153"><span class="linenos">3153</span></a> <span class="k">if</span> <span class="s2">&quot;expression&quot;</span> <span class="ow">in</span> <span class="n">then_expression</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
+</span><span id="Generator-3154"><a href="#Generator-3154"><span class="linenos">3154</span></a> <span class="n">then</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; VALUES </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3155"><a href="#Generator-3155"><span class="linenos">3155</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">):</span>
+</span><span id="Generator-3156"><a href="#Generator-3156"><span class="linenos">3156</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_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;expressions&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">):</span>
+</span><span id="Generator-3157"><a href="#Generator-3157"><span class="linenos">3157</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3158"><a href="#Generator-3158"><span class="linenos">3158</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-3159"><a href="#Generator-3159"><span class="linenos">3159</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3160"><a href="#Generator-3160"><span class="linenos">3160</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-3161"><a href="#Generator-3161"><span class="linenos">3161</span></a> <span class="n">then</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">then_expression</span><span class="p">)</span>
+</span><span id="Generator-3162"><a href="#Generator-3162"><span class="linenos">3162</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="n">matched</span><span class="si">}{</span><span class="n">source</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2"> THEN </span><span class="si">{</span><span class="n">then</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-3163"><a href="#Generator-3163"><span class="linenos">3163</span></a>
-</span><span id="Generator-3164"><a href="#Generator-3164"><span class="linenos">3164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator-3165"><a href="#Generator-3165"><span class="linenos">3165</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;MERGE INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3166"><a href="#Generator-3166"><span class="linenos">3166</span></a> <span class="p">)</span>
+</span><span id="Generator-3164"><a href="#Generator-3164"><span class="linenos">3164</span></a> <span class="k">def</span> <span class="nf">merge_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">Merge</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3165"><a href="#Generator-3165"><span class="linenos">3165</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-3166"><a href="#Generator-3166"><span class="linenos">3166</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-3167"><a href="#Generator-3167"><span class="linenos">3167</span></a>
-</span><span id="Generator-3168"><a href="#Generator-3168"><span class="linenos">3168</span></a> <span class="k">def</span> <span class="nf">tochar_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">ToChar</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3169"><a href="#Generator-3169"><span class="linenos">3169</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">):</span>
-</span><span id="Generator-3170"><a href="#Generator-3170"><span class="linenos">3170</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Format argument unsupported for TO_CHAR/TO_VARCHAR function&quot;</span><span class="p">)</span>
-</span><span id="Generator-3171"><a href="#Generator-3171"><span class="linenos">3171</span></a>
-</span><span id="Generator-3172"><a href="#Generator-3172"><span class="linenos">3172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
-</span><span id="Generator-3173"><a href="#Generator-3173"><span class="linenos">3173</span></a>
-</span><span id="Generator-3174"><a href="#Generator-3174"><span class="linenos">3174</span></a> <span class="k">def</span> <span class="nf">dictproperty_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">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3175"><a href="#Generator-3175"><span class="linenos">3175</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3176"><a href="#Generator-3176"><span class="linenos">3176</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-3177"><a href="#Generator-3177"><span class="linenos">3177</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-3178"><a href="#Generator-3178"><span class="linenos">3178</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
-</span><span id="Generator-3179"><a href="#Generator-3179"><span class="linenos">3179</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-3180"><a href="#Generator-3180"><span class="linenos">3180</span></a>
-</span><span id="Generator-3181"><a href="#Generator-3181"><span class="linenos">3181</span></a> <span class="k">def</span> <span class="nf">dictrange_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">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3182"><a href="#Generator-3182"><span class="linenos">3182</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3183"><a href="#Generator-3183"><span class="linenos">3183</span></a> <span class="nb">max</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;max&quot;</span><span class="p">)</span>
-</span><span id="Generator-3184"><a href="#Generator-3184"><span class="linenos">3184</span></a> <span class="nb">min</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;min&quot;</span><span class="p">)</span>
-</span><span id="Generator-3185"><a href="#Generator-3185"><span class="linenos">3185</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-3186"><a href="#Generator-3186"><span class="linenos">3186</span></a>
-</span><span id="Generator-3187"><a href="#Generator-3187"><span class="linenos">3187</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_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">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3188"><a href="#Generator-3188"><span class="linenos">3188</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </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;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3189"><a href="#Generator-3189"><span class="linenos">3189</span></a>
-</span><span id="Generator-3190"><a href="#Generator-3190"><span class="linenos">3190</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3191"><a href="#Generator-3191"><span class="linenos">3191</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3192"><a href="#Generator-3192"><span class="linenos">3192</span></a>
-</span><span id="Generator-3193"><a href="#Generator-3193"><span class="linenos">3193</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_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">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3194"><a href="#Generator-3194"><span class="linenos">3194</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-3195"><a href="#Generator-3195"><span class="linenos">3195</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator-3196"><a href="#Generator-3196"><span class="linenos">3196</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3197"><a href="#Generator-3197"><span class="linenos">3197</span></a> <span class="n">buckets</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;buckets&quot;</span><span class="p">)</span>
-</span><span id="Generator-3198"><a href="#Generator-3198"><span class="linenos">3198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
-</span><span id="Generator-3199"><a href="#Generator-3199"><span class="linenos">3199</span></a>
-</span><span id="Generator-3200"><a href="#Generator-3200"><span class="linenos">3200</span></a> <span class="k">def</span> <span class="nf">anyvalue_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3201"><a href="#Generator-3201"><span class="linenos">3201</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3202"><a href="#Generator-3202"><span class="linenos">3202</span></a> <span class="n">having</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;having&quot;</span><span class="p">)</span>
+</span><span id="Generator-3168"><a href="#Generator-3168"><span class="linenos">3168</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</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;hints&quot;</span><span class="p">)</span>
+</span><span id="Generator-3169"><a href="#Generator-3169"><span class="linenos">3169</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
+</span><span id="Generator-3170"><a href="#Generator-3170"><span class="linenos">3170</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
+</span><span id="Generator-3171"><a href="#Generator-3171"><span class="linenos">3171</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3172"><a href="#Generator-3172"><span class="linenos">3172</span></a>
+</span><span id="Generator-3173"><a href="#Generator-3173"><span class="linenos">3173</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator-3174"><a href="#Generator-3174"><span class="linenos">3174</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;USING </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;using&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3175"><a href="#Generator-3175"><span class="linenos">3175</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON </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;on&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3176"><a href="#Generator-3176"><span class="linenos">3176</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-3177"><a href="#Generator-3177"><span class="linenos">3177</span></a>
+</span><span id="Generator-3178"><a href="#Generator-3178"><span class="linenos">3178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator-3179"><a href="#Generator-3179"><span class="linenos">3179</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;MERGE INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3180"><a href="#Generator-3180"><span class="linenos">3180</span></a> <span class="p">)</span>
+</span><span id="Generator-3181"><a href="#Generator-3181"><span class="linenos">3181</span></a>
+</span><span id="Generator-3182"><a href="#Generator-3182"><span class="linenos">3182</span></a> <span class="k">def</span> <span class="nf">tochar_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">ToChar</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3183"><a href="#Generator-3183"><span class="linenos">3183</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">):</span>
+</span><span id="Generator-3184"><a href="#Generator-3184"><span class="linenos">3184</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Format argument unsupported for TO_CHAR/TO_VARCHAR function&quot;</span><span class="p">)</span>
+</span><span id="Generator-3185"><a href="#Generator-3185"><span class="linenos">3185</span></a>
+</span><span id="Generator-3186"><a href="#Generator-3186"><span class="linenos">3186</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
+</span><span id="Generator-3187"><a href="#Generator-3187"><span class="linenos">3187</span></a>
+</span><span id="Generator-3188"><a href="#Generator-3188"><span class="linenos">3188</span></a> <span class="k">def</span> <span class="nf">dictproperty_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">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3189"><a href="#Generator-3189"><span class="linenos">3189</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3190"><a href="#Generator-3190"><span class="linenos">3190</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-3191"><a href="#Generator-3191"><span class="linenos">3191</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-3192"><a href="#Generator-3192"><span class="linenos">3192</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
+</span><span id="Generator-3193"><a href="#Generator-3193"><span class="linenos">3193</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-3194"><a href="#Generator-3194"><span class="linenos">3194</span></a>
+</span><span id="Generator-3195"><a href="#Generator-3195"><span class="linenos">3195</span></a> <span class="k">def</span> <span class="nf">dictrange_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">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3196"><a href="#Generator-3196"><span class="linenos">3196</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3197"><a href="#Generator-3197"><span class="linenos">3197</span></a> <span class="nb">max</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;max&quot;</span><span class="p">)</span>
+</span><span id="Generator-3198"><a href="#Generator-3198"><span class="linenos">3198</span></a> <span class="nb">min</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;min&quot;</span><span class="p">)</span>
+</span><span id="Generator-3199"><a href="#Generator-3199"><span class="linenos">3199</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-3200"><a href="#Generator-3200"><span class="linenos">3200</span></a>
+</span><span id="Generator-3201"><a href="#Generator-3201"><span class="linenos">3201</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_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">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3202"><a href="#Generator-3202"><span class="linenos">3202</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </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;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-3203"><a href="#Generator-3203"><span class="linenos">3203</span></a>
-</span><span id="Generator-3204"><a href="#Generator-3204"><span class="linenos">3204</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
-</span><span id="Generator-3205"><a href="#Generator-3205"><span class="linenos">3205</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3204"><a href="#Generator-3204"><span class="linenos">3204</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3205"><a href="#Generator-3205"><span class="linenos">3205</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-3206"><a href="#Generator-3206"><span class="linenos">3206</span></a>
-</span><span id="Generator-3207"><a href="#Generator-3207"><span class="linenos">3207</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;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-3208"><a href="#Generator-3208"><span class="linenos">3208</span></a>
-</span><span id="Generator-3209"><a href="#Generator-3209"><span class="linenos">3209</span></a> <span class="k">def</span> <span class="nf">querytransform_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">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3210"><a href="#Generator-3210"><span class="linenos">3210</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator-3211"><a href="#Generator-3211"><span class="linenos">3211</span></a> <span class="n">row_format_before</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;row_format_before&quot;</span><span class="p">)</span>
-</span><span id="Generator-3212"><a href="#Generator-3212"><span class="linenos">3212</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3213"><a href="#Generator-3213"><span class="linenos">3213</span></a> <span class="n">record_writer</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;record_writer&quot;</span><span class="p">)</span>
-</span><span id="Generator-3214"><a href="#Generator-3214"><span class="linenos">3214</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3215"><a href="#Generator-3215"><span class="linenos">3215</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </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;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3216"><a href="#Generator-3216"><span class="linenos">3216</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator-3217"><a href="#Generator-3217"><span class="linenos">3217</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3218"><a href="#Generator-3218"><span class="linenos">3218</span></a> <span class="n">row_format_after</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;row_format_after&quot;</span><span class="p">)</span>
-</span><span id="Generator-3219"><a href="#Generator-3219"><span class="linenos">3219</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3220"><a href="#Generator-3220"><span class="linenos">3220</span></a> <span class="n">record_reader</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;record_reader&quot;</span><span class="p">)</span>
-</span><span id="Generator-3221"><a href="#Generator-3221"><span class="linenos">3221</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3222"><a href="#Generator-3222"><span class="linenos">3222</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3223"><a href="#Generator-3223"><span class="linenos">3223</span></a>
-</span><span id="Generator-3224"><a href="#Generator-3224"><span class="linenos">3224</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_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">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3225"><a href="#Generator-3225"><span class="linenos">3225</span></a> <span class="n">key_block_size</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;key_block_size&quot;</span><span class="p">)</span>
-</span><span id="Generator-3226"><a href="#Generator-3226"><span class="linenos">3226</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
-</span><span id="Generator-3227"><a href="#Generator-3227"><span class="linenos">3227</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3228"><a href="#Generator-3228"><span class="linenos">3228</span></a>
-</span><span id="Generator-3229"><a href="#Generator-3229"><span class="linenos">3229</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator-3230"><a href="#Generator-3230"><span class="linenos">3230</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator-3231"><a href="#Generator-3231"><span class="linenos">3231</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3232"><a href="#Generator-3232"><span class="linenos">3232</span></a>
-</span><span id="Generator-3233"><a href="#Generator-3233"><span class="linenos">3233</span></a> <span class="n">parser</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;parser&quot;</span><span class="p">)</span>
-</span><span id="Generator-3234"><a href="#Generator-3234"><span class="linenos">3234</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Generator-3235"><a href="#Generator-3235"><span class="linenos">3235</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3236"><a href="#Generator-3236"><span class="linenos">3236</span></a>
-</span><span id="Generator-3237"><a href="#Generator-3237"><span class="linenos">3237</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
-</span><span id="Generator-3238"><a href="#Generator-3238"><span class="linenos">3238</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="Generator-3239"><a href="#Generator-3239"><span class="linenos">3239</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3240"><a href="#Generator-3240"><span class="linenos">3240</span></a>
-</span><span id="Generator-3241"><a href="#Generator-3241"><span class="linenos">3241</span></a> <span class="n">visible</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;visible&quot;</span><span class="p">)</span>
-</span><span id="Generator-3242"><a href="#Generator-3242"><span class="linenos">3242</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator-3243"><a href="#Generator-3243"><span class="linenos">3243</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
-</span><span id="Generator-3244"><a href="#Generator-3244"><span class="linenos">3244</span></a>
-</span><span id="Generator-3245"><a href="#Generator-3245"><span class="linenos">3245</span></a> <span class="n">engine_attr</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;engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator-3246"><a href="#Generator-3246"><span class="linenos">3246</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
-</span><span id="Generator-3247"><a href="#Generator-3247"><span class="linenos">3247</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3248"><a href="#Generator-3248"><span class="linenos">3248</span></a>
-</span><span id="Generator-3249"><a href="#Generator-3249"><span class="linenos">3249</span></a> <span class="n">secondary_engine_attr</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;secondary_engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator-3250"><a href="#Generator-3250"><span class="linenos">3250</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
-</span><span id="Generator-3251"><a href="#Generator-3251"><span class="linenos">3251</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3252"><a href="#Generator-3252"><span class="linenos">3252</span></a>
-</span><span id="Generator-3253"><a href="#Generator-3253"><span class="linenos">3253</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
-</span><span id="Generator-3254"><a href="#Generator-3254"><span class="linenos">3254</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3255"><a href="#Generator-3255"><span class="linenos">3255</span></a>
-</span><span id="Generator-3256"><a href="#Generator-3256"><span class="linenos">3256</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_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">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3257"><a href="#Generator-3257"><span class="linenos">3257</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator-3258"><a href="#Generator-3258"><span class="linenos">3258</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
-</span><span id="Generator-3259"><a href="#Generator-3259"><span class="linenos">3259</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3260"><a href="#Generator-3260"><span class="linenos">3260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3261"><a href="#Generator-3261"><span class="linenos">3261</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;index_type&quot;</span><span class="p">)</span>
-</span><span id="Generator-3262"><a href="#Generator-3262"><span class="linenos">3262</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3263"><a href="#Generator-3263"><span class="linenos">3263</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator-3264"><a href="#Generator-3264"><span class="linenos">3264</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3265"><a href="#Generator-3265"><span class="linenos">3265</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator-3266"><a href="#Generator-3266"><span class="linenos">3266</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3267"><a href="#Generator-3267"><span class="linenos">3267</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3268"><a href="#Generator-3268"><span class="linenos">3268</span></a>
-</span><span id="Generator-3269"><a href="#Generator-3269"><span class="linenos">3269</span></a> <span class="k">def</span> <span class="nf">nvl2_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">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3270"><a href="#Generator-3270"><span class="linenos">3270</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator-3271"><a href="#Generator-3271"><span class="linenos">3271</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-3272"><a href="#Generator-3272"><span class="linenos">3272</span></a>
-</span><span id="Generator-3273"><a href="#Generator-3273"><span class="linenos">3273</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
-</span><span id="Generator-3274"><a href="#Generator-3274"><span class="linenos">3274</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Generator-3275"><a href="#Generator-3275"><span class="linenos">3275</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">],</span>
-</span><span id="Generator-3276"><a href="#Generator-3276"><span class="linenos">3276</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator-3277"><a href="#Generator-3277"><span class="linenos">3277</span></a> <span class="p">)</span>
-</span><span id="Generator-3278"><a href="#Generator-3278"><span class="linenos">3278</span></a> <span class="n">else_cond</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;false&quot;</span><span class="p">)</span>
-</span><span id="Generator-3279"><a href="#Generator-3279"><span class="linenos">3279</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
-</span><span id="Generator-3280"><a href="#Generator-3280"><span class="linenos">3280</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator-3281"><a href="#Generator-3281"><span class="linenos">3281</span></a>
-</span><span id="Generator-3282"><a href="#Generator-3282"><span class="linenos">3282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
-</span><span id="Generator-3283"><a href="#Generator-3283"><span class="linenos">3283</span></a>
-</span><span id="Generator-3284"><a href="#Generator-3284"><span class="linenos">3284</span></a> <span class="k">def</span> <span class="nf">comprehension_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">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3285"><a href="#Generator-3285"><span class="linenos">3285</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3286"><a href="#Generator-3286"><span class="linenos">3286</span></a> <span class="n">expr</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="Generator-3287"><a href="#Generator-3287"><span class="linenos">3287</span></a> <span class="n">iterator</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;iterator&quot;</span><span class="p">)</span>
-</span><span id="Generator-3288"><a href="#Generator-3288"><span class="linenos">3288</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
-</span><span id="Generator-3289"><a href="#Generator-3289"><span class="linenos">3289</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3290"><a href="#Generator-3290"><span class="linenos">3290</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3291"><a href="#Generator-3291"><span class="linenos">3291</span></a>
-</span><span id="Generator-3292"><a href="#Generator-3292"><span class="linenos">3292</span></a> <span class="k">def</span> <span class="nf">columnprefix_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">ColumnPrefix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3293"><a href="#Generator-3293"><span class="linenos">3293</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-3294"><a href="#Generator-3294"><span class="linenos">3294</span></a>
-</span><span id="Generator-3295"><a href="#Generator-3295"><span class="linenos">3295</span></a> <span class="k">def</span> <span class="nf">opclass_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">Opclass</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3296"><a href="#Generator-3296"><span class="linenos">3296</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3207"><a href="#Generator-3207"><span class="linenos">3207</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_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">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3208"><a href="#Generator-3208"><span class="linenos">3208</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-3209"><a href="#Generator-3209"><span class="linenos">3209</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator-3210"><a href="#Generator-3210"><span class="linenos">3210</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3211"><a href="#Generator-3211"><span class="linenos">3211</span></a> <span class="n">buckets</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;buckets&quot;</span><span class="p">)</span>
+</span><span id="Generator-3212"><a href="#Generator-3212"><span class="linenos">3212</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
+</span><span id="Generator-3213"><a href="#Generator-3213"><span class="linenos">3213</span></a>
+</span><span id="Generator-3214"><a href="#Generator-3214"><span class="linenos">3214</span></a> <span class="k">def</span> <span class="nf">anyvalue_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3215"><a href="#Generator-3215"><span class="linenos">3215</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3216"><a href="#Generator-3216"><span class="linenos">3216</span></a> <span class="n">having</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;having&quot;</span><span class="p">)</span>
+</span><span id="Generator-3217"><a href="#Generator-3217"><span class="linenos">3217</span></a>
+</span><span id="Generator-3218"><a href="#Generator-3218"><span class="linenos">3218</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
+</span><span id="Generator-3219"><a href="#Generator-3219"><span class="linenos">3219</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3220"><a href="#Generator-3220"><span class="linenos">3220</span></a>
+</span><span id="Generator-3221"><a href="#Generator-3221"><span class="linenos">3221</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;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-3222"><a href="#Generator-3222"><span class="linenos">3222</span></a>
+</span><span id="Generator-3223"><a href="#Generator-3223"><span class="linenos">3223</span></a> <span class="k">def</span> <span class="nf">querytransform_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">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3224"><a href="#Generator-3224"><span class="linenos">3224</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator-3225"><a href="#Generator-3225"><span class="linenos">3225</span></a> <span class="n">row_format_before</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;row_format_before&quot;</span><span class="p">)</span>
+</span><span id="Generator-3226"><a href="#Generator-3226"><span class="linenos">3226</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3227"><a href="#Generator-3227"><span class="linenos">3227</span></a> <span class="n">record_writer</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;record_writer&quot;</span><span class="p">)</span>
+</span><span id="Generator-3228"><a href="#Generator-3228"><span class="linenos">3228</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3229"><a href="#Generator-3229"><span class="linenos">3229</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </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;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3230"><a href="#Generator-3230"><span class="linenos">3230</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator-3231"><a href="#Generator-3231"><span class="linenos">3231</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3232"><a href="#Generator-3232"><span class="linenos">3232</span></a> <span class="n">row_format_after</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;row_format_after&quot;</span><span class="p">)</span>
+</span><span id="Generator-3233"><a href="#Generator-3233"><span class="linenos">3233</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3234"><a href="#Generator-3234"><span class="linenos">3234</span></a> <span class="n">record_reader</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;record_reader&quot;</span><span class="p">)</span>
+</span><span id="Generator-3235"><a href="#Generator-3235"><span class="linenos">3235</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3236"><a href="#Generator-3236"><span class="linenos">3236</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3237"><a href="#Generator-3237"><span class="linenos">3237</span></a>
+</span><span id="Generator-3238"><a href="#Generator-3238"><span class="linenos">3238</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_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">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3239"><a href="#Generator-3239"><span class="linenos">3239</span></a> <span class="n">key_block_size</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;key_block_size&quot;</span><span class="p">)</span>
+</span><span id="Generator-3240"><a href="#Generator-3240"><span class="linenos">3240</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
+</span><span id="Generator-3241"><a href="#Generator-3241"><span class="linenos">3241</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3242"><a href="#Generator-3242"><span class="linenos">3242</span></a>
+</span><span id="Generator-3243"><a href="#Generator-3243"><span class="linenos">3243</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator-3244"><a href="#Generator-3244"><span class="linenos">3244</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator-3245"><a href="#Generator-3245"><span class="linenos">3245</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3246"><a href="#Generator-3246"><span class="linenos">3246</span></a>
+</span><span id="Generator-3247"><a href="#Generator-3247"><span class="linenos">3247</span></a> <span class="n">parser</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;parser&quot;</span><span class="p">)</span>
+</span><span id="Generator-3248"><a href="#Generator-3248"><span class="linenos">3248</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Generator-3249"><a href="#Generator-3249"><span class="linenos">3249</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3250"><a href="#Generator-3250"><span class="linenos">3250</span></a>
+</span><span id="Generator-3251"><a href="#Generator-3251"><span class="linenos">3251</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
+</span><span id="Generator-3252"><a href="#Generator-3252"><span class="linenos">3252</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="Generator-3253"><a href="#Generator-3253"><span class="linenos">3253</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3254"><a href="#Generator-3254"><span class="linenos">3254</span></a>
+</span><span id="Generator-3255"><a href="#Generator-3255"><span class="linenos">3255</span></a> <span class="n">visible</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;visible&quot;</span><span class="p">)</span>
+</span><span id="Generator-3256"><a href="#Generator-3256"><span class="linenos">3256</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-3257"><a href="#Generator-3257"><span class="linenos">3257</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
+</span><span id="Generator-3258"><a href="#Generator-3258"><span class="linenos">3258</span></a>
+</span><span id="Generator-3259"><a href="#Generator-3259"><span class="linenos">3259</span></a> <span class="n">engine_attr</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;engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator-3260"><a href="#Generator-3260"><span class="linenos">3260</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
+</span><span id="Generator-3261"><a href="#Generator-3261"><span class="linenos">3261</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3262"><a href="#Generator-3262"><span class="linenos">3262</span></a>
+</span><span id="Generator-3263"><a href="#Generator-3263"><span class="linenos">3263</span></a> <span class="n">secondary_engine_attr</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;secondary_engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator-3264"><a href="#Generator-3264"><span class="linenos">3264</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
+</span><span id="Generator-3265"><a href="#Generator-3265"><span class="linenos">3265</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3266"><a href="#Generator-3266"><span class="linenos">3266</span></a>
+</span><span id="Generator-3267"><a href="#Generator-3267"><span class="linenos">3267</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
+</span><span id="Generator-3268"><a href="#Generator-3268"><span class="linenos">3268</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3269"><a href="#Generator-3269"><span class="linenos">3269</span></a>
+</span><span id="Generator-3270"><a href="#Generator-3270"><span class="linenos">3270</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_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">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3271"><a href="#Generator-3271"><span class="linenos">3271</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator-3272"><a href="#Generator-3272"><span class="linenos">3272</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
+</span><span id="Generator-3273"><a href="#Generator-3273"><span class="linenos">3273</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3274"><a href="#Generator-3274"><span class="linenos">3274</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3275"><a href="#Generator-3275"><span class="linenos">3275</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;index_type&quot;</span><span class="p">)</span>
+</span><span id="Generator-3276"><a href="#Generator-3276"><span class="linenos">3276</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3277"><a href="#Generator-3277"><span class="linenos">3277</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator-3278"><a href="#Generator-3278"><span class="linenos">3278</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3279"><a href="#Generator-3279"><span class="linenos">3279</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator-3280"><a href="#Generator-3280"><span class="linenos">3280</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3281"><a href="#Generator-3281"><span class="linenos">3281</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3282"><a href="#Generator-3282"><span class="linenos">3282</span></a>
+</span><span id="Generator-3283"><a href="#Generator-3283"><span class="linenos">3283</span></a> <span class="k">def</span> <span class="nf">nvl2_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">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3284"><a href="#Generator-3284"><span class="linenos">3284</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator-3285"><a href="#Generator-3285"><span class="linenos">3285</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-3286"><a href="#Generator-3286"><span class="linenos">3286</span></a>
+</span><span id="Generator-3287"><a href="#Generator-3287"><span class="linenos">3287</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="Generator-3288"><a href="#Generator-3288"><span class="linenos">3288</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator-3289"><a href="#Generator-3289"><span class="linenos">3289</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">],</span>
+</span><span id="Generator-3290"><a href="#Generator-3290"><span class="linenos">3290</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator-3291"><a href="#Generator-3291"><span class="linenos">3291</span></a> <span class="p">)</span>
+</span><span id="Generator-3292"><a href="#Generator-3292"><span class="linenos">3292</span></a> <span class="n">else_cond</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;false&quot;</span><span class="p">)</span>
+</span><span id="Generator-3293"><a href="#Generator-3293"><span class="linenos">3293</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
+</span><span id="Generator-3294"><a href="#Generator-3294"><span class="linenos">3294</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator-3295"><a href="#Generator-3295"><span class="linenos">3295</span></a>
+</span><span id="Generator-3296"><a href="#Generator-3296"><span class="linenos">3296</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
</span><span id="Generator-3297"><a href="#Generator-3297"><span class="linenos">3297</span></a>
-</span><span id="Generator-3298"><a href="#Generator-3298"><span class="linenos">3298</span></a> <span class="k">def</span> <span class="nf">predict_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">Predict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3299"><a href="#Generator-3299"><span class="linenos">3299</span></a> <span class="n">model</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="Generator-3300"><a href="#Generator-3300"><span class="linenos">3300</span></a> <span class="n">model</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;MODEL </span><span class="si">{</span><span class="n">model</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3301"><a href="#Generator-3301"><span class="linenos">3301</span></a> <span class="n">table</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="Generator-3302"><a href="#Generator-3302"><span class="linenos">3302</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;TABLE </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="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span> <span class="k">else</span> <span class="n">table</span>
-</span><span id="Generator-3303"><a href="#Generator-3303"><span class="linenos">3303</span></a> <span class="n">parameters</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;params_struct&quot;</span><span class="p">)</span>
-</span><span id="Generator-3304"><a href="#Generator-3304"><span class="linenos">3304</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;PREDICT&quot;</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">parameters</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator-3298"><a href="#Generator-3298"><span class="linenos">3298</span></a> <span class="k">def</span> <span class="nf">comprehension_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">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3299"><a href="#Generator-3299"><span class="linenos">3299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3300"><a href="#Generator-3300"><span class="linenos">3300</span></a> <span class="n">expr</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="Generator-3301"><a href="#Generator-3301"><span class="linenos">3301</span></a> <span class="n">iterator</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;iterator&quot;</span><span class="p">)</span>
+</span><span id="Generator-3302"><a href="#Generator-3302"><span class="linenos">3302</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
+</span><span id="Generator-3303"><a href="#Generator-3303"><span class="linenos">3303</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3304"><a href="#Generator-3304"><span class="linenos">3304</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator-3305"><a href="#Generator-3305"><span class="linenos">3305</span></a>
-</span><span id="Generator-3306"><a href="#Generator-3306"><span class="linenos">3306</span></a> <span class="k">def</span> <span class="nf">forin_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">ForIn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3307"><a href="#Generator-3307"><span class="linenos">3307</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3308"><a href="#Generator-3308"><span class="linenos">3308</span></a> <span class="n">expression_sql</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="Generator-3309"><a href="#Generator-3309"><span class="linenos">3309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DO </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3310"><a href="#Generator-3310"><span class="linenos">3310</span></a>
-</span><span id="Generator-3311"><a href="#Generator-3311"><span class="linenos">3311</span></a> <span class="k">def</span> <span class="nf">refresh_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">Refresh</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3312"><a href="#Generator-3312"><span class="linenos">3312</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-3313"><a href="#Generator-3313"><span class="linenos">3313</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;TABLE &quot;</span>
-</span><span id="Generator-3314"><a href="#Generator-3314"><span class="linenos">3314</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFRESH </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3315"><a href="#Generator-3315"><span class="linenos">3315</span></a>
-</span><span id="Generator-3316"><a href="#Generator-3316"><span class="linenos">3316</span></a> <span class="k">def</span> <span class="nf">operator_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">Operator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3317"><a href="#Generator-3317"><span class="linenos">3317</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;OPERATOR(</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;operator&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
-</span><span id="Generator-3318"><a href="#Generator-3318"><span class="linenos">3318</span></a>
-</span><span id="Generator-3319"><a href="#Generator-3319"><span class="linenos">3319</span></a> <span class="k">def</span> <span class="nf">toarray_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">ToArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3320"><a href="#Generator-3320"><span class="linenos">3320</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-3321"><a href="#Generator-3321"><span class="linenos">3321</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="Generator-3322"><a href="#Generator-3322"><span class="linenos">3322</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
-</span><span id="Generator-3323"><a href="#Generator-3323"><span class="linenos">3323</span></a>
-</span><span id="Generator-3324"><a href="#Generator-3324"><span class="linenos">3324</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator-3325"><a href="#Generator-3325"><span class="linenos">3325</span></a>
-</span><span id="Generator-3326"><a href="#Generator-3326"><span class="linenos">3326</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
-</span><span id="Generator-3327"><a href="#Generator-3327"><span class="linenos">3327</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator-3328"><a href="#Generator-3328"><span class="linenos">3328</span></a>
-</span><span id="Generator-3329"><a href="#Generator-3329"><span class="linenos">3329</span></a> <span class="n">cond_for_null</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
-</span><span id="Generator-3330"><a href="#Generator-3330"><span class="linenos">3330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">cond_for_null</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">arg</span><span class="p">])))</span>
-</span><span id="Generator-3331"><a href="#Generator-3331"><span class="linenos">3331</span></a>
-</span><span id="Generator-3332"><a href="#Generator-3332"><span class="linenos">3332</span></a> <span class="k">def</span> <span class="nf">tsordstotime_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">TsOrDsToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3333"><a href="#Generator-3333"><span class="linenos">3333</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-3334"><a href="#Generator-3334"><span class="linenos">3334</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToTime</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">):</span>
-</span><span id="Generator-3335"><a href="#Generator-3335"><span class="linenos">3335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-3336"><a href="#Generator-3336"><span class="linenos">3336</span></a>
-</span><span id="Generator-3337"><a href="#Generator-3337"><span class="linenos">3337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;time&quot;</span><span class="p">))</span>
-</span><span id="Generator-3338"><a href="#Generator-3338"><span class="linenos">3338</span></a>
-</span><span id="Generator-3339"><a href="#Generator-3339"><span class="linenos">3339</span></a> <span class="k">def</span> <span class="nf">tsordstodate_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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3340"><a href="#Generator-3340"><span class="linenos">3340</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-3341"><a href="#Generator-3341"><span class="linenos">3341</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-3306"><a href="#Generator-3306"><span class="linenos">3306</span></a> <span class="k">def</span> <span class="nf">columnprefix_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">ColumnPrefix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3307"><a href="#Generator-3307"><span class="linenos">3307</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-3308"><a href="#Generator-3308"><span class="linenos">3308</span></a>
+</span><span id="Generator-3309"><a href="#Generator-3309"><span class="linenos">3309</span></a> <span class="k">def</span> <span class="nf">opclass_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">Opclass</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3310"><a href="#Generator-3310"><span class="linenos">3310</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3311"><a href="#Generator-3311"><span class="linenos">3311</span></a>
+</span><span id="Generator-3312"><a href="#Generator-3312"><span class="linenos">3312</span></a> <span class="k">def</span> <span class="nf">predict_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">Predict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3313"><a href="#Generator-3313"><span class="linenos">3313</span></a> <span class="n">model</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="Generator-3314"><a href="#Generator-3314"><span class="linenos">3314</span></a> <span class="n">model</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;MODEL </span><span class="si">{</span><span class="n">model</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3315"><a href="#Generator-3315"><span class="linenos">3315</span></a> <span class="n">table</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="Generator-3316"><a href="#Generator-3316"><span class="linenos">3316</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;TABLE </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="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="Generator-3317"><a href="#Generator-3317"><span class="linenos">3317</span></a> <span class="n">parameters</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;params_struct&quot;</span><span class="p">)</span>
+</span><span id="Generator-3318"><a href="#Generator-3318"><span class="linenos">3318</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;PREDICT&quot;</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">parameters</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator-3319"><a href="#Generator-3319"><span class="linenos">3319</span></a>
+</span><span id="Generator-3320"><a href="#Generator-3320"><span class="linenos">3320</span></a> <span class="k">def</span> <span class="nf">forin_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">ForIn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3321"><a href="#Generator-3321"><span class="linenos">3321</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3322"><a href="#Generator-3322"><span class="linenos">3322</span></a> <span class="n">expression_sql</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="Generator-3323"><a href="#Generator-3323"><span class="linenos">3323</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DO </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3324"><a href="#Generator-3324"><span class="linenos">3324</span></a>
+</span><span id="Generator-3325"><a href="#Generator-3325"><span class="linenos">3325</span></a> <span class="k">def</span> <span class="nf">refresh_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">Refresh</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3326"><a href="#Generator-3326"><span class="linenos">3326</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-3327"><a href="#Generator-3327"><span class="linenos">3327</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;TABLE &quot;</span>
+</span><span id="Generator-3328"><a href="#Generator-3328"><span class="linenos">3328</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFRESH </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3329"><a href="#Generator-3329"><span class="linenos">3329</span></a>
+</span><span id="Generator-3330"><a href="#Generator-3330"><span class="linenos">3330</span></a> <span class="k">def</span> <span class="nf">operator_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">Operator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3331"><a href="#Generator-3331"><span class="linenos">3331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;OPERATOR(</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;operator&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
+</span><span id="Generator-3332"><a href="#Generator-3332"><span class="linenos">3332</span></a>
+</span><span id="Generator-3333"><a href="#Generator-3333"><span class="linenos">3333</span></a> <span class="k">def</span> <span class="nf">toarray_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">ToArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3334"><a href="#Generator-3334"><span class="linenos">3334</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-3335"><a href="#Generator-3335"><span class="linenos">3335</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="Generator-3336"><a href="#Generator-3336"><span class="linenos">3336</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
+</span><span id="Generator-3337"><a href="#Generator-3337"><span class="linenos">3337</span></a>
+</span><span id="Generator-3338"><a href="#Generator-3338"><span class="linenos">3338</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="Generator-3339"><a href="#Generator-3339"><span class="linenos">3339</span></a>
+</span><span id="Generator-3340"><a href="#Generator-3340"><span class="linenos">3340</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
+</span><span id="Generator-3341"><a href="#Generator-3341"><span class="linenos">3341</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
</span><span id="Generator-3342"><a href="#Generator-3342"><span class="linenos">3342</span></a>
-</span><span id="Generator-3343"><a href="#Generator-3343"><span class="linenos">3343</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
-</span><span id="Generator-3344"><a href="#Generator-3344"><span class="linenos">3344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-3345"><a href="#Generator-3345"><span class="linenos">3345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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">expression</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 class="s2">&quot;date&quot;</span><span class="p">)</span>
-</span><span id="Generator-3346"><a href="#Generator-3346"><span class="linenos">3346</span></a> <span class="p">)</span>
-</span><span id="Generator-3347"><a href="#Generator-3347"><span class="linenos">3347</span></a>
-</span><span id="Generator-3348"><a href="#Generator-3348"><span class="linenos">3348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
+</span><span id="Generator-3343"><a href="#Generator-3343"><span class="linenos">3343</span></a> <span class="n">cond_for_null</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
+</span><span id="Generator-3344"><a href="#Generator-3344"><span class="linenos">3344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">cond_for_null</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">arg</span><span class="p">])))</span>
+</span><span id="Generator-3345"><a href="#Generator-3345"><span class="linenos">3345</span></a>
+</span><span id="Generator-3346"><a href="#Generator-3346"><span class="linenos">3346</span></a> <span class="k">def</span> <span class="nf">tsordstotime_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">TsOrDsToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3347"><a href="#Generator-3347"><span class="linenos">3347</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-3348"><a href="#Generator-3348"><span class="linenos">3348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToTime</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">):</span>
</span><span id="Generator-3349"><a href="#Generator-3349"><span class="linenos">3349</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Generator-3350"><a href="#Generator-3350"><span class="linenos">3350</span></a>
-</span><span id="Generator-3351"><a href="#Generator-3351"><span class="linenos">3351</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
+</span><span id="Generator-3351"><a href="#Generator-3351"><span class="linenos">3351</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;time&quot;</span><span class="p">))</span>
</span><span id="Generator-3352"><a href="#Generator-3352"><span class="linenos">3352</span></a>
-</span><span id="Generator-3353"><a href="#Generator-3353"><span class="linenos">3353</span></a> <span class="k">def</span> <span class="nf">unixdate_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">UnixDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3354"><a href="#Generator-3354"><span class="linenos">3354</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator-3355"><a href="#Generator-3355"><span class="linenos">3355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator-3356"><a href="#Generator-3356"><span class="linenos">3356</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="Generator-3357"><a href="#Generator-3357"><span class="linenos">3357</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Generator-3358"><a href="#Generator-3358"><span class="linenos">3358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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;1970-01-01&quot;</span><span class="p">),</span> <span class="s2">&quot;date&quot;</span><span class="p">),</span>
-</span><span id="Generator-3359"><a href="#Generator-3359"><span class="linenos">3359</span></a> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
+</span><span id="Generator-3353"><a href="#Generator-3353"><span class="linenos">3353</span></a> <span class="k">def</span> <span class="nf">tsordstodate_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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3354"><a href="#Generator-3354"><span class="linenos">3354</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-3355"><a href="#Generator-3355"><span class="linenos">3355</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-3356"><a href="#Generator-3356"><span class="linenos">3356</span></a>
+</span><span id="Generator-3357"><a href="#Generator-3357"><span class="linenos">3357</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
+</span><span id="Generator-3358"><a href="#Generator-3358"><span class="linenos">3358</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-3359"><a href="#Generator-3359"><span class="linenos">3359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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">expression</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 class="s2">&quot;date&quot;</span><span class="p">)</span>
</span><span id="Generator-3360"><a href="#Generator-3360"><span class="linenos">3360</span></a> <span class="p">)</span>
-</span><span id="Generator-3361"><a href="#Generator-3361"><span class="linenos">3361</span></a> <span class="p">)</span>
-</span><span id="Generator-3362"><a href="#Generator-3362"><span class="linenos">3362</span></a>
-</span><span id="Generator-3363"><a href="#Generator-3363"><span class="linenos">3363</span></a> <span class="k">def</span> <span class="nf">lastday_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">LastDay</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3364"><a href="#Generator-3364"><span class="linenos">3364</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAST_DAY_SUPPORTS_DATE_PART</span><span class="p">:</span>
-</span><span id="Generator-3365"><a href="#Generator-3365"><span class="linenos">3365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-3361"><a href="#Generator-3361"><span class="linenos">3361</span></a>
+</span><span id="Generator-3362"><a href="#Generator-3362"><span class="linenos">3362</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
+</span><span id="Generator-3363"><a href="#Generator-3363"><span class="linenos">3363</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-3364"><a href="#Generator-3364"><span class="linenos">3364</span></a>
+</span><span id="Generator-3365"><a href="#Generator-3365"><span class="linenos">3365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
</span><span id="Generator-3366"><a href="#Generator-3366"><span class="linenos">3366</span></a>
-</span><span id="Generator-3367"><a href="#Generator-3367"><span class="linenos">3367</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="Generator-3368"><a href="#Generator-3368"><span class="linenos">3368</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit</span> <span class="o">!=</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="Generator-3369"><a href="#Generator-3369"><span class="linenos">3369</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Date parts are not supported in LAST_DAY.&quot;</span><span class="p">)</span>
-</span><span id="Generator-3370"><a href="#Generator-3370"><span class="linenos">3370</span></a>
-</span><span id="Generator-3371"><a href="#Generator-3371"><span class="linenos">3371</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;LAST_DAY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-3372"><a href="#Generator-3372"><span class="linenos">3372</span></a>
-</span><span id="Generator-3373"><a href="#Generator-3373"><span class="linenos">3373</span></a> <span class="k">def</span> <span class="nf">_jsonpathkey_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">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3374"><a href="#Generator-3374"><span class="linenos">3374</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator-3375"><a href="#Generator-3375"><span class="linenos">3375</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">):</span>
-</span><span id="Generator-3376"><a href="#Generator-3376"><span class="linenos">3376</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-3377"><a href="#Generator-3377"><span class="linenos">3377</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3378"><a href="#Generator-3378"><span class="linenos">3378</span></a>
-</span><span id="Generator-3379"><a href="#Generator-3379"><span class="linenos">3379</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">this</span><span class="p">):</span>
-</span><span id="Generator-3380"><a href="#Generator-3380"><span class="linenos">3380</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-3381"><a href="#Generator-3381"><span class="linenos">3381</span></a>
-</span><span id="Generator-3382"><a href="#Generator-3382"><span class="linenos">3382</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-3383"><a href="#Generator-3383"><span class="linenos">3383</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3367"><a href="#Generator-3367"><span class="linenos">3367</span></a> <span class="k">def</span> <span class="nf">unixdate_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">UnixDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3368"><a href="#Generator-3368"><span class="linenos">3368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator-3369"><a href="#Generator-3369"><span class="linenos">3369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator-3370"><a href="#Generator-3370"><span class="linenos">3370</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="Generator-3371"><a href="#Generator-3371"><span class="linenos">3371</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Generator-3372"><a href="#Generator-3372"><span class="linenos">3372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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;1970-01-01&quot;</span><span class="p">),</span> <span class="s2">&quot;date&quot;</span><span class="p">),</span>
+</span><span id="Generator-3373"><a href="#Generator-3373"><span class="linenos">3373</span></a> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
+</span><span id="Generator-3374"><a href="#Generator-3374"><span class="linenos">3374</span></a> <span class="p">)</span>
+</span><span id="Generator-3375"><a href="#Generator-3375"><span class="linenos">3375</span></a> <span class="p">)</span>
+</span><span id="Generator-3376"><a href="#Generator-3376"><span class="linenos">3376</span></a>
+</span><span id="Generator-3377"><a href="#Generator-3377"><span class="linenos">3377</span></a> <span class="k">def</span> <span class="nf">lastday_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">LastDay</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3378"><a href="#Generator-3378"><span class="linenos">3378</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAST_DAY_SUPPORTS_DATE_PART</span><span class="p">:</span>
+</span><span id="Generator-3379"><a href="#Generator-3379"><span class="linenos">3379</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator-3380"><a href="#Generator-3380"><span class="linenos">3380</span></a>
+</span><span id="Generator-3381"><a href="#Generator-3381"><span class="linenos">3381</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="Generator-3382"><a href="#Generator-3382"><span class="linenos">3382</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit</span> <span class="o">!=</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="Generator-3383"><a href="#Generator-3383"><span class="linenos">3383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Date parts are not supported in LAST_DAY.&quot;</span><span class="p">)</span>
</span><span id="Generator-3384"><a href="#Generator-3384"><span class="linenos">3384</span></a>
-</span><span id="Generator-3385"><a href="#Generator-3385"><span class="linenos">3385</span></a> <span class="k">def</span> <span class="nf">_jsonpathsubscript_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">JSONPathSubscript</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-3386"><a href="#Generator-3386"><span class="linenos">3386</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator-3387"><a href="#Generator-3387"><span class="linenos">3387</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-3388"><a href="#Generator-3388"><span class="linenos">3388</span></a>
-</span><span id="Generator-3389"><a href="#Generator-3389"><span class="linenos">3389</span></a> <span class="k">def</span> <span class="nf">_simplify_unless_literal</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Generator-3390"><a href="#Generator-3390"><span class="linenos">3390</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Literal</span><span class="p">):</span>
-</span><span id="Generator-3391"><a href="#Generator-3391"><span class="linenos">3391</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
+</span><span id="Generator-3385"><a href="#Generator-3385"><span class="linenos">3385</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;LAST_DAY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-3386"><a href="#Generator-3386"><span class="linenos">3386</span></a>
+</span><span id="Generator-3387"><a href="#Generator-3387"><span class="linenos">3387</span></a> <span class="k">def</span> <span class="nf">_jsonpathkey_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">JSONPathKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3388"><a href="#Generator-3388"><span class="linenos">3388</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator-3389"><a href="#Generator-3389"><span class="linenos">3389</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathWildcard</span><span class="p">):</span>
+</span><span id="Generator-3390"><a href="#Generator-3390"><span class="linenos">3390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-3391"><a href="#Generator-3391"><span class="linenos">3391</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-3392"><a href="#Generator-3392"><span class="linenos">3392</span></a>
-</span><span id="Generator-3393"><a href="#Generator-3393"><span class="linenos">3393</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="Generator-3394"><a href="#Generator-3394"><span class="linenos">3394</span></a>
-</span><span id="Generator-3395"><a href="#Generator-3395"><span class="linenos">3395</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Generator-3396"><a href="#Generator-3396"><span class="linenos">3396</span></a>
-</span><span id="Generator-3397"><a href="#Generator-3397"><span class="linenos">3397</span></a> <span class="k">def</span> <span class="nf">_ensure_string_if_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Generator-3398"><a href="#Generator-3398"><span class="linenos">3398</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator-3399"><a href="#Generator-3399"><span class="linenos">3399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;text&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;&quot;</span><span class="p">))</span>
-</span><span id="Generator-3400"><a href="#Generator-3400"><span class="linenos">3400</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span>
-</span><span id="Generator-3401"><a href="#Generator-3401"><span class="linenos">3401</span></a> <span class="k">if</span> <span class="n">value</span>
-</span><span id="Generator-3402"><a href="#Generator-3402"><span class="linenos">3402</span></a> <span class="p">]</span>
+</span><span id="Generator-3393"><a href="#Generator-3393"><span class="linenos">3393</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">this</span><span class="p">):</span>
+</span><span id="Generator-3394"><a href="#Generator-3394"><span class="linenos">3394</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3395"><a href="#Generator-3395"><span class="linenos">3395</span></a>
+</span><span id="Generator-3396"><a href="#Generator-3396"><span class="linenos">3396</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-3397"><a href="#Generator-3397"><span class="linenos">3397</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_BRACKETED_KEY_SUPPORTED</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;.</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-3398"><a href="#Generator-3398"><span class="linenos">3398</span></a>
+</span><span id="Generator-3399"><a href="#Generator-3399"><span class="linenos">3399</span></a> <span class="k">def</span> <span class="nf">_jsonpathsubscript_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">JSONPathSubscript</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-3400"><a href="#Generator-3400"><span class="linenos">3400</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">json_path_part</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator-3401"><a href="#Generator-3401"><span class="linenos">3401</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-3402"><a href="#Generator-3402"><span class="linenos">3402</span></a>
+</span><span id="Generator-3403"><a href="#Generator-3403"><span class="linenos">3403</span></a> <span class="k">def</span> <span class="nf">_simplify_unless_literal</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Generator-3404"><a href="#Generator-3404"><span class="linenos">3404</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">Literal</span><span class="p">):</span>
+</span><span id="Generator-3405"><a href="#Generator-3405"><span class="linenos">3405</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
+</span><span id="Generator-3406"><a href="#Generator-3406"><span class="linenos">3406</span></a>
+</span><span id="Generator-3407"><a href="#Generator-3407"><span class="linenos">3407</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="Generator-3408"><a href="#Generator-3408"><span class="linenos">3408</span></a>
+</span><span id="Generator-3409"><a href="#Generator-3409"><span class="linenos">3409</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator-3410"><a href="#Generator-3410"><span class="linenos">3410</span></a>
+</span><span id="Generator-3411"><a href="#Generator-3411"><span class="linenos">3411</span></a> <span class="k">def</span> <span class="nf">_ensure_string_if_null</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Generator-3412"><a href="#Generator-3412"><span class="linenos">3412</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator-3413"><a href="#Generator-3413"><span class="linenos">3413</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;text&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;&quot;</span><span class="p">))</span>
+</span><span id="Generator-3414"><a href="#Generator-3414"><span class="linenos">3414</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span>
+</span><span id="Generator-3415"><a href="#Generator-3415"><span class="linenos">3415</span></a> <span class="k">if</span> <span class="n">value</span>
+</span><span id="Generator-3416"><a href="#Generator-3416"><span class="linenos">3416</span></a> <span class="p">]</span>
</span></pre></div>
@@ -8069,48 +8100,48 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.__init__-474"><a href="#Generator.__init__-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Generator.__init__-475"><a href="#Generator.__init__-475"><span class="linenos">475</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.__init__-476"><a href="#Generator.__init__-476"><span class="linenos">476</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.__init__-477"><a href="#Generator.__init__-477"><span class="linenos">477</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.__init__-478"><a href="#Generator.__init__-478"><span class="linenos">478</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.__init__-479"><a href="#Generator.__init__-479"><span class="linenos">479</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator.__init__-480"><a href="#Generator.__init__-480"><span class="linenos">480</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
-</span><span id="Generator.__init__-481"><a href="#Generator.__init__-481"><span class="linenos">481</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.__init__-482"><a href="#Generator.__init__-482"><span class="linenos">482</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
-</span><span id="Generator.__init__-483"><a href="#Generator.__init__-483"><span class="linenos">483</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
-</span><span id="Generator.__init__-484"><a href="#Generator.__init__-484"><span class="linenos">484</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.__init__-485"><a href="#Generator.__init__-485"><span class="linenos">485</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
-</span><span id="Generator.__init__-486"><a href="#Generator.__init__-486"><span class="linenos">486</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator.__init__-487"><a href="#Generator.__init__-487"><span class="linenos">487</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.__init__-488"><a href="#Generator.__init__-488"><span class="linenos">488</span></a> <span class="p">):</span>
-</span><span id="Generator.__init__-489"><a href="#Generator.__init__-489"><span class="linenos">489</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
-</span><span id="Generator.__init__-490"><a href="#Generator.__init__-490"><span class="linenos">490</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
-</span><span id="Generator.__init__-491"><a href="#Generator.__init__-491"><span class="linenos">491</span></a>
-</span><span id="Generator.__init__-492"><a href="#Generator.__init__-492"><span class="linenos">492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
-</span><span id="Generator.__init__-493"><a href="#Generator.__init__-493"><span class="linenos">493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
-</span><span id="Generator.__init__-494"><a href="#Generator.__init__-494"><span class="linenos">494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="Generator.__init__-495"><a href="#Generator.__init__-495"><span class="linenos">495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
-</span><span id="Generator.__init__-496"><a href="#Generator.__init__-496"><span class="linenos">496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
-</span><span id="Generator.__init__-497"><a href="#Generator.__init__-497"><span class="linenos">497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
-</span><span id="Generator.__init__-498"><a href="#Generator.__init__-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
-</span><span id="Generator.__init__-499"><a href="#Generator.__init__-499"><span class="linenos">499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
-</span><span id="Generator.__init__-500"><a href="#Generator.__init__-500"><span class="linenos">500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
-</span><span id="Generator.__init__-501"><a href="#Generator.__init__-501"><span class="linenos">501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Generator.__init__-502"><a href="#Generator.__init__-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="Generator.__init__-503"><a href="#Generator.__init__-503"><span class="linenos">503</span></a>
-</span><span id="Generator.__init__-504"><a href="#Generator.__init__-504"><span class="linenos">504</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
-</span><span id="Generator.__init__-505"><a href="#Generator.__init__-505"><span class="linenos">505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.__init__-506"><a href="#Generator.__init__-506"><span class="linenos">506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
-</span><span id="Generator.__init__-507"><a href="#Generator.__init__-507"><span class="linenos">507</span></a> <span class="p">)</span>
-</span><span id="Generator.__init__-508"><a href="#Generator.__init__-508"><span class="linenos">508</span></a>
-</span><span id="Generator.__init__-509"><a href="#Generator.__init__-509"><span class="linenos">509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.__init__-510"><a href="#Generator.__init__-510"><span class="linenos">510</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.__init__-511"><a href="#Generator.__init__-511"><span class="linenos">511</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span>
-</span><span id="Generator.__init__-512"><a href="#Generator.__init__-512"><span class="linenos">512</span></a> <span class="p">)</span>
-</span><span id="Generator.__init__-513"><a href="#Generator.__init__-513"><span class="linenos">513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.__init__-514"><a href="#Generator.__init__-514"><span class="linenos">514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
-</span><span id="Generator.__init__-515"><a href="#Generator.__init__-515"><span class="linenos">515</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.__init__-478"><a href="#Generator.__init__-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Generator.__init__-479"><a href="#Generator.__init__-479"><span class="linenos">479</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.__init__-480"><a href="#Generator.__init__-480"><span class="linenos">480</span></a> <span class="n">pretty</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.__init__-481"><a href="#Generator.__init__-481"><span class="linenos">481</span></a> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.__init__-482"><a href="#Generator.__init__-482"><span class="linenos">482</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.__init__-483"><a href="#Generator.__init__-483"><span class="linenos">483</span></a> <span class="n">pad</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator.__init__-484"><a href="#Generator.__init__-484"><span class="linenos">484</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
+</span><span id="Generator.__init__-485"><a href="#Generator.__init__-485"><span class="linenos">485</span></a> <span class="n">normalize_functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.__init__-486"><a href="#Generator.__init__-486"><span class="linenos">486</span></a> <span class="n">unsupported_level</span><span class="p">:</span> <span class="n">ErrorLevel</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">,</span>
+</span><span id="Generator.__init__-487"><a href="#Generator.__init__-487"><span class="linenos">487</span></a> <span class="n">max_unsupported</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+</span><span id="Generator.__init__-488"><a href="#Generator.__init__-488"><span class="linenos">488</span></a> <span class="n">leading_comma</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.__init__-489"><a href="#Generator.__init__-489"><span class="linenos">489</span></a> <span class="n">max_text_width</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span><span class="p">,</span>
+</span><span id="Generator.__init__-490"><a href="#Generator.__init__-490"><span class="linenos">490</span></a> <span class="n">comments</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator.__init__-491"><a href="#Generator.__init__-491"><span class="linenos">491</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.__init__-492"><a href="#Generator.__init__-492"><span class="linenos">492</span></a> <span class="p">):</span>
+</span><span id="Generator.__init__-493"><a href="#Generator.__init__-493"><span class="linenos">493</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="Generator.__init__-494"><a href="#Generator.__init__-494"><span class="linenos">494</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
+</span><span id="Generator.__init__-495"><a href="#Generator.__init__-495"><span class="linenos">495</span></a>
+</span><span id="Generator.__init__-496"><a href="#Generator.__init__-496"><span class="linenos">496</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">pretty</span> <span class="k">if</span> <span class="n">pretty</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">pretty</span>
+</span><span id="Generator.__init__-497"><a href="#Generator.__init__-497"><span class="linenos">497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">identify</span>
+</span><span id="Generator.__init__-498"><a href="#Generator.__init__-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="Generator.__init__-499"><a href="#Generator.__init__-499"><span class="linenos">499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
+</span><span id="Generator.__init__-500"><a href="#Generator.__init__-500"><span class="linenos">500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_indent</span> <span class="o">=</span> <span class="n">indent</span>
+</span><span id="Generator.__init__-501"><a href="#Generator.__init__-501"><span class="linenos">501</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">=</span> <span class="n">unsupported_level</span>
+</span><span id="Generator.__init__-502"><a href="#Generator.__init__-502"><span class="linenos">502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span> <span class="o">=</span> <span class="n">max_unsupported</span>
+</span><span id="Generator.__init__-503"><a href="#Generator.__init__-503"><span class="linenos">503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span> <span class="o">=</span> <span class="n">leading_comma</span>
+</span><span id="Generator.__init__-504"><a href="#Generator.__init__-504"><span class="linenos">504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="o">=</span> <span class="n">max_text_width</span>
+</span><span id="Generator.__init__-505"><a href="#Generator.__init__-505"><span class="linenos">505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Generator.__init__-506"><a href="#Generator.__init__-506"><span class="linenos">506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="Generator.__init__-507"><a href="#Generator.__init__-507"><span class="linenos">507</span></a>
+</span><span id="Generator.__init__-508"><a href="#Generator.__init__-508"><span class="linenos">508</span></a> <span class="c1"># This is both a Dialect property and a Generator argument, so we prioritize the latter</span>
+</span><span id="Generator.__init__-509"><a href="#Generator.__init__-509"><span class="linenos">509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.__init__-510"><a href="#Generator.__init__-510"><span class="linenos">510</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span> <span class="k">if</span> <span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize_functions</span>
+</span><span id="Generator.__init__-511"><a href="#Generator.__init__-511"><span class="linenos">511</span></a> <span class="p">)</span>
+</span><span id="Generator.__init__-512"><a href="#Generator.__init__-512"><span class="linenos">512</span></a>
+</span><span id="Generator.__init__-513"><a href="#Generator.__init__-513"><span class="linenos">513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.__init__-514"><a href="#Generator.__init__-514"><span class="linenos">514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.__init__-515"><a href="#Generator.__init__-515"><span class="linenos">515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span>
+</span><span id="Generator.__init__-516"><a href="#Generator.__init__-516"><span class="linenos">516</span></a> <span class="p">)</span>
+</span><span id="Generator.__init__-517"><a href="#Generator.__init__-517"><span class="linenos">517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.__init__-518"><a href="#Generator.__init__-518"><span class="linenos">518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span>
+</span><span id="Generator.__init__-519"><a href="#Generator.__init__-519"><span class="linenos">519</span></a> <span class="p">)</span>
</span></pre></div>
@@ -8766,6 +8797,18 @@ Default: True</li>
</div>
+ <div id="Generator.MULTI_ARG_DISTINCT" class="classattr">
+ <div class="attr variable">
+ <span class="name">MULTI_ARG_DISTINCT</span> =
+<span class="default_value">True</span>
+
+
+ </div>
+ <a class="headerlink" href="#Generator.MULTI_ARG_DISTINCT"></a>
+
+
+
+ </div>
<div id="Generator.JSON_TYPE_REQUIRED_FOR_EXTRACTION" class="classattr">
<div class="attr variable">
<span class="name">JSON_TYPE_REQUIRED_FOR_EXTRACTION</span> =
@@ -8806,7 +8849,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
<input id="Generator.SUPPORTED_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;}</span>
</div>
@@ -9132,39 +9175,39 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.generate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generate-517"><a href="#Generator.generate-517"><span class="linenos">517</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.generate-518"><a href="#Generator.generate-518"><span class="linenos">518</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Generator.generate-519"><a href="#Generator.generate-519"><span class="linenos">519</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
-</span><span id="Generator.generate-520"><a href="#Generator.generate-520"><span class="linenos">520</span></a>
-</span><span id="Generator.generate-521"><a href="#Generator.generate-521"><span class="linenos">521</span></a><span class="sd"> Args:</span>
-</span><span id="Generator.generate-522"><a href="#Generator.generate-522"><span class="linenos">522</span></a><span class="sd"> expression: The syntax tree.</span>
-</span><span id="Generator.generate-523"><a href="#Generator.generate-523"><span class="linenos">523</span></a><span class="sd"> copy: Whether or not to copy the expression. The generator performs mutations so</span>
-</span><span id="Generator.generate-524"><a href="#Generator.generate-524"><span class="linenos">524</span></a><span class="sd"> it is safer to copy.</span>
-</span><span id="Generator.generate-525"><a href="#Generator.generate-525"><span class="linenos">525</span></a>
-</span><span id="Generator.generate-526"><a href="#Generator.generate-526"><span class="linenos">526</span></a><span class="sd"> Returns:</span>
-</span><span id="Generator.generate-527"><a href="#Generator.generate-527"><span class="linenos">527</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
-</span><span id="Generator.generate-528"><a href="#Generator.generate-528"><span class="linenos">528</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Generator.generate-529"><a href="#Generator.generate-529"><span class="linenos">529</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="Generator.generate-530"><a href="#Generator.generate-530"><span class="linenos">530</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator.generate-531"><a href="#Generator.generate-531"><span class="linenos">531</span></a>
-</span><span id="Generator.generate-532"><a href="#Generator.generate-532"><span class="linenos">532</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.generate-533"><a href="#Generator.generate-533"><span class="linenos">533</span></a>
-</span><span id="Generator.generate-534"><a href="#Generator.generate-534"><span class="linenos">534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.generate-535"><a href="#Generator.generate-535"><span class="linenos">535</span></a> <span class="n">sql</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="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator.generate-536"><a href="#Generator.generate-536"><span class="linenos">536</span></a>
-</span><span id="Generator.generate-537"><a href="#Generator.generate-537"><span class="linenos">537</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.generate-538"><a href="#Generator.generate-538"><span class="linenos">538</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.generate-539"><a href="#Generator.generate-539"><span class="linenos">539</span></a>
-</span><span id="Generator.generate-540"><a href="#Generator.generate-540"><span class="linenos">540</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
-</span><span id="Generator.generate-541"><a href="#Generator.generate-541"><span class="linenos">541</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.generate-542"><a href="#Generator.generate-542"><span class="linenos">542</span></a>
-</span><span id="Generator.generate-543"><a href="#Generator.generate-543"><span class="linenos">543</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
-</span><span id="Generator.generate-544"><a href="#Generator.generate-544"><span class="linenos">544</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator.generate-545"><a href="#Generator.generate-545"><span class="linenos">545</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="Generator.generate-546"><a href="#Generator.generate-546"><span class="linenos">546</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
-</span><span id="Generator.generate-547"><a href="#Generator.generate-547"><span class="linenos">547</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
-</span><span id="Generator.generate-548"><a href="#Generator.generate-548"><span class="linenos">548</span></a>
-</span><span id="Generator.generate-549"><a href="#Generator.generate-549"><span class="linenos">549</span></a> <span class="k">return</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generate-521"><a href="#Generator.generate-521"><span class="linenos">521</span></a> <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.generate-522"><a href="#Generator.generate-522"><span class="linenos">522</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Generator.generate-523"><a href="#Generator.generate-523"><span class="linenos">523</span></a><span class="sd"> Generates the SQL string corresponding to the given syntax tree.</span>
+</span><span id="Generator.generate-524"><a href="#Generator.generate-524"><span class="linenos">524</span></a>
+</span><span id="Generator.generate-525"><a href="#Generator.generate-525"><span class="linenos">525</span></a><span class="sd"> Args:</span>
+</span><span id="Generator.generate-526"><a href="#Generator.generate-526"><span class="linenos">526</span></a><span class="sd"> expression: The syntax tree.</span>
+</span><span id="Generator.generate-527"><a href="#Generator.generate-527"><span class="linenos">527</span></a><span class="sd"> copy: Whether or not to copy the expression. The generator performs mutations so</span>
+</span><span id="Generator.generate-528"><a href="#Generator.generate-528"><span class="linenos">528</span></a><span class="sd"> it is safer to copy.</span>
+</span><span id="Generator.generate-529"><a href="#Generator.generate-529"><span class="linenos">529</span></a>
+</span><span id="Generator.generate-530"><a href="#Generator.generate-530"><span class="linenos">530</span></a><span class="sd"> Returns:</span>
+</span><span id="Generator.generate-531"><a href="#Generator.generate-531"><span class="linenos">531</span></a><span class="sd"> The SQL string corresponding to `expression`.</span>
+</span><span id="Generator.generate-532"><a href="#Generator.generate-532"><span class="linenos">532</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Generator.generate-533"><a href="#Generator.generate-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="Generator.generate-534"><a href="#Generator.generate-534"><span class="linenos">534</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator.generate-535"><a href="#Generator.generate-535"><span class="linenos">535</span></a>
+</span><span id="Generator.generate-536"><a href="#Generator.generate-536"><span class="linenos">536</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.generate-537"><a href="#Generator.generate-537"><span class="linenos">537</span></a>
+</span><span id="Generator.generate-538"><a href="#Generator.generate-538"><span class="linenos">538</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.generate-539"><a href="#Generator.generate-539"><span class="linenos">539</span></a> <span class="n">sql</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="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator.generate-540"><a href="#Generator.generate-540"><span class="linenos">540</span></a>
+</span><span id="Generator.generate-541"><a href="#Generator.generate-541"><span class="linenos">541</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.generate-542"><a href="#Generator.generate-542"><span class="linenos">542</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.generate-543"><a href="#Generator.generate-543"><span class="linenos">543</span></a>
+</span><span id="Generator.generate-544"><a href="#Generator.generate-544"><span class="linenos">544</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
+</span><span id="Generator.generate-545"><a href="#Generator.generate-545"><span class="linenos">545</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.generate-546"><a href="#Generator.generate-546"><span class="linenos">546</span></a>
+</span><span id="Generator.generate-547"><a href="#Generator.generate-547"><span class="linenos">547</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
+</span><span id="Generator.generate-548"><a href="#Generator.generate-548"><span class="linenos">548</span></a> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator.generate-549"><a href="#Generator.generate-549"><span class="linenos">549</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="Generator.generate-550"><a href="#Generator.generate-550"><span class="linenos">550</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">:</span>
+</span><span id="Generator.generate-551"><a href="#Generator.generate-551"><span class="linenos">551</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_unsupported</span><span class="p">))</span>
+</span><span id="Generator.generate-552"><a href="#Generator.generate-552"><span class="linenos">552</span></a>
+</span><span id="Generator.generate-553"><a href="#Generator.generate-553"><span class="linenos">553</span></a> <span class="k">return</span> <span class="n">sql</span>
</span></pre></div>
@@ -9198,23 +9241,23 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.preprocess"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.preprocess-551"><a href="#Generator.preprocess-551"><span class="linenos">551</span></a> <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Generator.preprocess-552"><a href="#Generator.preprocess-552"><span class="linenos">552</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Apply generic preprocessing transformations to a given expression.&quot;&quot;&quot;</span>
-</span><span id="Generator.preprocess-553"><a href="#Generator.preprocess-553"><span class="linenos">553</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Generator.preprocess-554"><a href="#Generator.preprocess-554"><span class="linenos">554</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="Generator.preprocess-555"><a href="#Generator.preprocess-555"><span class="linenos">555</span></a> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span>
-</span><span id="Generator.preprocess-556"><a href="#Generator.preprocess-556"><span class="linenos">556</span></a> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">expression</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">))</span>
-</span><span id="Generator.preprocess-557"><a href="#Generator.preprocess-557"><span class="linenos">557</span></a> <span class="p">):</span>
-</span><span id="Generator.preprocess-558"><a href="#Generator.preprocess-558"><span class="linenos">558</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">move_ctes_to_top_level</span>
-</span><span id="Generator.preprocess-559"><a href="#Generator.preprocess-559"><span class="linenos">559</span></a>
-</span><span id="Generator.preprocess-560"><a href="#Generator.preprocess-560"><span class="linenos">560</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">move_ctes_to_top_level</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.preprocess-561"><a href="#Generator.preprocess-561"><span class="linenos">561</span></a>
-</span><span id="Generator.preprocess-562"><a href="#Generator.preprocess-562"><span class="linenos">562</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENSURE_BOOLS</span><span class="p">:</span>
-</span><span id="Generator.preprocess-563"><a href="#Generator.preprocess-563"><span class="linenos">563</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">ensure_bools</span>
-</span><span id="Generator.preprocess-564"><a href="#Generator.preprocess-564"><span class="linenos">564</span></a>
-</span><span id="Generator.preprocess-565"><a href="#Generator.preprocess-565"><span class="linenos">565</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ensure_bools</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.preprocess-566"><a href="#Generator.preprocess-566"><span class="linenos">566</span></a>
-</span><span id="Generator.preprocess-567"><a href="#Generator.preprocess-567"><span class="linenos">567</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.preprocess-555"><a href="#Generator.preprocess-555"><span class="linenos">555</span></a> <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Generator.preprocess-556"><a href="#Generator.preprocess-556"><span class="linenos">556</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Apply generic preprocessing transformations to a given expression.&quot;&quot;&quot;</span>
+</span><span id="Generator.preprocess-557"><a href="#Generator.preprocess-557"><span class="linenos">557</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Generator.preprocess-558"><a href="#Generator.preprocess-558"><span class="linenos">558</span></a> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Generator.preprocess-559"><a href="#Generator.preprocess-559"><span class="linenos">559</span></a> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSIONS_WITHOUT_NESTED_CTES</span>
+</span><span id="Generator.preprocess-560"><a href="#Generator.preprocess-560"><span class="linenos">560</span></a> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">expression</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">))</span>
+</span><span id="Generator.preprocess-561"><a href="#Generator.preprocess-561"><span class="linenos">561</span></a> <span class="p">):</span>
+</span><span id="Generator.preprocess-562"><a href="#Generator.preprocess-562"><span class="linenos">562</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">move_ctes_to_top_level</span>
+</span><span id="Generator.preprocess-563"><a href="#Generator.preprocess-563"><span class="linenos">563</span></a>
+</span><span id="Generator.preprocess-564"><a href="#Generator.preprocess-564"><span class="linenos">564</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">move_ctes_to_top_level</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.preprocess-565"><a href="#Generator.preprocess-565"><span class="linenos">565</span></a>
+</span><span id="Generator.preprocess-566"><a href="#Generator.preprocess-566"><span class="linenos">566</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENSURE_BOOLS</span><span class="p">:</span>
+</span><span id="Generator.preprocess-567"><a href="#Generator.preprocess-567"><span class="linenos">567</span></a> <span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">ensure_bools</span>
+</span><span id="Generator.preprocess-568"><a href="#Generator.preprocess-568"><span class="linenos">568</span></a>
+</span><span id="Generator.preprocess-569"><a href="#Generator.preprocess-569"><span class="linenos">569</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">ensure_bools</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.preprocess-570"><a href="#Generator.preprocess-570"><span class="linenos">570</span></a>
+</span><span id="Generator.preprocess-571"><a href="#Generator.preprocess-571"><span class="linenos">571</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -9234,10 +9277,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.unsupported"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unsupported-569"><a href="#Generator.unsupported-569"><span class="linenos">569</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.unsupported-570"><a href="#Generator.unsupported-570"><span class="linenos">570</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
-</span><span id="Generator.unsupported-571"><a href="#Generator.unsupported-571"><span class="linenos">571</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="Generator.unsupported-572"><a href="#Generator.unsupported-572"><span class="linenos">572</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unsupported-573"><a href="#Generator.unsupported-573"><span class="linenos">573</span></a> <span class="k">def</span> <span class="nf">unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.unsupported-574"><a href="#Generator.unsupported-574"><span class="linenos">574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
+</span><span id="Generator.unsupported-575"><a href="#Generator.unsupported-575"><span class="linenos">575</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="Generator.unsupported-576"><a href="#Generator.unsupported-576"><span class="linenos">576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported_messages</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span></pre></div>
@@ -9255,8 +9298,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.sep"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sep-574"><a href="#Generator.sep-574"><span class="linenos">574</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.sep-575"><a href="#Generator.sep-575"><span class="linenos">575</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sep-578"><a href="#Generator.sep-578"><span class="linenos">578</span></a> <span class="k">def</span> <span class="nf">sep</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.sep-579"><a href="#Generator.sep-579"><span class="linenos">579</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="n">sep</span>
</span></pre></div>
@@ -9274,8 +9317,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.seg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.seg-577"><a href="#Generator.seg-577"><span class="linenos">577</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.seg-578"><a href="#Generator.seg-578"><span class="linenos">578</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.seg-581"><a href="#Generator.seg-581"><span class="linenos">581</span></a> <span class="k">def</span> <span class="nf">seg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.seg-582"><a href="#Generator.seg-582"><span class="linenos">582</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9293,10 +9336,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.pad_comment"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pad_comment-580"><a href="#Generator.pad_comment-580"><span class="linenos">580</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.pad_comment-581"><a href="#Generator.pad_comment-581"><span class="linenos">581</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator.pad_comment-582"><a href="#Generator.pad_comment-582"><span class="linenos">582</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
-</span><span id="Generator.pad_comment-583"><a href="#Generator.pad_comment-583"><span class="linenos">583</span></a> <span class="k">return</span> <span class="n">comment</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pad_comment-584"><a href="#Generator.pad_comment-584"><span class="linenos">584</span></a> <span class="k">def</span> <span class="nf">pad_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.pad_comment-585"><a href="#Generator.pad_comment-585"><span class="linenos">585</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">comment</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator.pad_comment-586"><a href="#Generator.pad_comment-586"><span class="linenos">586</span></a> <span class="n">comment</span> <span class="o">=</span> <span class="n">comment</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">comment</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">else</span> <span class="n">comment</span>
+</span><span id="Generator.pad_comment-587"><a href="#Generator.pad_comment-587"><span class="linenos">587</span></a> <span class="k">return</span> <span class="n">comment</span>
</span></pre></div>
@@ -9314,36 +9357,36 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.maybe_comment"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.maybe_comment-585"><a href="#Generator.maybe_comment-585"><span class="linenos">585</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
-</span><span id="Generator.maybe_comment-586"><a href="#Generator.maybe_comment-586"><span class="linenos">586</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-587"><a href="#Generator.maybe_comment-587"><span class="linenos">587</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-588"><a href="#Generator.maybe_comment-588"><span class="linenos">588</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-589"><a href="#Generator.maybe_comment-589"><span class="linenos">589</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.maybe_comment-590"><a href="#Generator.maybe_comment-590"><span class="linenos">590</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.maybe_comment-591"><a href="#Generator.maybe_comment-591"><span class="linenos">591</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.maybe_comment-592"><a href="#Generator.maybe_comment-592"><span class="linenos">592</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Generator.maybe_comment-593"><a href="#Generator.maybe_comment-593"><span class="linenos">593</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Generator.maybe_comment-594"><a href="#Generator.maybe_comment-594"><span class="linenos">594</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Generator.maybe_comment-595"><a href="#Generator.maybe_comment-595"><span class="linenos">595</span></a> <span class="p">)</span>
-</span><span id="Generator.maybe_comment-596"><a href="#Generator.maybe_comment-596"><span class="linenos">596</span></a>
-</span><span id="Generator.maybe_comment-597"><a href="#Generator.maybe_comment-597"><span class="linenos">597</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXCLUDE_COMMENTS</span><span class="p">):</span>
-</span><span id="Generator.maybe_comment-598"><a href="#Generator.maybe_comment-598"><span class="linenos">598</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.maybe_comment-599"><a href="#Generator.maybe_comment-599"><span class="linenos">599</span></a>
-</span><span id="Generator.maybe_comment-600"><a href="#Generator.maybe_comment-600"><span class="linenos">600</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.maybe_comment-601"><a href="#Generator.maybe_comment-601"><span class="linenos">601</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
-</span><span id="Generator.maybe_comment-602"><a href="#Generator.maybe_comment-602"><span class="linenos">602</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.maybe_comment-589"><a href="#Generator.maybe_comment-589"><span class="linenos">589</span></a> <span class="k">def</span> <span class="nf">maybe_comment</span><span class="p">(</span>
+</span><span id="Generator.maybe_comment-590"><a href="#Generator.maybe_comment-590"><span class="linenos">590</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-591"><a href="#Generator.maybe_comment-591"><span class="linenos">591</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-592"><a href="#Generator.maybe_comment-592"><span class="linenos">592</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-593"><a href="#Generator.maybe_comment-593"><span class="linenos">593</span></a> <span class="n">comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.maybe_comment-594"><a href="#Generator.maybe_comment-594"><span class="linenos">594</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.maybe_comment-595"><a href="#Generator.maybe_comment-595"><span class="linenos">595</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.maybe_comment-596"><a href="#Generator.maybe_comment-596"><span class="linenos">596</span></a> <span class="p">((</span><span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">comments</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Generator.maybe_comment-597"><a href="#Generator.maybe_comment-597"><span class="linenos">597</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Generator.maybe_comment-598"><a href="#Generator.maybe_comment-598"><span class="linenos">598</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Generator.maybe_comment-599"><a href="#Generator.maybe_comment-599"><span class="linenos">599</span></a> <span class="p">)</span>
+</span><span id="Generator.maybe_comment-600"><a href="#Generator.maybe_comment-600"><span class="linenos">600</span></a>
+</span><span id="Generator.maybe_comment-601"><a href="#Generator.maybe_comment-601"><span class="linenos">601</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXCLUDE_COMMENTS</span><span class="p">):</span>
+</span><span id="Generator.maybe_comment-602"><a href="#Generator.maybe_comment-602"><span class="linenos">602</span></a> <span class="k">return</span> <span class="n">sql</span>
</span><span id="Generator.maybe_comment-603"><a href="#Generator.maybe_comment-603"><span class="linenos">603</span></a>
-</span><span id="Generator.maybe_comment-604"><a href="#Generator.maybe_comment-604"><span class="linenos">604</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
-</span><span id="Generator.maybe_comment-605"><a href="#Generator.maybe_comment-605"><span class="linenos">605</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.maybe_comment-606"><a href="#Generator.maybe_comment-606"><span class="linenos">606</span></a>
-</span><span id="Generator.maybe_comment-607"><a href="#Generator.maybe_comment-607"><span class="linenos">607</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
-</span><span id="Generator.maybe_comment-608"><a href="#Generator.maybe_comment-608"><span class="linenos">608</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator.maybe_comment-609"><a href="#Generator.maybe_comment-609"><span class="linenos">609</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.maybe_comment-610"><a href="#Generator.maybe_comment-610"><span class="linenos">610</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
-</span><span id="Generator.maybe_comment-611"><a href="#Generator.maybe_comment-611"><span class="linenos">611</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.maybe_comment-612"><a href="#Generator.maybe_comment-612"><span class="linenos">612</span></a> <span class="p">)</span>
-</span><span id="Generator.maybe_comment-613"><a href="#Generator.maybe_comment-613"><span class="linenos">613</span></a>
-</span><span id="Generator.maybe_comment-614"><a href="#Generator.maybe_comment-614"><span class="linenos">614</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.maybe_comment-604"><a href="#Generator.maybe_comment-604"><span class="linenos">604</span></a> <span class="n">comments_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.maybe_comment-605"><a href="#Generator.maybe_comment-605"><span class="linenos">605</span></a> <span class="sa">f</span><span class="s2">&quot;/*</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">pad_comment</span><span class="p">(</span><span class="n">comment</span><span class="p">)</span><span class="si">}</span><span class="s2">*/&quot;</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comments</span> <span class="k">if</span> <span class="n">comment</span>
+</span><span id="Generator.maybe_comment-606"><a href="#Generator.maybe_comment-606"><span class="linenos">606</span></a> <span class="p">)</span>
+</span><span id="Generator.maybe_comment-607"><a href="#Generator.maybe_comment-607"><span class="linenos">607</span></a>
+</span><span id="Generator.maybe_comment-608"><a href="#Generator.maybe_comment-608"><span class="linenos">608</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">comments_sql</span><span class="p">:</span>
+</span><span id="Generator.maybe_comment-609"><a href="#Generator.maybe_comment-609"><span class="linenos">609</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.maybe_comment-610"><a href="#Generator.maybe_comment-610"><span class="linenos">610</span></a>
+</span><span id="Generator.maybe_comment-611"><a href="#Generator.maybe_comment-611"><span class="linenos">611</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">WITH_SEPARATED_COMMENTS</span><span class="p">):</span>
+</span><span id="Generator.maybe_comment-612"><a href="#Generator.maybe_comment-612"><span class="linenos">612</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator.maybe_comment-613"><a href="#Generator.maybe_comment-613"><span class="linenos">613</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.maybe_comment-614"><a href="#Generator.maybe_comment-614"><span class="linenos">614</span></a> <span class="k">if</span> <span class="n">sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="Generator.maybe_comment-615"><a href="#Generator.maybe_comment-615"><span class="linenos">615</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.maybe_comment-616"><a href="#Generator.maybe_comment-616"><span class="linenos">616</span></a> <span class="p">)</span>
+</span><span id="Generator.maybe_comment-617"><a href="#Generator.maybe_comment-617"><span class="linenos">617</span></a>
+</span><span id="Generator.maybe_comment-618"><a href="#Generator.maybe_comment-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">comments_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9361,17 +9404,17 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.wrap"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.wrap-616"><a href="#Generator.wrap-616"><span class="linenos">616</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.wrap-617"><a href="#Generator.wrap-617"><span class="linenos">617</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
-</span><span id="Generator.wrap-618"><a href="#Generator.wrap-618"><span class="linenos">618</span></a> <span class="p">(</span>
-</span><span id="Generator.wrap-619"><a href="#Generator.wrap-619"><span class="linenos">619</span></a> <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><span id="Generator.wrap-620"><a href="#Generator.wrap-620"><span class="linenos">620</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
-</span><span id="Generator.wrap-621"><a href="#Generator.wrap-621"><span class="linenos">621</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.wrap-622"><a href="#Generator.wrap-622"><span class="linenos">622</span></a> <span class="p">),</span>
-</span><span id="Generator.wrap-623"><a href="#Generator.wrap-623"><span class="linenos">623</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
-</span><span id="Generator.wrap-624"><a href="#Generator.wrap-624"><span class="linenos">624</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator.wrap-625"><a href="#Generator.wrap-625"><span class="linenos">625</span></a> <span class="p">)</span>
-</span><span id="Generator.wrap-626"><a href="#Generator.wrap-626"><span class="linenos">626</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.wrap-620"><a href="#Generator.wrap-620"><span class="linenos">620</span></a> <span class="k">def</span> <span class="nf">wrap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.wrap-621"><a href="#Generator.wrap-621"><span class="linenos">621</span></a> <span class="n">this_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span>
+</span><span id="Generator.wrap-622"><a href="#Generator.wrap-622"><span class="linenos">622</span></a> <span class="p">(</span>
+</span><span id="Generator.wrap-623"><a href="#Generator.wrap-623"><span class="linenos">623</span></a> <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><span id="Generator.wrap-624"><a href="#Generator.wrap-624"><span class="linenos">624</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">))</span>
+</span><span id="Generator.wrap-625"><a href="#Generator.wrap-625"><span class="linenos">625</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.wrap-626"><a href="#Generator.wrap-626"><span class="linenos">626</span></a> <span class="p">),</span>
+</span><span id="Generator.wrap-627"><a href="#Generator.wrap-627"><span class="linenos">627</span></a> <span class="n">level</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
+</span><span id="Generator.wrap-628"><a href="#Generator.wrap-628"><span class="linenos">628</span></a> <span class="n">pad</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator.wrap-629"><a href="#Generator.wrap-629"><span class="linenos">629</span></a> <span class="p">)</span>
+</span><span id="Generator.wrap-630"><a href="#Generator.wrap-630"><span class="linenos">630</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9389,12 +9432,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.no_identify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.no_identify-628"><a href="#Generator.no_identify-628"><span class="linenos">628</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.no_identify-629"><a href="#Generator.no_identify-629"><span class="linenos">629</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
-</span><span id="Generator.no_identify-630"><a href="#Generator.no_identify-630"><span class="linenos">630</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Generator.no_identify-631"><a href="#Generator.no_identify-631"><span class="linenos">631</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Generator.no_identify-632"><a href="#Generator.no_identify-632"><span class="linenos">632</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
-</span><span id="Generator.no_identify-633"><a href="#Generator.no_identify-633"><span class="linenos">633</span></a> <span class="k">return</span> <span class="n">result</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.no_identify-632"><a href="#Generator.no_identify-632"><span class="linenos">632</span></a> <span class="k">def</span> <span class="nf">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.no_identify-633"><a href="#Generator.no_identify-633"><span class="linenos">633</span></a> <span class="n">original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span>
+</span><span id="Generator.no_identify-634"><a href="#Generator.no_identify-634"><span class="linenos">634</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Generator.no_identify-635"><a href="#Generator.no_identify-635"><span class="linenos">635</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Generator.no_identify-636"><a href="#Generator.no_identify-636"><span class="linenos">636</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span> <span class="o">=</span> <span class="n">original</span>
+</span><span id="Generator.no_identify-637"><a href="#Generator.no_identify-637"><span class="linenos">637</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
@@ -9412,12 +9455,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.normalize_func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.normalize_func-635"><a href="#Generator.normalize_func-635"><span class="linenos">635</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.normalize_func-636"><a href="#Generator.normalize_func-636"><span class="linenos">636</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator.normalize_func-637"><a href="#Generator.normalize_func-637"><span class="linenos">637</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Generator.normalize_func-638"><a href="#Generator.normalize_func-638"><span class="linenos">638</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
-</span><span id="Generator.normalize_func-639"><a href="#Generator.normalize_func-639"><span class="linenos">639</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator.normalize_func-640"><a href="#Generator.normalize_func-640"><span class="linenos">640</span></a> <span class="k">return</span> <span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.normalize_func-639"><a href="#Generator.normalize_func-639"><span class="linenos">639</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.normalize_func-640"><a href="#Generator.normalize_func-640"><span class="linenos">640</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;upper&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator.normalize_func-641"><a href="#Generator.normalize_func-641"><span class="linenos">641</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Generator.normalize_func-642"><a href="#Generator.normalize_func-642"><span class="linenos">642</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span> <span class="o">==</span> <span class="s2">&quot;lower&quot;</span><span class="p">:</span>
+</span><span id="Generator.normalize_func-643"><a href="#Generator.normalize_func-643"><span class="linenos">643</span></a> <span class="k">return</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator.normalize_func-644"><a href="#Generator.normalize_func-644"><span class="linenos">644</span></a> <span class="k">return</span> <span class="n">name</span>
</span></pre></div>
@@ -9435,28 +9478,28 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.indent"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indent-642"><a href="#Generator.indent-642"><span class="linenos">642</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
-</span><span id="Generator.indent-643"><a href="#Generator.indent-643"><span class="linenos">643</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.indent-644"><a href="#Generator.indent-644"><span class="linenos">644</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator.indent-645"><a href="#Generator.indent-645"><span class="linenos">645</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
-</span><span id="Generator.indent-646"><a href="#Generator.indent-646"><span class="linenos">646</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.indent-647"><a href="#Generator.indent-647"><span class="linenos">647</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.indent-648"><a href="#Generator.indent-648"><span class="linenos">648</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.indent-649"><a href="#Generator.indent-649"><span class="linenos">649</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indent-650"><a href="#Generator.indent-650"><span class="linenos">650</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.indent-651"><a href="#Generator.indent-651"><span class="linenos">651</span></a> <span class="k">return</span> <span class="n">sql</span>
-</span><span id="Generator.indent-652"><a href="#Generator.indent-652"><span class="linenos">652</span></a>
-</span><span id="Generator.indent-653"><a href="#Generator.indent-653"><span class="linenos">653</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
-</span><span id="Generator.indent-654"><a href="#Generator.indent-654"><span class="linenos">654</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.indent-655"><a href="#Generator.indent-655"><span class="linenos">655</span></a>
-</span><span id="Generator.indent-656"><a href="#Generator.indent-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.indent-657"><a href="#Generator.indent-657"><span class="linenos">657</span></a> <span class="p">(</span>
-</span><span id="Generator.indent-658"><a href="#Generator.indent-658"><span class="linenos">658</span></a> <span class="n">line</span>
-</span><span id="Generator.indent-659"><a href="#Generator.indent-659"><span class="linenos">659</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Generator.indent-660"><a href="#Generator.indent-660"><span class="linenos">660</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indent-661"><a href="#Generator.indent-661"><span class="linenos">661</span></a> <span class="p">)</span>
-</span><span id="Generator.indent-662"><a href="#Generator.indent-662"><span class="linenos">662</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
-</span><span id="Generator.indent-663"><a href="#Generator.indent-663"><span class="linenos">663</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indent-646"><a href="#Generator.indent-646"><span class="linenos">646</span></a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span>
+</span><span id="Generator.indent-647"><a href="#Generator.indent-647"><span class="linenos">647</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.indent-648"><a href="#Generator.indent-648"><span class="linenos">648</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator.indent-649"><a href="#Generator.indent-649"><span class="linenos">649</span></a> <span class="n">level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+</span><span id="Generator.indent-650"><a href="#Generator.indent-650"><span class="linenos">650</span></a> <span class="n">pad</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.indent-651"><a href="#Generator.indent-651"><span class="linenos">651</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.indent-652"><a href="#Generator.indent-652"><span class="linenos">652</span></a> <span class="n">skip_last</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.indent-653"><a href="#Generator.indent-653"><span class="linenos">653</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indent-654"><a href="#Generator.indent-654"><span class="linenos">654</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.indent-655"><a href="#Generator.indent-655"><span class="linenos">655</span></a> <span class="k">return</span> <span class="n">sql</span>
+</span><span id="Generator.indent-656"><a href="#Generator.indent-656"><span class="linenos">656</span></a>
+</span><span id="Generator.indent-657"><a href="#Generator.indent-657"><span class="linenos">657</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="k">if</span> <span class="n">pad</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pad</span>
+</span><span id="Generator.indent-658"><a href="#Generator.indent-658"><span class="linenos">658</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">sql</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.indent-659"><a href="#Generator.indent-659"><span class="linenos">659</span></a>
+</span><span id="Generator.indent-660"><a href="#Generator.indent-660"><span class="linenos">660</span></a> <span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.indent-661"><a href="#Generator.indent-661"><span class="linenos">661</span></a> <span class="p">(</span>
+</span><span id="Generator.indent-662"><a href="#Generator.indent-662"><span class="linenos">662</span></a> <span class="n">line</span>
+</span><span id="Generator.indent-663"><a href="#Generator.indent-663"><span class="linenos">663</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">skip_first</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">skip_last</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Generator.indent-664"><a href="#Generator.indent-664"><span class="linenos">664</span></a> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">level</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_indent</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pad</span><span class="p">)</span><span class="si">}{</span><span class="n">line</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indent-665"><a href="#Generator.indent-665"><span class="linenos">665</span></a> <span class="p">)</span>
+</span><span id="Generator.indent-666"><a href="#Generator.indent-666"><span class="linenos">666</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
+</span><span id="Generator.indent-667"><a href="#Generator.indent-667"><span class="linenos">667</span></a> <span class="p">)</span>
</span></pre></div>
@@ -9474,43 +9517,43 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sql-665"><a href="#Generator.sql-665"><span class="linenos">665</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
-</span><span id="Generator.sql-666"><a href="#Generator.sql-666"><span class="linenos">666</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.sql-667"><a href="#Generator.sql-667"><span class="linenos">667</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
-</span><span id="Generator.sql-668"><a href="#Generator.sql-668"><span class="linenos">668</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.sql-669"><a href="#Generator.sql-669"><span class="linenos">669</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator.sql-670"><a href="#Generator.sql-670"><span class="linenos">670</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.sql-671"><a href="#Generator.sql-671"><span class="linenos">671</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Generator.sql-672"><a href="#Generator.sql-672"><span class="linenos">672</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.sql-673"><a href="#Generator.sql-673"><span class="linenos">673</span></a>
-</span><span id="Generator.sql-674"><a href="#Generator.sql-674"><span class="linenos">674</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="Generator.sql-675"><a href="#Generator.sql-675"><span class="linenos">675</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Generator.sql-676"><a href="#Generator.sql-676"><span class="linenos">676</span></a>
-</span><span id="Generator.sql-677"><a href="#Generator.sql-677"><span class="linenos">677</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
-</span><span id="Generator.sql-678"><a href="#Generator.sql-678"><span class="linenos">678</span></a> <span class="n">value</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="n">key</span><span class="p">)</span>
-</span><span id="Generator.sql-679"><a href="#Generator.sql-679"><span class="linenos">679</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="Generator.sql-680"><a href="#Generator.sql-680"><span class="linenos">680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator.sql-681"><a href="#Generator.sql-681"><span class="linenos">681</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.sql-682"><a href="#Generator.sql-682"><span class="linenos">682</span></a>
-</span><span id="Generator.sql-683"><a href="#Generator.sql-683"><span class="linenos">683</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator.sql-684"><a href="#Generator.sql-684"><span class="linenos">684</span></a>
-</span><span id="Generator.sql-685"><a href="#Generator.sql-685"><span class="linenos">685</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="Generator.sql-686"><a href="#Generator.sql-686"><span class="linenos">686</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-687"><a href="#Generator.sql-687"><span class="linenos">687</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Generator.sql-688"><a href="#Generator.sql-688"><span class="linenos">688</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
-</span><span id="Generator.sql-689"><a href="#Generator.sql-689"><span class="linenos">689</span></a>
-</span><span id="Generator.sql-690"><a href="#Generator.sql-690"><span class="linenos">690</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
-</span><span id="Generator.sql-691"><a href="#Generator.sql-691"><span class="linenos">691</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-692"><a href="#Generator.sql-692"><span class="linenos">692</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Func</span><span class="p">):</span>
-</span><span id="Generator.sql-693"><a href="#Generator.sql-693"><span class="linenos">693</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-694"><a href="#Generator.sql-694"><span class="linenos">694</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Property</span><span class="p">):</span>
-</span><span id="Generator.sql-695"><a href="#Generator.sql-695"><span class="linenos">695</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.sql-696"><a href="#Generator.sql-696"><span class="linenos">696</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.sql-697"><a href="#Generator.sql-697"><span class="linenos">697</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.sql-698"><a href="#Generator.sql-698"><span class="linenos">698</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.sql-699"><a href="#Generator.sql-699"><span class="linenos">699</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.sql-700"><a href="#Generator.sql-700"><span class="linenos">700</span></a>
-</span><span id="Generator.sql-701"><a href="#Generator.sql-701"><span class="linenos">701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sql-669"><a href="#Generator.sql-669"><span class="linenos">669</span></a> <span class="k">def</span> <span class="nf">sql</span><span class="p">(</span>
+</span><span id="Generator.sql-670"><a href="#Generator.sql-670"><span class="linenos">670</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.sql-671"><a href="#Generator.sql-671"><span class="linenos">671</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span>
+</span><span id="Generator.sql-672"><a href="#Generator.sql-672"><span class="linenos">672</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.sql-673"><a href="#Generator.sql-673"><span class="linenos">673</span></a> <span class="n">comment</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator.sql-674"><a href="#Generator.sql-674"><span class="linenos">674</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.sql-675"><a href="#Generator.sql-675"><span class="linenos">675</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Generator.sql-676"><a href="#Generator.sql-676"><span class="linenos">676</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.sql-677"><a href="#Generator.sql-677"><span class="linenos">677</span></a>
+</span><span id="Generator.sql-678"><a href="#Generator.sql-678"><span class="linenos">678</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="Generator.sql-679"><a href="#Generator.sql-679"><span class="linenos">679</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Generator.sql-680"><a href="#Generator.sql-680"><span class="linenos">680</span></a>
+</span><span id="Generator.sql-681"><a href="#Generator.sql-681"><span class="linenos">681</span></a> <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
+</span><span id="Generator.sql-682"><a href="#Generator.sql-682"><span class="linenos">682</span></a> <span class="n">value</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="n">key</span><span class="p">)</span>
+</span><span id="Generator.sql-683"><a href="#Generator.sql-683"><span class="linenos">683</span></a> <span class="k">if</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="Generator.sql-684"><a href="#Generator.sql-684"><span class="linenos">684</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator.sql-685"><a href="#Generator.sql-685"><span class="linenos">685</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.sql-686"><a href="#Generator.sql-686"><span class="linenos">686</span></a>
+</span><span id="Generator.sql-687"><a href="#Generator.sql-687"><span class="linenos">687</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator.sql-688"><a href="#Generator.sql-688"><span class="linenos">688</span></a>
+</span><span id="Generator.sql-689"><a href="#Generator.sql-689"><span class="linenos">689</span></a> <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="Generator.sql-690"><a href="#Generator.sql-690"><span class="linenos">690</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-691"><a href="#Generator.sql-691"><span class="linenos">691</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Generator.sql-692"><a href="#Generator.sql-692"><span class="linenos">692</span></a> <span class="n">exp_handler_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">_sql&quot;</span>
+</span><span id="Generator.sql-693"><a href="#Generator.sql-693"><span class="linenos">693</span></a>
+</span><span id="Generator.sql-694"><a href="#Generator.sql-694"><span class="linenos">694</span></a> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">):</span>
+</span><span id="Generator.sql-695"><a href="#Generator.sql-695"><span class="linenos">695</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_handler_name</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-696"><a href="#Generator.sql-696"><span class="linenos">696</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Func</span><span class="p">):</span>
+</span><span id="Generator.sql-697"><a href="#Generator.sql-697"><span class="linenos">697</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-698"><a href="#Generator.sql-698"><span class="linenos">698</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Property</span><span class="p">):</span>
+</span><span id="Generator.sql-699"><a href="#Generator.sql-699"><span class="linenos">699</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">property_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.sql-700"><a href="#Generator.sql-700"><span class="linenos">700</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.sql-701"><a href="#Generator.sql-701"><span class="linenos">701</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.sql-702"><a href="#Generator.sql-702"><span class="linenos">702</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.sql-703"><a href="#Generator.sql-703"><span class="linenos">703</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected an Expression. Received </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.sql-704"><a href="#Generator.sql-704"><span class="linenos">704</span></a>
+</span><span id="Generator.sql-705"><a href="#Generator.sql-705"><span class="linenos">705</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">comment</span> <span class="k">else</span> <span class="n">sql</span>
</span></pre></div>
@@ -9528,10 +9571,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.uncache_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uncache_sql-703"><a href="#Generator.uncache_sql-703"><span class="linenos">703</span></a> <span class="k">def</span> <span class="nf">uncache_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">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.uncache_sql-704"><a href="#Generator.uncache_sql-704"><span class="linenos">704</span></a> <span class="n">table</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="Generator.uncache_sql-705"><a href="#Generator.uncache_sql-705"><span class="linenos">705</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.uncache_sql-706"><a href="#Generator.uncache_sql-706"><span class="linenos">706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uncache_sql-707"><a href="#Generator.uncache_sql-707"><span class="linenos">707</span></a> <span class="k">def</span> <span class="nf">uncache_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">Uncache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.uncache_sql-708"><a href="#Generator.uncache_sql-708"><span class="linenos">708</span></a> <span class="n">table</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="Generator.uncache_sql-709"><a href="#Generator.uncache_sql-709"><span class="linenos">709</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.uncache_sql-710"><a href="#Generator.uncache_sql-710"><span class="linenos">710</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNCACHE TABLE</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9549,15 +9592,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.cache_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cache_sql-708"><a href="#Generator.cache_sql-708"><span class="linenos">708</span></a> <span class="k">def</span> <span class="nf">cache_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">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cache_sql-709"><a href="#Generator.cache_sql-709"><span class="linenos">709</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cache_sql-710"><a href="#Generator.cache_sql-710"><span class="linenos">710</span></a> <span class="n">table</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="Generator.cache_sql-711"><a href="#Generator.cache_sql-711"><span class="linenos">711</span></a> <span class="n">options</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;options&quot;</span><span class="p">)</span>
-</span><span id="Generator.cache_sql-712"><a href="#Generator.cache_sql-712"><span class="linenos">712</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</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">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</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="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cache_sql-713"><a href="#Generator.cache_sql-713"><span class="linenos">713</span></a> <span class="n">sql</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="Generator.cache_sql-714"><a href="#Generator.cache_sql-714"><span class="linenos">714</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cache_sql-715"><a href="#Generator.cache_sql-715"><span class="linenos">715</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.cache_sql-716"><a href="#Generator.cache_sql-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cache_sql-712"><a href="#Generator.cache_sql-712"><span class="linenos">712</span></a> <span class="k">def</span> <span class="nf">cache_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">Cache</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cache_sql-713"><a href="#Generator.cache_sql-713"><span class="linenos">713</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="s2">&quot; LAZY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lazy&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cache_sql-714"><a href="#Generator.cache_sql-714"><span class="linenos">714</span></a> <span class="n">table</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="Generator.cache_sql-715"><a href="#Generator.cache_sql-715"><span class="linenos">715</span></a> <span class="n">options</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;options&quot;</span><span class="p">)</span>
+</span><span id="Generator.cache_sql-716"><a href="#Generator.cache_sql-716"><span class="linenos">716</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OPTIONS(</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">options</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">options</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="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cache_sql-717"><a href="#Generator.cache_sql-717"><span class="linenos">717</span></a> <span class="n">sql</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="Generator.cache_sql-718"><a href="#Generator.cache_sql-718"><span class="linenos">718</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cache_sql-719"><a href="#Generator.cache_sql-719"><span class="linenos">719</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CACHE</span><span class="si">{</span><span class="n">lazy</span><span class="si">}</span><span class="s2"> TABLE </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">options</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.cache_sql-720"><a href="#Generator.cache_sql-720"><span class="linenos">720</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -9575,11 +9618,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.characterset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.characterset_sql-718"><a href="#Generator.characterset_sql-718"><span class="linenos">718</span></a> <span class="k">def</span> <span class="nf">characterset_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">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.characterset_sql-719"><a href="#Generator.characterset_sql-719"><span class="linenos">719</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="Generator.characterset_sql-720"><a href="#Generator.characterset_sql-720"><span class="linenos">720</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </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="Generator.characterset_sql-721"><a href="#Generator.characterset_sql-721"><span class="linenos">721</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.characterset_sql-722"><a href="#Generator.characterset_sql-722"><span class="linenos">722</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</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="Generator.characterset_sql-722"><a href="#Generator.characterset_sql-722"><span class="linenos">722</span></a> <span class="k">def</span> <span class="nf">characterset_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">CharacterSet</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.characterset_sql-723"><a href="#Generator.characterset_sql-723"><span class="linenos">723</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="Generator.characterset_sql-724"><a href="#Generator.characterset_sql-724"><span class="linenos">724</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHAR CHARACTER SET </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="Generator.characterset_sql-725"><a href="#Generator.characterset_sql-725"><span class="linenos">725</span></a> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.characterset_sql-726"><a href="#Generator.characterset_sql-726"><span class="linenos">726</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">CHARACTER SET=</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>
@@ -9597,25 +9640,25 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.column_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.column_sql-724"><a href="#Generator.column_sql-724"><span class="linenos">724</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.column_sql-725"><a href="#Generator.column_sql-725"><span class="linenos">725</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.column_sql-726"><a href="#Generator.column_sql-726"><span class="linenos">726</span></a>
-</span><span id="Generator.column_sql-727"><a href="#Generator.column_sql-727"><span class="linenos">727</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.column_sql-728"><a href="#Generator.column_sql-728"><span class="linenos">728</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.column_sql-729"><a href="#Generator.column_sql-729"><span class="linenos">729</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.column_sql-728"><a href="#Generator.column_sql-728"><span class="linenos">728</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.column_sql-729"><a href="#Generator.column_sql-729"><span class="linenos">729</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot; (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator.column_sql-730"><a href="#Generator.column_sql-730"><span class="linenos">730</span></a>
-</span><span id="Generator.column_sql-731"><a href="#Generator.column_sql-731"><span class="linenos">731</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.column_sql-732"><a href="#Generator.column_sql-732"><span class="linenos">732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="Generator.column_sql-733"><a href="#Generator.column_sql-733"><span class="linenos">733</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator.column_sql-734"><a href="#Generator.column_sql-734"><span class="linenos">734</span></a> <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;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator.column_sql-735"><a href="#Generator.column_sql-735"><span class="linenos">735</span></a> <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;db&quot;</span><span class="p">),</span>
-</span><span id="Generator.column_sql-736"><a href="#Generator.column_sql-736"><span class="linenos">736</span></a> <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="Generator.column_sql-737"><a href="#Generator.column_sql-737"><span class="linenos">737</span></a> <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;this&quot;</span><span class="p">),</span>
-</span><span id="Generator.column_sql-738"><a href="#Generator.column_sql-738"><span class="linenos">738</span></a> <span class="p">)</span>
-</span><span id="Generator.column_sql-739"><a href="#Generator.column_sql-739"><span class="linenos">739</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="Generator.column_sql-740"><a href="#Generator.column_sql-740"><span class="linenos">740</span></a> <span class="p">)</span>
-</span><span id="Generator.column_sql-741"><a href="#Generator.column_sql-741"><span class="linenos">741</span></a>
-</span><span id="Generator.column_sql-742"><a href="#Generator.column_sql-742"><span class="linenos">742</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.column_sql-731"><a href="#Generator.column_sql-731"><span class="linenos">731</span></a> <span class="k">if</span> <span class="n">join_mark</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_JOIN_MARKS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.column_sql-732"><a href="#Generator.column_sql-732"><span class="linenos">732</span></a> <span class="n">join_mark</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.column_sql-733"><a href="#Generator.column_sql-733"><span class="linenos">733</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Outer join syntax using the (+) operator is not supported.&quot;</span><span class="p">)</span>
+</span><span id="Generator.column_sql-734"><a href="#Generator.column_sql-734"><span class="linenos">734</span></a>
+</span><span id="Generator.column_sql-735"><a href="#Generator.column_sql-735"><span class="linenos">735</span></a> <span class="n">column</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.column_sql-736"><a href="#Generator.column_sql-736"><span class="linenos">736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="Generator.column_sql-737"><a href="#Generator.column_sql-737"><span class="linenos">737</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator.column_sql-738"><a href="#Generator.column_sql-738"><span class="linenos">738</span></a> <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;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator.column_sql-739"><a href="#Generator.column_sql-739"><span class="linenos">739</span></a> <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;db&quot;</span><span class="p">),</span>
+</span><span id="Generator.column_sql-740"><a href="#Generator.column_sql-740"><span class="linenos">740</span></a> <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="Generator.column_sql-741"><a href="#Generator.column_sql-741"><span class="linenos">741</span></a> <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;this&quot;</span><span class="p">),</span>
+</span><span id="Generator.column_sql-742"><a href="#Generator.column_sql-742"><span class="linenos">742</span></a> <span class="p">)</span>
+</span><span id="Generator.column_sql-743"><a href="#Generator.column_sql-743"><span class="linenos">743</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="Generator.column_sql-744"><a href="#Generator.column_sql-744"><span class="linenos">744</span></a> <span class="p">)</span>
+</span><span id="Generator.column_sql-745"><a href="#Generator.column_sql-745"><span class="linenos">745</span></a>
+</span><span id="Generator.column_sql-746"><a href="#Generator.column_sql-746"><span class="linenos">746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}{</span><span class="n">join_mark</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9633,11 +9676,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.columnposition_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnposition_sql-744"><a href="#Generator.columnposition_sql-744"><span class="linenos">744</span></a> <span class="k">def</span> <span class="nf">columnposition_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">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.columnposition_sql-745"><a href="#Generator.columnposition_sql-745"><span class="linenos">745</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.columnposition_sql-746"><a href="#Generator.columnposition_sql-746"><span class="linenos">746</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columnposition_sql-747"><a href="#Generator.columnposition_sql-747"><span class="linenos">747</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator.columnposition_sql-748"><a href="#Generator.columnposition_sql-748"><span class="linenos">748</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnposition_sql-748"><a href="#Generator.columnposition_sql-748"><span class="linenos">748</span></a> <span class="k">def</span> <span class="nf">columnposition_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">ColumnPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.columnposition_sql-749"><a href="#Generator.columnposition_sql-749"><span class="linenos">749</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.columnposition_sql-750"><a href="#Generator.columnposition_sql-750"><span class="linenos">750</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columnposition_sql-751"><a href="#Generator.columnposition_sql-751"><span class="linenos">751</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator.columnposition_sql-752"><a href="#Generator.columnposition_sql-752"><span class="linenos">752</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">position</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9655,20 +9698,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.columndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columndef_sql-750"><a href="#Generator.columndef_sql-750"><span class="linenos">750</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.columndef_sql-751"><a href="#Generator.columndef_sql-751"><span class="linenos">751</span></a> <span class="n">column</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="Generator.columndef_sql-752"><a href="#Generator.columndef_sql-752"><span class="linenos">752</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.columndef_sql-753"><a href="#Generator.columndef_sql-753"><span class="linenos">753</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.columndef_sql-754"><a href="#Generator.columndef_sql-754"><span class="linenos">754</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-755"><a href="#Generator.columndef_sql-755"><span class="linenos">755</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-756"><a href="#Generator.columndef_sql-756"><span class="linenos">756</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-757"><a href="#Generator.columndef_sql-757"><span class="linenos">757</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator.columndef_sql-758"><a href="#Generator.columndef_sql-758"><span class="linenos">758</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-759"><a href="#Generator.columndef_sql-759"><span class="linenos">759</span></a>
-</span><span id="Generator.columndef_sql-760"><a href="#Generator.columndef_sql-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPUTED_COLUMN_WITH_TYPE</span><span class="p">:</span>
-</span><span id="Generator.columndef_sql-761"><a href="#Generator.columndef_sql-761"><span class="linenos">761</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.columndef_sql-762"><a href="#Generator.columndef_sql-762"><span class="linenos">762</span></a>
-</span><span id="Generator.columndef_sql-763"><a href="#Generator.columndef_sql-763"><span class="linenos">763</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columndef_sql-754"><a href="#Generator.columndef_sql-754"><span class="linenos">754</span></a> <span class="k">def</span> <span class="nf">columndef_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">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.columndef_sql-755"><a href="#Generator.columndef_sql-755"><span class="linenos">755</span></a> <span class="n">column</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="Generator.columndef_sql-756"><a href="#Generator.columndef_sql-756"><span class="linenos">756</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.columndef_sql-757"><a href="#Generator.columndef_sql-757"><span class="linenos">757</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;constraints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.columndef_sql-758"><a href="#Generator.columndef_sql-758"><span class="linenos">758</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot;IF NOT EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-759"><a href="#Generator.columndef_sql-759"><span class="linenos">759</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-760"><a href="#Generator.columndef_sql-760"><span class="linenos">760</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">constraints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">constraints</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-761"><a href="#Generator.columndef_sql-761"><span class="linenos">761</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator.columndef_sql-762"><a href="#Generator.columndef_sql-762"><span class="linenos">762</span></a> <span class="n">position</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">position</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-763"><a href="#Generator.columndef_sql-763"><span class="linenos">763</span></a>
+</span><span id="Generator.columndef_sql-764"><a href="#Generator.columndef_sql-764"><span class="linenos">764</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPUTED_COLUMN_WITH_TYPE</span><span class="p">:</span>
+</span><span id="Generator.columndef_sql-765"><a href="#Generator.columndef_sql-765"><span class="linenos">765</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.columndef_sql-766"><a href="#Generator.columndef_sql-766"><span class="linenos">766</span></a>
+</span><span id="Generator.columndef_sql-767"><a href="#Generator.columndef_sql-767"><span class="linenos">767</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">column</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">position</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9686,10 +9729,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.columnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnconstraint_sql-765"><a href="#Generator.columnconstraint_sql-765"><span class="linenos">765</span></a> <span class="k">def</span> <span class="nf">columnconstraint_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">ColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.columnconstraint_sql-766"><a href="#Generator.columnconstraint_sql-766"><span class="linenos">766</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.columnconstraint_sql-767"><a href="#Generator.columnconstraint_sql-767"><span class="linenos">767</span></a> <span class="n">kind_sql</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator.columnconstraint_sql-768"><a href="#Generator.columnconstraint_sql-768"><span class="linenos">768</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">kind_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnconstraint_sql-769"><a href="#Generator.columnconstraint_sql-769"><span class="linenos">769</span></a> <span class="k">def</span> <span class="nf">columnconstraint_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">ColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.columnconstraint_sql-770"><a href="#Generator.columnconstraint_sql-770"><span class="linenos">770</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.columnconstraint_sql-771"><a href="#Generator.columnconstraint_sql-771"><span class="linenos">771</span></a> <span class="n">kind_sql</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;kind&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator.columnconstraint_sql-772"><a href="#Generator.columnconstraint_sql-772"><span class="linenos">772</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">kind_sql</span>
</span></pre></div>
@@ -9707,15 +9750,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.computedcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.computedcolumnconstraint_sql-770"><a href="#Generator.computedcolumnconstraint_sql-770"><span class="linenos">770</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_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">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.computedcolumnconstraint_sql-771"><a href="#Generator.computedcolumnconstraint_sql-771"><span class="linenos">771</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.computedcolumnconstraint_sql-772"><a href="#Generator.computedcolumnconstraint_sql-772"><span class="linenos">772</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
-</span><span id="Generator.computedcolumnconstraint_sql-773"><a href="#Generator.computedcolumnconstraint_sql-773"><span class="linenos">773</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
-</span><span id="Generator.computedcolumnconstraint_sql-774"><a href="#Generator.computedcolumnconstraint_sql-774"><span class="linenos">774</span></a> <span class="k">elif</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;persisted&quot;</span><span class="p">):</span>
-</span><span id="Generator.computedcolumnconstraint_sql-775"><a href="#Generator.computedcolumnconstraint_sql-775"><span class="linenos">775</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
-</span><span id="Generator.computedcolumnconstraint_sql-776"><a href="#Generator.computedcolumnconstraint_sql-776"><span class="linenos">776</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.computedcolumnconstraint_sql-777"><a href="#Generator.computedcolumnconstraint_sql-777"><span class="linenos">777</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.computedcolumnconstraint_sql-778"><a href="#Generator.computedcolumnconstraint_sql-778"><span class="linenos">778</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.computedcolumnconstraint_sql-774"><a href="#Generator.computedcolumnconstraint_sql-774"><span class="linenos">774</span></a> <span class="k">def</span> <span class="nf">computedcolumnconstraint_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">ComputedColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.computedcolumnconstraint_sql-775"><a href="#Generator.computedcolumnconstraint_sql-775"><span class="linenos">775</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.computedcolumnconstraint_sql-776"><a href="#Generator.computedcolumnconstraint_sql-776"><span class="linenos">776</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;not_null&quot;</span><span class="p">):</span>
+</span><span id="Generator.computedcolumnconstraint_sql-777"><a href="#Generator.computedcolumnconstraint_sql-777"><span class="linenos">777</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED NOT NULL&quot;</span>
+</span><span id="Generator.computedcolumnconstraint_sql-778"><a href="#Generator.computedcolumnconstraint_sql-778"><span class="linenos">778</span></a> <span class="k">elif</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;persisted&quot;</span><span class="p">):</span>
+</span><span id="Generator.computedcolumnconstraint_sql-779"><a href="#Generator.computedcolumnconstraint_sql-779"><span class="linenos">779</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot; PERSISTED&quot;</span>
+</span><span id="Generator.computedcolumnconstraint_sql-780"><a href="#Generator.computedcolumnconstraint_sql-780"><span class="linenos">780</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.computedcolumnconstraint_sql-781"><a href="#Generator.computedcolumnconstraint_sql-781"><span class="linenos">781</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.computedcolumnconstraint_sql-782"><a href="#Generator.computedcolumnconstraint_sql-782"><span class="linenos">782</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">persisted</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9733,8 +9776,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.autoincrementcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.autoincrementcolumnconstraint_sql-780"><a href="#Generator.autoincrementcolumnconstraint_sql-780"><span class="linenos">780</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.autoincrementcolumnconstraint_sql-781"><a href="#Generator.autoincrementcolumnconstraint_sql-781"><span class="linenos">781</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.autoincrementcolumnconstraint_sql-784"><a href="#Generator.autoincrementcolumnconstraint_sql-784"><span class="linenos">784</span></a> <span class="k">def</span> <span class="nf">autoincrementcolumnconstraint_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.autoincrementcolumnconstraint_sql-785"><a href="#Generator.autoincrementcolumnconstraint_sql-785"><span class="linenos">785</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">token_sql</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">)</span>
</span></pre></div>
@@ -9752,13 +9795,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.compresscolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.compresscolumnconstraint_sql-783"><a href="#Generator.compresscolumnconstraint_sql-783"><span class="linenos">783</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_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">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.compresscolumnconstraint_sql-784"><a href="#Generator.compresscolumnconstraint_sql-784"><span class="linenos">784</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator.compresscolumnconstraint_sql-785"><a href="#Generator.compresscolumnconstraint_sql-785"><span class="linenos">785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Generator.compresscolumnconstraint_sql-786"><a href="#Generator.compresscolumnconstraint_sql-786"><span class="linenos">786</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.compresscolumnconstraint_sql-787"><a href="#Generator.compresscolumnconstraint_sql-787"><span class="linenos">787</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.compresscolumnconstraint_sql-788"><a href="#Generator.compresscolumnconstraint_sql-788"><span class="linenos">788</span></a>
-</span><span id="Generator.compresscolumnconstraint_sql-789"><a href="#Generator.compresscolumnconstraint_sql-789"><span class="linenos">789</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.compresscolumnconstraint_sql-787"><a href="#Generator.compresscolumnconstraint_sql-787"><span class="linenos">787</span></a> <span class="k">def</span> <span class="nf">compresscolumnconstraint_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">CompressColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.compresscolumnconstraint_sql-788"><a href="#Generator.compresscolumnconstraint_sql-788"><span class="linenos">788</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator.compresscolumnconstraint_sql-789"><a href="#Generator.compresscolumnconstraint_sql-789"><span class="linenos">789</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Generator.compresscolumnconstraint_sql-790"><a href="#Generator.compresscolumnconstraint_sql-790"><span class="linenos">790</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.compresscolumnconstraint_sql-791"><a href="#Generator.compresscolumnconstraint_sql-791"><span class="linenos">791</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.compresscolumnconstraint_sql-792"><a href="#Generator.compresscolumnconstraint_sql-792"><span class="linenos">792</span></a>
+</span><span id="Generator.compresscolumnconstraint_sql-793"><a href="#Generator.compresscolumnconstraint_sql-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMPRESS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9776,38 +9819,38 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.generatedasidentitycolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generatedasidentitycolumnconstraint_sql-791"><a href="#Generator.generatedasidentitycolumnconstraint_sql-791"><span class="linenos">791</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-792"><a href="#Generator.generatedasidentitycolumnconstraint_sql-792"><span class="linenos">792</span></a> <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">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-793"><a href="#Generator.generatedasidentitycolumnconstraint_sql-793"><span class="linenos">793</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-794"><a href="#Generator.generatedasidentitycolumnconstraint_sql-794"><span class="linenos">794</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-795"><a href="#Generator.generatedasidentitycolumnconstraint_sql-795"><span class="linenos">795</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-796"><a href="#Generator.generatedasidentitycolumnconstraint_sql-796"><span class="linenos">796</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-797"><a href="#Generator.generatedasidentitycolumnconstraint_sql-797"><span class="linenos">797</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-798"><a href="#Generator.generatedasidentitycolumnconstraint_sql-798"><span class="linenos">798</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-799"><a href="#Generator.generatedasidentitycolumnconstraint_sql-799"><span class="linenos">799</span></a> <span class="n">start</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;start&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-800"><a href="#Generator.generatedasidentitycolumnconstraint_sql-800"><span class="linenos">800</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-801"><a href="#Generator.generatedasidentitycolumnconstraint_sql-801"><span class="linenos">801</span></a> <span class="n">increment</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;increment&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-802"><a href="#Generator.generatedasidentitycolumnconstraint_sql-802"><span class="linenos">802</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-803"><a href="#Generator.generatedasidentitycolumnconstraint_sql-803"><span class="linenos">803</span></a> <span class="n">minvalue</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;minvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-804"><a href="#Generator.generatedasidentitycolumnconstraint_sql-804"><span class="linenos">804</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-805"><a href="#Generator.generatedasidentitycolumnconstraint_sql-805"><span class="linenos">805</span></a> <span class="n">maxvalue</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;maxvalue&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-806"><a href="#Generator.generatedasidentitycolumnconstraint_sql-806"><span class="linenos">806</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-807"><a href="#Generator.generatedasidentitycolumnconstraint_sql-807"><span class="linenos">807</span></a> <span class="n">cycle</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;cycle&quot;</span><span class="p">)</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-808"><a href="#Generator.generatedasidentitycolumnconstraint_sql-808"><span class="linenos">808</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-809"><a href="#Generator.generatedasidentitycolumnconstraint_sql-809"><span class="linenos">809</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-810"><a href="#Generator.generatedasidentitycolumnconstraint_sql-810"><span class="linenos">810</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-811"><a href="#Generator.generatedasidentitycolumnconstraint_sql-811"><span class="linenos">811</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-812"><a href="#Generator.generatedasidentitycolumnconstraint_sql-812"><span class="linenos">812</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generatedasidentitycolumnconstraint_sql-795"><a href="#Generator.generatedasidentitycolumnconstraint_sql-795"><span class="linenos">795</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-796"><a href="#Generator.generatedasidentitycolumnconstraint_sql-796"><span class="linenos">796</span></a> <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">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-797"><a href="#Generator.generatedasidentitycolumnconstraint_sql-797"><span class="linenos">797</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-798"><a href="#Generator.generatedasidentitycolumnconstraint_sql-798"><span class="linenos">798</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-799"><a href="#Generator.generatedasidentitycolumnconstraint_sql-799"><span class="linenos">799</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-800"><a href="#Generator.generatedasidentitycolumnconstraint_sql-800"><span class="linenos">800</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="s2">&quot; ON NULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on_null&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-801"><a href="#Generator.generatedasidentitycolumnconstraint_sql-801"><span class="linenos">801</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; ALWAYS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; BY DEFAULT</span><span class="si">{</span><span class="n">on_null</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-802"><a href="#Generator.generatedasidentitycolumnconstraint_sql-802"><span class="linenos">802</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-803"><a href="#Generator.generatedasidentitycolumnconstraint_sql-803"><span class="linenos">803</span></a> <span class="n">start</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;start&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-804"><a href="#Generator.generatedasidentitycolumnconstraint_sql-804"><span class="linenos">804</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-805"><a href="#Generator.generatedasidentitycolumnconstraint_sql-805"><span class="linenos">805</span></a> <span class="n">increment</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;increment&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-806"><a href="#Generator.generatedasidentitycolumnconstraint_sql-806"><span class="linenos">806</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT BY </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">increment</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-807"><a href="#Generator.generatedasidentitycolumnconstraint_sql-807"><span class="linenos">807</span></a> <span class="n">minvalue</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;minvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-808"><a href="#Generator.generatedasidentitycolumnconstraint_sql-808"><span class="linenos">808</span></a> <span class="n">minvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MINVALUE </span><span class="si">{</span><span class="n">minvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">minvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-809"><a href="#Generator.generatedasidentitycolumnconstraint_sql-809"><span class="linenos">809</span></a> <span class="n">maxvalue</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;maxvalue&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-810"><a href="#Generator.generatedasidentitycolumnconstraint_sql-810"><span class="linenos">810</span></a> <span class="n">maxvalue</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAXVALUE </span><span class="si">{</span><span class="n">maxvalue</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">maxvalue</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-811"><a href="#Generator.generatedasidentitycolumnconstraint_sql-811"><span class="linenos">811</span></a> <span class="n">cycle</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;cycle&quot;</span><span class="p">)</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-812"><a href="#Generator.generatedasidentitycolumnconstraint_sql-812"><span class="linenos">812</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator.generatedasidentitycolumnconstraint_sql-813"><a href="#Generator.generatedasidentitycolumnconstraint_sql-813"><span class="linenos">813</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-814"><a href="#Generator.generatedasidentitycolumnconstraint_sql-814"><span class="linenos">814</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-815"><a href="#Generator.generatedasidentitycolumnconstraint_sql-815"><span class="linenos">815</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-816"><a href="#Generator.generatedasidentitycolumnconstraint_sql-816"><span class="linenos">816</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-817"><a href="#Generator.generatedasidentitycolumnconstraint_sql-817"><span class="linenos">817</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-818"><a href="#Generator.generatedasidentitycolumnconstraint_sql-818"><span class="linenos">818</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-819"><a href="#Generator.generatedasidentitycolumnconstraint_sql-819"><span class="linenos">819</span></a> <span class="n">expr</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="Generator.generatedasidentitycolumnconstraint_sql-820"><a href="#Generator.generatedasidentitycolumnconstraint_sql-820"><span class="linenos">820</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-821"><a href="#Generator.generatedasidentitycolumnconstraint_sql-821"><span class="linenos">821</span></a>
-</span><span id="Generator.generatedasidentitycolumnconstraint_sql-822"><a href="#Generator.generatedasidentitycolumnconstraint_sql-822"><span class="linenos">822</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-814"><a href="#Generator.generatedasidentitycolumnconstraint_sql-814"><span class="linenos">814</span></a> <span class="k">if</span> <span class="n">cycle</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-815"><a href="#Generator.generatedasidentitycolumnconstraint_sql-815"><span class="linenos">815</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39; NO&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">cycle</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2"> CYCLE&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-816"><a href="#Generator.generatedasidentitycolumnconstraint_sql-816"><span class="linenos">816</span></a> <span class="n">cycle_sql</span> <span class="o">=</span> <span class="n">cycle_sql</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span> <span class="k">else</span> <span class="n">cycle_sql</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-817"><a href="#Generator.generatedasidentitycolumnconstraint_sql-817"><span class="linenos">817</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-818"><a href="#Generator.generatedasidentitycolumnconstraint_sql-818"><span class="linenos">818</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-819"><a href="#Generator.generatedasidentitycolumnconstraint_sql-819"><span class="linenos">819</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">increment</span> <span class="ow">or</span> <span class="n">cycle_sql</span><span class="p">:</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-820"><a href="#Generator.generatedasidentitycolumnconstraint_sql-820"><span class="linenos">820</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">increment</span><span class="si">}{</span><span class="n">minvalue</span><span class="si">}{</span><span class="n">maxvalue</span><span class="si">}{</span><span class="n">cycle_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-821"><a href="#Generator.generatedasidentitycolumnconstraint_sql-821"><span class="linenos">821</span></a> <span class="n">sequence_opts</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">sequence_opts</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-822"><a href="#Generator.generatedasidentitycolumnconstraint_sql-822"><span class="linenos">822</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-823"><a href="#Generator.generatedasidentitycolumnconstraint_sql-823"><span class="linenos">823</span></a> <span class="n">expr</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="Generator.generatedasidentitycolumnconstraint_sql-824"><a href="#Generator.generatedasidentitycolumnconstraint_sql-824"><span class="linenos">824</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="s2">&quot;IDENTITY&quot;</span>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-825"><a href="#Generator.generatedasidentitycolumnconstraint_sql-825"><span class="linenos">825</span></a>
+</span><span id="Generator.generatedasidentitycolumnconstraint_sql-826"><a href="#Generator.generatedasidentitycolumnconstraint_sql-826"><span class="linenos">826</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">expr</span><span class="si">}{</span><span class="n">sequence_opts</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9825,12 +9868,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.generatedasrowcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generatedasrowcolumnconstraint_sql-824"><a href="#Generator.generatedasrowcolumnconstraint_sql-824"><span class="linenos">824</span></a> <span class="k">def</span> <span class="nf">generatedasrowcolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator.generatedasrowcolumnconstraint_sql-825"><a href="#Generator.generatedasrowcolumnconstraint_sql-825"><span class="linenos">825</span></a> <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">GeneratedAsRowColumnConstraint</span>
-</span><span id="Generator.generatedasrowcolumnconstraint_sql-826"><a href="#Generator.generatedasrowcolumnconstraint_sql-826"><span class="linenos">826</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.generatedasrowcolumnconstraint_sql-827"><a href="#Generator.generatedasrowcolumnconstraint_sql-827"><span class="linenos">827</span></a> <span class="n">start</span> <span class="o">=</span> <span class="s2">&quot;START&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;END&quot;</span>
-</span><span id="Generator.generatedasrowcolumnconstraint_sql-828"><a href="#Generator.generatedasrowcolumnconstraint_sql-828"><span class="linenos">828</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="s2">&quot; HIDDEN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hidden&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.generatedasrowcolumnconstraint_sql-829"><a href="#Generator.generatedasrowcolumnconstraint_sql-829"><span class="linenos">829</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED ALWAYS AS ROW </span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">hidden</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.generatedasrowcolumnconstraint_sql-828"><a href="#Generator.generatedasrowcolumnconstraint_sql-828"><span class="linenos">828</span></a> <span class="k">def</span> <span class="nf">generatedasrowcolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator.generatedasrowcolumnconstraint_sql-829"><a href="#Generator.generatedasrowcolumnconstraint_sql-829"><span class="linenos">829</span></a> <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">GeneratedAsRowColumnConstraint</span>
+</span><span id="Generator.generatedasrowcolumnconstraint_sql-830"><a href="#Generator.generatedasrowcolumnconstraint_sql-830"><span class="linenos">830</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.generatedasrowcolumnconstraint_sql-831"><a href="#Generator.generatedasrowcolumnconstraint_sql-831"><span class="linenos">831</span></a> <span class="n">start</span> <span class="o">=</span> <span class="s2">&quot;START&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;END&quot;</span>
+</span><span id="Generator.generatedasrowcolumnconstraint_sql-832"><a href="#Generator.generatedasrowcolumnconstraint_sql-832"><span class="linenos">832</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="s2">&quot; HIDDEN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;hidden&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.generatedasrowcolumnconstraint_sql-833"><a href="#Generator.generatedasrowcolumnconstraint_sql-833"><span class="linenos">833</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GENERATED ALWAYS AS ROW </span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">hidden</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9848,10 +9891,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.periodforsystemtimeconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.periodforsystemtimeconstraint_sql-831"><a href="#Generator.periodforsystemtimeconstraint_sql-831"><span class="linenos">831</span></a> <span class="k">def</span> <span class="nf">periodforsystemtimeconstraint_sql</span><span class="p">(</span>
-</span><span id="Generator.periodforsystemtimeconstraint_sql-832"><a href="#Generator.periodforsystemtimeconstraint_sql-832"><span class="linenos">832</span></a> <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">PeriodForSystemTimeConstraint</span>
-</span><span id="Generator.periodforsystemtimeconstraint_sql-833"><a href="#Generator.periodforsystemtimeconstraint_sql-833"><span class="linenos">833</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.periodforsystemtimeconstraint_sql-834"><a href="#Generator.periodforsystemtimeconstraint_sql-834"><span class="linenos">834</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PERIOD FOR SYSTEM_TIME (</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.periodforsystemtimeconstraint_sql-835"><a href="#Generator.periodforsystemtimeconstraint_sql-835"><span class="linenos">835</span></a> <span class="k">def</span> <span class="nf">periodforsystemtimeconstraint_sql</span><span class="p">(</span>
+</span><span id="Generator.periodforsystemtimeconstraint_sql-836"><a href="#Generator.periodforsystemtimeconstraint_sql-836"><span class="linenos">836</span></a> <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">PeriodForSystemTimeConstraint</span>
+</span><span id="Generator.periodforsystemtimeconstraint_sql-837"><a href="#Generator.periodforsystemtimeconstraint_sql-837"><span class="linenos">837</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.periodforsystemtimeconstraint_sql-838"><a href="#Generator.periodforsystemtimeconstraint_sql-838"><span class="linenos">838</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PERIOD FOR SYSTEM_TIME (</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -9869,8 +9912,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.notnullcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.notnullcolumnconstraint_sql-836"><a href="#Generator.notnullcolumnconstraint_sql-836"><span class="linenos">836</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_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">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.notnullcolumnconstraint_sql-837"><a href="#Generator.notnullcolumnconstraint_sql-837"><span class="linenos">837</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.notnullcolumnconstraint_sql-840"><a href="#Generator.notnullcolumnconstraint_sql-840"><span class="linenos">840</span></a> <span class="k">def</span> <span class="nf">notnullcolumnconstraint_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">NotNullColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.notnullcolumnconstraint_sql-841"><a href="#Generator.notnullcolumnconstraint_sql-841"><span class="linenos">841</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;allow_null&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;NOT &#39;</span><span class="si">}</span><span class="s2">NULL&quot;</span>
</span></pre></div>
@@ -9888,8 +9931,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.transformcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.transformcolumnconstraint_sql-839"><a href="#Generator.transformcolumnconstraint_sql-839"><span class="linenos">839</span></a> <span class="k">def</span> <span class="nf">transformcolumnconstraint_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">TransformColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.transformcolumnconstraint_sql-840"><a href="#Generator.transformcolumnconstraint_sql-840"><span class="linenos">840</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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="Generator.transformcolumnconstraint_sql-843"><a href="#Generator.transformcolumnconstraint_sql-843"><span class="linenos">843</span></a> <span class="k">def</span> <span class="nf">transformcolumnconstraint_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">TransformColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.transformcolumnconstraint_sql-844"><a href="#Generator.transformcolumnconstraint_sql-844"><span class="linenos">844</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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>
@@ -9907,11 +9950,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.primarykeycolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykeycolumnconstraint_sql-842"><a href="#Generator.primarykeycolumnconstraint_sql-842"><span class="linenos">842</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_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">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-843"><a href="#Generator.primarykeycolumnconstraint_sql-843"><span class="linenos">843</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-844"><a href="#Generator.primarykeycolumnconstraint_sql-844"><span class="linenos">844</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-845"><a href="#Generator.primarykeycolumnconstraint_sql-845"><span class="linenos">845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.primarykeycolumnconstraint_sql-846"><a href="#Generator.primarykeycolumnconstraint_sql-846"><span class="linenos">846</span></a> <span class="k">return</span> <span class="s2">&quot;PRIMARY KEY&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykeycolumnconstraint_sql-846"><a href="#Generator.primarykeycolumnconstraint_sql-846"><span class="linenos">846</span></a> <span class="k">def</span> <span class="nf">primarykeycolumnconstraint_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">PrimaryKeyColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-847"><a href="#Generator.primarykeycolumnconstraint_sql-847"><span class="linenos">847</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-848"><a href="#Generator.primarykeycolumnconstraint_sql-848"><span class="linenos">848</span></a> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-849"><a href="#Generator.primarykeycolumnconstraint_sql-849"><span class="linenos">849</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY</span><span class="si">{</span><span class="s1">&#39; DESC&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">desc</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ASC&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.primarykeycolumnconstraint_sql-850"><a href="#Generator.primarykeycolumnconstraint_sql-850"><span class="linenos">850</span></a> <span class="k">return</span> <span class="s2">&quot;PRIMARY KEY&quot;</span>
</span></pre></div>
@@ -9929,12 +9972,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.uniquecolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uniquecolumnconstraint_sql-848"><a href="#Generator.uniquecolumnconstraint_sql-848"><span class="linenos">848</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_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">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-849"><a href="#Generator.uniquecolumnconstraint_sql-849"><span class="linenos">849</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-850"><a href="#Generator.uniquecolumnconstraint_sql-850"><span class="linenos">850</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-851"><a href="#Generator.uniquecolumnconstraint_sql-851"><span class="linenos">851</span></a> <span class="n">index_type</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;index_type&quot;</span><span class="p">)</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-852"><a href="#Generator.uniquecolumnconstraint_sql-852"><span class="linenos">852</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.uniquecolumnconstraint_sql-853"><a href="#Generator.uniquecolumnconstraint_sql-853"><span class="linenos">853</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.uniquecolumnconstraint_sql-852"><a href="#Generator.uniquecolumnconstraint_sql-852"><span class="linenos">852</span></a> <span class="k">def</span> <span class="nf">uniquecolumnconstraint_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">UniqueColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-853"><a href="#Generator.uniquecolumnconstraint_sql-853"><span class="linenos">853</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-854"><a href="#Generator.uniquecolumnconstraint_sql-854"><span class="linenos">854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-855"><a href="#Generator.uniquecolumnconstraint_sql-855"><span class="linenos">855</span></a> <span class="n">index_type</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;index_type&quot;</span><span class="p">)</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-856"><a href="#Generator.uniquecolumnconstraint_sql-856"><span class="linenos">856</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.uniquecolumnconstraint_sql-857"><a href="#Generator.uniquecolumnconstraint_sql-857"><span class="linenos">857</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNIQUE</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -9952,8 +9995,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.createable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.createable_sql-855"><a href="#Generator.createable_sql-855"><span class="linenos">855</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.createable_sql-856"><a href="#Generator.createable_sql-856"><span class="linenos">856</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.createable_sql-859"><a href="#Generator.createable_sql-859"><span class="linenos">859</span></a> <span class="k">def</span> <span class="nf">createable_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">Create</span><span class="p">,</span> <span class="n">locations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.createable_sql-860"><a href="#Generator.createable_sql-860"><span class="linenos">860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -9971,92 +10014,92 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.create_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.create_sql-858"><a href="#Generator.create_sql-858"><span class="linenos">858</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.create_sql-859"><a href="#Generator.create_sql-859"><span class="linenos">859</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-860"><a href="#Generator.create_sql-860"><span class="linenos">860</span></a> <span class="n">properties</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;properties&quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-861"><a href="#Generator.create_sql-861"><span class="linenos">861</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
-</span><span id="Generator.create_sql-862"><a href="#Generator.create_sql-862"><span class="linenos">862</span></a>
-</span><span id="Generator.create_sql-863"><a href="#Generator.create_sql-863"><span class="linenos">863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
-</span><span id="Generator.create_sql-864"><a href="#Generator.create_sql-864"><span class="linenos">864</span></a>
-</span><span id="Generator.create_sql-865"><a href="#Generator.create_sql-865"><span class="linenos">865</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-866"><a href="#Generator.create_sql-866"><span class="linenos">866</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
-</span><span id="Generator.create_sql-867"><a href="#Generator.create_sql-867"><span class="linenos">867</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
-</span><span id="Generator.create_sql-868"><a href="#Generator.create_sql-868"><span class="linenos">868</span></a> <span class="p">):</span>
-</span><span id="Generator.create_sql-869"><a href="#Generator.create_sql-869"><span class="linenos">869</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.create_sql-870"><a href="#Generator.create_sql-870"><span class="linenos">870</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-871"><a href="#Generator.create_sql-871"><span class="linenos">871</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator.create_sql-872"><a href="#Generator.create_sql-872"><span class="linenos">872</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
-</span><span id="Generator.create_sql-873"><a href="#Generator.create_sql-873"><span class="linenos">873</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
-</span><span id="Generator.create_sql-874"><a href="#Generator.create_sql-874"><span class="linenos">874</span></a> <span class="p">]</span>
-</span><span id="Generator.create_sql-875"><a href="#Generator.create_sql-875"><span class="linenos">875</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-876"><a href="#Generator.create_sql-876"><span class="linenos">876</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-877"><a href="#Generator.create_sql-877"><span class="linenos">877</span></a>
-</span><span id="Generator.create_sql-878"><a href="#Generator.create_sql-878"><span class="linenos">878</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-879"><a href="#Generator.create_sql-879"><span class="linenos">879</span></a> <span class="n">end</span> <span class="o">=</span> <span class="s2">&quot; END&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;end&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-880"><a href="#Generator.create_sql-880"><span class="linenos">880</span></a>
-</span><span id="Generator.create_sql-881"><a href="#Generator.create_sql-881"><span class="linenos">881</span></a> <span class="n">expression_sql</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="Generator.create_sql-882"><a href="#Generator.create_sql-882"><span class="linenos">882</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
-</span><span id="Generator.create_sql-883"><a href="#Generator.create_sql-883"><span class="linenos">883</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</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="Generator.create_sql-862"><a href="#Generator.create_sql-862"><span class="linenos">862</span></a> <span class="k">def</span> <span class="nf">create_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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.create_sql-863"><a href="#Generator.create_sql-863"><span class="linenos">863</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-864"><a href="#Generator.create_sql-864"><span class="linenos">864</span></a> <span class="n">properties</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;properties&quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-865"><a href="#Generator.create_sql-865"><span class="linenos">865</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">locate_properties</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="n">defaultdict</span><span class="p">()</span>
+</span><span id="Generator.create_sql-866"><a href="#Generator.create_sql-866"><span class="linenos">866</span></a>
+</span><span id="Generator.create_sql-867"><a href="#Generator.create_sql-867"><span class="linenos">867</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">createable_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">properties_locs</span><span class="p">)</span>
+</span><span id="Generator.create_sql-868"><a href="#Generator.create_sql-868"><span class="linenos">868</span></a>
+</span><span id="Generator.create_sql-869"><a href="#Generator.create_sql-869"><span class="linenos">869</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-870"><a href="#Generator.create_sql-870"><span class="linenos">870</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">)</span> <span class="ow">or</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+</span><span id="Generator.create_sql-871"><a href="#Generator.create_sql-871"><span class="linenos">871</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span>
+</span><span id="Generator.create_sql-872"><a href="#Generator.create_sql-872"><span class="linenos">872</span></a> <span class="p">):</span>
+</span><span id="Generator.create_sql-873"><a href="#Generator.create_sql-873"><span class="linenos">873</span></a> <span class="n">properties_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.create_sql-874"><a href="#Generator.create_sql-874"><span class="linenos">874</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-875"><a href="#Generator.create_sql-875"><span class="linenos">875</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator.create_sql-876"><a href="#Generator.create_sql-876"><span class="linenos">876</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">],</span>
+</span><span id="Generator.create_sql-877"><a href="#Generator.create_sql-877"><span class="linenos">877</span></a> <span class="o">*</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">],</span>
+</span><span id="Generator.create_sql-878"><a href="#Generator.create_sql-878"><span class="linenos">878</span></a> <span class="p">]</span>
+</span><span id="Generator.create_sql-879"><a href="#Generator.create_sql-879"><span class="linenos">879</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-880"><a href="#Generator.create_sql-880"><span class="linenos">880</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-881"><a href="#Generator.create_sql-881"><span class="linenos">881</span></a>
+</span><span id="Generator.create_sql-882"><a href="#Generator.create_sql-882"><span class="linenos">882</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="s2">&quot; BEGIN&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;begin&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-883"><a href="#Generator.create_sql-883"><span class="linenos">883</span></a> <span class="n">end</span> <span class="o">=</span> <span class="s2">&quot; END&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;end&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator.create_sql-884"><a href="#Generator.create_sql-884"><span class="linenos">884</span></a>
-</span><span id="Generator.create_sql-885"><a href="#Generator.create_sql-885"><span class="linenos">885</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
-</span><span id="Generator.create_sql-886"><a href="#Generator.create_sql-886"><span class="linenos">886</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
-</span><span id="Generator.create_sql-887"><a href="#Generator.create_sql-887"><span class="linenos">887</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-888"><a href="#Generator.create_sql-888"><span class="linenos">888</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-889"><a href="#Generator.create_sql-889"><span class="linenos">889</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
-</span><span id="Generator.create_sql-890"><a href="#Generator.create_sql-890"><span class="linenos">890</span></a> <span class="p">),</span>
-</span><span id="Generator.create_sql-891"><a href="#Generator.create_sql-891"><span class="linenos">891</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.create_sql-892"><a href="#Generator.create_sql-892"><span class="linenos">892</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-893"><a href="#Generator.create_sql-893"><span class="linenos">893</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.create_sql-894"><a href="#Generator.create_sql-894"><span class="linenos">894</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.create_sql-895"><a href="#Generator.create_sql-895"><span class="linenos">895</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.create_sql-896"><a href="#Generator.create_sql-896"><span class="linenos">896</span></a>
-</span><span id="Generator.create_sql-897"><a href="#Generator.create_sql-897"><span class="linenos">897</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-898"><a href="#Generator.create_sql-898"><span class="linenos">898</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
-</span><span id="Generator.create_sql-899"><a href="#Generator.create_sql-899"><span class="linenos">899</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-900"><a href="#Generator.create_sql-900"><span class="linenos">900</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
-</span><span id="Generator.create_sql-901"><a href="#Generator.create_sql-901"><span class="linenos">901</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.create_sql-902"><a href="#Generator.create_sql-902"><span class="linenos">902</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-903"><a href="#Generator.create_sql-903"><span class="linenos">903</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-904"><a href="#Generator.create_sql-904"><span class="linenos">904</span></a>
-</span><span id="Generator.create_sql-905"><a href="#Generator.create_sql-905"><span class="linenos">905</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-906"><a href="#Generator.create_sql-906"><span class="linenos">906</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-907"><a href="#Generator.create_sql-907"><span class="linenos">907</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="Generator.create_sql-885"><a href="#Generator.create_sql-885"><span class="linenos">885</span></a> <span class="n">expression_sql</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="Generator.create_sql-886"><a href="#Generator.create_sql-886"><span class="linenos">886</span></a> <span class="k">if</span> <span class="n">expression_sql</span><span class="p">:</span>
+</span><span id="Generator.create_sql-887"><a href="#Generator.create_sql-887"><span class="linenos">887</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">begin</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-888"><a href="#Generator.create_sql-888"><span class="linenos">888</span></a>
+</span><span id="Generator.create_sql-889"><a href="#Generator.create_sql-889"><span class="linenos">889</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">):</span>
+</span><span id="Generator.create_sql-890"><a href="#Generator.create_sql-890"><span class="linenos">890</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">):</span>
+</span><span id="Generator.create_sql-891"><a href="#Generator.create_sql-891"><span class="linenos">891</span></a> <span class="n">postalias_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-892"><a href="#Generator.create_sql-892"><span class="linenos">892</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-893"><a href="#Generator.create_sql-893"><span class="linenos">893</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_ALIAS</span><span class="p">]</span>
+</span><span id="Generator.create_sql-894"><a href="#Generator.create_sql-894"><span class="linenos">894</span></a> <span class="p">),</span>
+</span><span id="Generator.create_sql-895"><a href="#Generator.create_sql-895"><span class="linenos">895</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-896"><a href="#Generator.create_sql-896"><span class="linenos">896</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-897"><a href="#Generator.create_sql-897"><span class="linenos">897</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">postalias_props_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-898"><a href="#Generator.create_sql-898"><span class="linenos">898</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.create_sql-899"><a href="#Generator.create_sql-899"><span class="linenos">899</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-900"><a href="#Generator.create_sql-900"><span class="linenos">900</span></a>
+</span><span id="Generator.create_sql-901"><a href="#Generator.create_sql-901"><span class="linenos">901</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-902"><a href="#Generator.create_sql-902"><span class="linenos">902</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">):</span>
+</span><span id="Generator.create_sql-903"><a href="#Generator.create_sql-903"><span class="linenos">903</span></a> <span class="n">postindex_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-904"><a href="#Generator.create_sql-904"><span class="linenos">904</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">]),</span>
+</span><span id="Generator.create_sql-905"><a href="#Generator.create_sql-905"><span class="linenos">905</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-906"><a href="#Generator.create_sql-906"><span class="linenos">906</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-907"><a href="#Generator.create_sql-907"><span class="linenos">907</span></a> <span class="p">)</span>
</span><span id="Generator.create_sql-908"><a href="#Generator.create_sql-908"><span class="linenos">908</span></a>
-</span><span id="Generator.create_sql-909"><a href="#Generator.create_sql-909"><span class="linenos">909</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-910"><a href="#Generator.create_sql-910"><span class="linenos">910</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-911"><a href="#Generator.create_sql-911"><span class="linenos">911</span></a>
-</span><span id="Generator.create_sql-912"><a href="#Generator.create_sql-912"><span class="linenos">912</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-913"><a href="#Generator.create_sql-913"><span class="linenos">913</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
-</span><span id="Generator.create_sql-914"><a href="#Generator.create_sql-914"><span class="linenos">914</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-915"><a href="#Generator.create_sql-915"><span class="linenos">915</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
-</span><span id="Generator.create_sql-916"><a href="#Generator.create_sql-916"><span class="linenos">916</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-917"><a href="#Generator.create_sql-917"><span class="linenos">917</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-918"><a href="#Generator.create_sql-918"><span class="linenos">918</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.create_sql-919"><a href="#Generator.create_sql-919"><span class="linenos">919</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-920"><a href="#Generator.create_sql-920"><span class="linenos">920</span></a>
-</span><span id="Generator.create_sql-921"><a href="#Generator.create_sql-921"><span class="linenos">921</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
-</span><span id="Generator.create_sql-922"><a href="#Generator.create_sql-922"><span class="linenos">922</span></a>
-</span><span id="Generator.create_sql-923"><a href="#Generator.create_sql-923"><span class="linenos">923</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-924"><a href="#Generator.create_sql-924"><span class="linenos">924</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
-</span><span id="Generator.create_sql-925"><a href="#Generator.create_sql-925"><span class="linenos">925</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-926"><a href="#Generator.create_sql-926"><span class="linenos">926</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
-</span><span id="Generator.create_sql-927"><a href="#Generator.create_sql-927"><span class="linenos">927</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
-</span><span id="Generator.create_sql-928"><a href="#Generator.create_sql-928"><span class="linenos">928</span></a> <span class="p">),</span>
-</span><span id="Generator.create_sql-929"><a href="#Generator.create_sql-929"><span class="linenos">929</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-930"><a href="#Generator.create_sql-930"><span class="linenos">930</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
-</span><span id="Generator.create_sql-931"><a href="#Generator.create_sql-931"><span class="linenos">931</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.create_sql-932"><a href="#Generator.create_sql-932"><span class="linenos">932</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-933"><a href="#Generator.create_sql-933"><span class="linenos">933</span></a>
-</span><span id="Generator.create_sql-934"><a href="#Generator.create_sql-934"><span class="linenos">934</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-935"><a href="#Generator.create_sql-935"><span class="linenos">935</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.create_sql-936"><a href="#Generator.create_sql-936"><span class="linenos">936</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-937"><a href="#Generator.create_sql-937"><span class="linenos">937</span></a> <span class="p">)</span>
-</span><span id="Generator.create_sql-938"><a href="#Generator.create_sql-938"><span class="linenos">938</span></a>
-</span><span id="Generator.create_sql-939"><a href="#Generator.create_sql-939"><span class="linenos">939</span></a> <span class="n">clone</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;clone&quot;</span><span class="p">)</span>
-</span><span id="Generator.create_sql-940"><a href="#Generator.create_sql-940"><span class="linenos">940</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.create_sql-941"><a href="#Generator.create_sql-941"><span class="linenos">941</span></a>
-</span><span id="Generator.create_sql-942"><a href="#Generator.create_sql-942"><span class="linenos">942</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.create_sql-943"><a href="#Generator.create_sql-943"><span class="linenos">943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
+</span><span id="Generator.create_sql-909"><a href="#Generator.create_sql-909"><span class="linenos">909</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;indexes&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-910"><a href="#Generator.create_sql-910"><span class="linenos">910</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">indexes</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">indexes</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-911"><a href="#Generator.create_sql-911"><span class="linenos">911</span></a> <span class="n">index_sql</span> <span class="o">=</span> <span class="n">indexes</span> <span class="o">+</span> <span class="n">postindex_props_sql</span>
+</span><span id="Generator.create_sql-912"><a href="#Generator.create_sql-912"><span class="linenos">912</span></a>
+</span><span id="Generator.create_sql-913"><a href="#Generator.create_sql-913"><span class="linenos">913</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="s2">&quot; OR REPLACE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;replace&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-914"><a href="#Generator.create_sql-914"><span class="linenos">914</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot; UNIQUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-915"><a href="#Generator.create_sql-915"><span class="linenos">915</span></a>
+</span><span id="Generator.create_sql-916"><a href="#Generator.create_sql-916"><span class="linenos">916</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-917"><a href="#Generator.create_sql-917"><span class="linenos">917</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">):</span>
+</span><span id="Generator.create_sql-918"><a href="#Generator.create_sql-918"><span class="linenos">918</span></a> <span class="n">postcreate_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-919"><a href="#Generator.create_sql-919"><span class="linenos">919</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">]),</span>
+</span><span id="Generator.create_sql-920"><a href="#Generator.create_sql-920"><span class="linenos">920</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-921"><a href="#Generator.create_sql-921"><span class="linenos">921</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-922"><a href="#Generator.create_sql-922"><span class="linenos">922</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-923"><a href="#Generator.create_sql-923"><span class="linenos">923</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-924"><a href="#Generator.create_sql-924"><span class="linenos">924</span></a>
+</span><span id="Generator.create_sql-925"><a href="#Generator.create_sql-925"><span class="linenos">925</span></a> <span class="n">modifiers</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">unique</span><span class="p">,</span> <span class="n">postcreate_props_sql</span><span class="p">))</span>
+</span><span id="Generator.create_sql-926"><a href="#Generator.create_sql-926"><span class="linenos">926</span></a>
+</span><span id="Generator.create_sql-927"><a href="#Generator.create_sql-927"><span class="linenos">927</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-928"><a href="#Generator.create_sql-928"><span class="linenos">928</span></a> <span class="k">if</span> <span class="n">properties_locs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">):</span>
+</span><span id="Generator.create_sql-929"><a href="#Generator.create_sql-929"><span class="linenos">929</span></a> <span class="n">postexpression_props_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-930"><a href="#Generator.create_sql-930"><span class="linenos">930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span>
+</span><span id="Generator.create_sql-931"><a href="#Generator.create_sql-931"><span class="linenos">931</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">properties_locs</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">]</span>
+</span><span id="Generator.create_sql-932"><a href="#Generator.create_sql-932"><span class="linenos">932</span></a> <span class="p">),</span>
+</span><span id="Generator.create_sql-933"><a href="#Generator.create_sql-933"><span class="linenos">933</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-934"><a href="#Generator.create_sql-934"><span class="linenos">934</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
+</span><span id="Generator.create_sql-935"><a href="#Generator.create_sql-935"><span class="linenos">935</span></a> <span class="n">wrapped</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.create_sql-936"><a href="#Generator.create_sql-936"><span class="linenos">936</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-937"><a href="#Generator.create_sql-937"><span class="linenos">937</span></a>
+</span><span id="Generator.create_sql-938"><a href="#Generator.create_sql-938"><span class="linenos">938</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF NOT EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-939"><a href="#Generator.create_sql-939"><span class="linenos">939</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.create_sql-940"><a href="#Generator.create_sql-940"><span class="linenos">940</span></a> <span class="s2">&quot; WITH NO SCHEMA BINDING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no_schema_binding&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-941"><a href="#Generator.create_sql-941"><span class="linenos">941</span></a> <span class="p">)</span>
+</span><span id="Generator.create_sql-942"><a href="#Generator.create_sql-942"><span class="linenos">942</span></a>
+</span><span id="Generator.create_sql-943"><a href="#Generator.create_sql-943"><span class="linenos">943</span></a> <span class="n">clone</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;clone&quot;</span><span class="p">)</span>
+</span><span id="Generator.create_sql-944"><a href="#Generator.create_sql-944"><span class="linenos">944</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">clone</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.create_sql-945"><a href="#Generator.create_sql-945"><span class="linenos">945</span></a>
+</span><span id="Generator.create_sql-946"><a href="#Generator.create_sql-946"><span class="linenos">946</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">modifiers</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">properties_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">postexpression_props_sql</span><span class="si">}{</span><span class="n">index_sql</span><span class="si">}{</span><span class="n">no_schema_binding</span><span class="si">}{</span><span class="n">clone</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.create_sql-947"><a href="#Generator.create_sql-947"><span class="linenos">947</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_sql</span><span class="p">)</span>
</span></pre></div>
@@ -10074,11 +10117,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.clone_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clone_sql-945"><a href="#Generator.clone_sql-945"><span class="linenos">945</span></a> <span class="k">def</span> <span class="nf">clone_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">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.clone_sql-946"><a href="#Generator.clone_sql-946"><span class="linenos">946</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.clone_sql-947"><a href="#Generator.clone_sql-947"><span class="linenos">947</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.clone_sql-948"><a href="#Generator.clone_sql-948"><span class="linenos">948</span></a> <span class="n">keyword</span> <span class="o">=</span> <span class="s2">&quot;COPY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_COPY</span> <span class="k">else</span> <span class="s2">&quot;CLONE&quot;</span>
-</span><span id="Generator.clone_sql-949"><a href="#Generator.clone_sql-949"><span class="linenos">949</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">shallow</span><span class="si">}{</span><span class="n">keyword</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clone_sql-949"><a href="#Generator.clone_sql-949"><span class="linenos">949</span></a> <span class="k">def</span> <span class="nf">clone_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">Clone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.clone_sql-950"><a href="#Generator.clone_sql-950"><span class="linenos">950</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.clone_sql-951"><a href="#Generator.clone_sql-951"><span class="linenos">951</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="s2">&quot;SHALLOW &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;shallow&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.clone_sql-952"><a href="#Generator.clone_sql-952"><span class="linenos">952</span></a> <span class="n">keyword</span> <span class="o">=</span> <span class="s2">&quot;COPY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;copy&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_COPY</span> <span class="k">else</span> <span class="s2">&quot;CLONE&quot;</span>
+</span><span id="Generator.clone_sql-953"><a href="#Generator.clone_sql-953"><span class="linenos">953</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">shallow</span><span class="si">}{</span><span class="n">keyword</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10096,9 +10139,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.describe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.describe_sql-951"><a href="#Generator.describe_sql-951"><span class="linenos">951</span></a> <span class="k">def</span> <span class="nf">describe_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">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.describe_sql-952"><a href="#Generator.describe_sql-952"><span class="linenos">952</span></a> <span class="n">extended</span> <span class="o">=</span> <span class="s2">&quot; EXTENDED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;extended&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.describe_sql-953"><a href="#Generator.describe_sql-953"><span class="linenos">953</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE</span><span class="si">{</span><span class="n">extended</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator.describe_sql-955"><a href="#Generator.describe_sql-955"><span class="linenos">955</span></a> <span class="k">def</span> <span class="nf">describe_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">Describe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.describe_sql-956"><a href="#Generator.describe_sql-956"><span class="linenos">956</span></a> <span class="n">extended</span> <span class="o">=</span> <span class="s2">&quot; EXTENDED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;extended&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.describe_sql-957"><a href="#Generator.describe_sql-957"><span class="linenos">957</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DESCRIBE</span><span class="si">{</span><span class="n">extended</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -10116,9 +10159,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.heredoc_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.heredoc_sql-955"><a href="#Generator.heredoc_sql-955"><span class="linenos">955</span></a> <span class="k">def</span> <span class="nf">heredoc_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">Heredoc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.heredoc_sql-956"><a href="#Generator.heredoc_sql-956"><span class="linenos">956</span></a> <span class="n">tag</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;tag&quot;</span><span class="p">)</span>
-</span><span id="Generator.heredoc_sql-957"><a href="#Generator.heredoc_sql-957"><span class="linenos">957</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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">$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.heredoc_sql-959"><a href="#Generator.heredoc_sql-959"><span class="linenos">959</span></a> <span class="k">def</span> <span class="nf">heredoc_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">Heredoc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.heredoc_sql-960"><a href="#Generator.heredoc_sql-960"><span class="linenos">960</span></a> <span class="n">tag</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;tag&quot;</span><span class="p">)</span>
+</span><span id="Generator.heredoc_sql-961"><a href="#Generator.heredoc_sql-961"><span class="linenos">961</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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">$</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">$&quot;</span>
</span></pre></div>
@@ -10136,11 +10179,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.prepend_ctes"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.prepend_ctes-959"><a href="#Generator.prepend_ctes-959"><span class="linenos">959</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.prepend_ctes-960"><a href="#Generator.prepend_ctes-960"><span class="linenos">960</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
-</span><span id="Generator.prepend_ctes-961"><a href="#Generator.prepend_ctes-961"><span class="linenos">961</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="Generator.prepend_ctes-962"><a href="#Generator.prepend_ctes-962"><span class="linenos">962</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.prepend_ctes-963"><a href="#Generator.prepend_ctes-963"><span class="linenos">963</span></a> <span class="k">return</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.prepend_ctes-963"><a href="#Generator.prepend_ctes-963"><span class="linenos">963</span></a> <span class="k">def</span> <span class="nf">prepend_ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.prepend_ctes-964"><a href="#Generator.prepend_ctes-964"><span class="linenos">964</span></a> <span class="n">with_</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;with&quot;</span><span class="p">)</span>
+</span><span id="Generator.prepend_ctes-965"><a href="#Generator.prepend_ctes-965"><span class="linenos">965</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="Generator.prepend_ctes-966"><a href="#Generator.prepend_ctes-966"><span class="linenos">966</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">with_</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.prepend_ctes-967"><a href="#Generator.prepend_ctes-967"><span class="linenos">967</span></a> <span class="k">return</span> <span class="n">sql</span>
</span></pre></div>
@@ -10158,15 +10201,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.with_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_sql-965"><a href="#Generator.with_sql-965"><span class="linenos">965</span></a> <span class="k">def</span> <span class="nf">with_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.with_sql-966"><a href="#Generator.with_sql-966"><span class="linenos">966</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.with_sql-967"><a href="#Generator.with_sql-967"><span class="linenos">967</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.with_sql-968"><a href="#Generator.with_sql-968"><span class="linenos">968</span></a> <span class="s2">&quot;RECURSIVE &quot;</span>
-</span><span id="Generator.with_sql-969"><a href="#Generator.with_sql-969"><span class="linenos">969</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CTE_RECURSIVE_KEYWORD_REQUIRED</span> <span class="ow">and</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;recursive&quot;</span><span class="p">)</span>
-</span><span id="Generator.with_sql-970"><a href="#Generator.with_sql-970"><span class="linenos">970</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.with_sql-971"><a href="#Generator.with_sql-971"><span class="linenos">971</span></a> <span class="p">)</span>
-</span><span id="Generator.with_sql-972"><a href="#Generator.with_sql-972"><span class="linenos">972</span></a>
-</span><span id="Generator.with_sql-973"><a href="#Generator.with_sql-973"><span class="linenos">973</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_sql-969"><a href="#Generator.with_sql-969"><span class="linenos">969</span></a> <span class="k">def</span> <span class="nf">with_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.with_sql-970"><a href="#Generator.with_sql-970"><span class="linenos">970</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.with_sql-971"><a href="#Generator.with_sql-971"><span class="linenos">971</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.with_sql-972"><a href="#Generator.with_sql-972"><span class="linenos">972</span></a> <span class="s2">&quot;RECURSIVE &quot;</span>
+</span><span id="Generator.with_sql-973"><a href="#Generator.with_sql-973"><span class="linenos">973</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CTE_RECURSIVE_KEYWORD_REQUIRED</span> <span class="ow">and</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;recursive&quot;</span><span class="p">)</span>
+</span><span id="Generator.with_sql-974"><a href="#Generator.with_sql-974"><span class="linenos">974</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.with_sql-975"><a href="#Generator.with_sql-975"><span class="linenos">975</span></a> <span class="p">)</span>
+</span><span id="Generator.with_sql-976"><a href="#Generator.with_sql-976"><span class="linenos">976</span></a>
+</span><span id="Generator.with_sql-977"><a href="#Generator.with_sql-977"><span class="linenos">977</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="n">recursive</span><span class="si">}{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10184,9 +10227,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.cte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cte_sql-975"><a href="#Generator.cte_sql-975"><span class="linenos">975</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cte_sql-976"><a href="#Generator.cte_sql-976"><span class="linenos">976</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.cte_sql-977"><a href="#Generator.cte_sql-977"><span class="linenos">977</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cte_sql-979"><a href="#Generator.cte_sql-979"><span class="linenos">979</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cte_sql-980"><a href="#Generator.cte_sql-980"><span class="linenos">980</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.cte_sql-981"><a href="#Generator.cte_sql-981"><span class="linenos">981</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10204,19 +10247,19 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.tablealias_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablealias_sql-979"><a href="#Generator.tablealias_sql-979"><span class="linenos">979</span></a> <span class="k">def</span> <span class="nf">tablealias_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">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tablealias_sql-980"><a href="#Generator.tablealias_sql-980"><span class="linenos">980</span></a> <span class="n">alias</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="Generator.tablealias_sql-981"><a href="#Generator.tablealias_sql-981"><span class="linenos">981</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.tablealias_sql-982"><a href="#Generator.tablealias_sql-982"><span class="linenos">982</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablealias_sql-983"><a href="#Generator.tablealias_sql-983"><span class="linenos">983</span></a>
-</span><span id="Generator.tablealias_sql-984"><a href="#Generator.tablealias_sql-984"><span class="linenos">984</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_ALIAS_COLUMNS</span><span class="p">:</span>
-</span><span id="Generator.tablealias_sql-985"><a href="#Generator.tablealias_sql-985"><span class="linenos">985</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablealias_sql-986"><a href="#Generator.tablealias_sql-986"><span class="linenos">986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Named columns are not supported in table alias.&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablealias_sql-983"><a href="#Generator.tablealias_sql-983"><span class="linenos">983</span></a> <span class="k">def</span> <span class="nf">tablealias_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">TableAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tablealias_sql-984"><a href="#Generator.tablealias_sql-984"><span class="linenos">984</span></a> <span class="n">alias</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="Generator.tablealias_sql-985"><a href="#Generator.tablealias_sql-985"><span class="linenos">985</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.tablealias_sql-986"><a href="#Generator.tablealias_sql-986"><span class="linenos">986</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator.tablealias_sql-987"><a href="#Generator.tablealias_sql-987"><span class="linenos">987</span></a>
-</span><span id="Generator.tablealias_sql-988"><a href="#Generator.tablealias_sql-988"><span class="linenos">988</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="Generator.tablealias_sql-989"><a href="#Generator.tablealias_sql-989"><span class="linenos">989</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;_t&quot;</span>
-</span><span id="Generator.tablealias_sql-990"><a href="#Generator.tablealias_sql-990"><span class="linenos">990</span></a>
-</span><span id="Generator.tablealias_sql-991"><a href="#Generator.tablealias_sql-991"><span class="linenos">991</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.tablealias_sql-988"><a href="#Generator.tablealias_sql-988"><span class="linenos">988</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_TABLE_ALIAS_COLUMNS</span><span class="p">:</span>
+</span><span id="Generator.tablealias_sql-989"><a href="#Generator.tablealias_sql-989"><span class="linenos">989</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablealias_sql-990"><a href="#Generator.tablealias_sql-990"><span class="linenos">990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Named columns are not supported in table alias.&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablealias_sql-991"><a href="#Generator.tablealias_sql-991"><span class="linenos">991</span></a>
+</span><span id="Generator.tablealias_sql-992"><a href="#Generator.tablealias_sql-992"><span class="linenos">992</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="Generator.tablealias_sql-993"><a href="#Generator.tablealias_sql-993"><span class="linenos">993</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;_t&quot;</span>
+</span><span id="Generator.tablealias_sql-994"><a href="#Generator.tablealias_sql-994"><span class="linenos">994</span></a>
+</span><span id="Generator.tablealias_sql-995"><a href="#Generator.tablealias_sql-995"><span class="linenos">995</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10234,11 +10277,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bitstring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitstring_sql-993"><a href="#Generator.bitstring_sql-993"><span class="linenos">993</span></a> <span class="k">def</span> <span class="nf">bitstring_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">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitstring_sql-994"><a href="#Generator.bitstring_sql-994"><span class="linenos">994</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.bitstring_sql-995"><a href="#Generator.bitstring_sql-995"><span class="linenos">995</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
-</span><span id="Generator.bitstring_sql-996"><a href="#Generator.bitstring_sql-996"><span class="linenos">996</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.bitstring_sql-997"><a href="#Generator.bitstring_sql-997"><span class="linenos">997</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitstring_sql-997"><a href="#Generator.bitstring_sql-997"><span class="linenos"> 997</span></a> <span class="k">def</span> <span class="nf">bitstring_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">BitString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitstring_sql-998"><a href="#Generator.bitstring_sql-998"><span class="linenos"> 998</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.bitstring_sql-999"><a href="#Generator.bitstring_sql-999"><span class="linenos"> 999</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="p">:</span>
+</span><span id="Generator.bitstring_sql-1000"><a href="#Generator.bitstring_sql-1000"><span class="linenos">1000</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BIT_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.bitstring_sql-1001"><a href="#Generator.bitstring_sql-1001"><span class="linenos">1001</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10256,11 +10299,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.hexstring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hexstring_sql-999"><a href="#Generator.hexstring_sql-999"><span class="linenos"> 999</span></a> <span class="k">def</span> <span class="nf">hexstring_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">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.hexstring_sql-1000"><a href="#Generator.hexstring_sql-1000"><span class="linenos">1000</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.hexstring_sql-1001"><a href="#Generator.hexstring_sql-1001"><span class="linenos">1001</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
-</span><span id="Generator.hexstring_sql-1002"><a href="#Generator.hexstring_sql-1002"><span class="linenos">1002</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.hexstring_sql-1003"><a href="#Generator.hexstring_sql-1003"><span class="linenos">1003</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hexstring_sql-1003"><a href="#Generator.hexstring_sql-1003"><span class="linenos">1003</span></a> <span class="k">def</span> <span class="nf">hexstring_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">HexString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.hexstring_sql-1004"><a href="#Generator.hexstring_sql-1004"><span class="linenos">1004</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.hexstring_sql-1005"><a href="#Generator.hexstring_sql-1005"><span class="linenos">1005</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="p">:</span>
+</span><span id="Generator.hexstring_sql-1006"><a href="#Generator.hexstring_sql-1006"><span class="linenos">1006</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.hexstring_sql-1007"><a href="#Generator.hexstring_sql-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10278,11 +10321,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bytestring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bytestring_sql-1005"><a href="#Generator.bytestring_sql-1005"><span class="linenos">1005</span></a> <span class="k">def</span> <span class="nf">bytestring_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">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bytestring_sql-1006"><a href="#Generator.bytestring_sql-1006"><span class="linenos">1006</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.bytestring_sql-1007"><a href="#Generator.bytestring_sql-1007"><span class="linenos">1007</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
-</span><span id="Generator.bytestring_sql-1008"><a href="#Generator.bytestring_sql-1008"><span class="linenos">1008</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.bytestring_sql-1009"><a href="#Generator.bytestring_sql-1009"><span class="linenos">1009</span></a> <span class="k">return</span> <span class="n">this</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bytestring_sql-1009"><a href="#Generator.bytestring_sql-1009"><span class="linenos">1009</span></a> <span class="k">def</span> <span class="nf">bytestring_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">ByteString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bytestring_sql-1010"><a href="#Generator.bytestring_sql-1010"><span class="linenos">1010</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.bytestring_sql-1011"><a href="#Generator.bytestring_sql-1011"><span class="linenos">1011</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="p">:</span>
+</span><span id="Generator.bytestring_sql-1012"><a href="#Generator.bytestring_sql-1012"><span class="linenos">1012</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">BYTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.bytestring_sql-1013"><a href="#Generator.bytestring_sql-1013"><span class="linenos">1013</span></a> <span class="k">return</span> <span class="n">this</span>
</span></pre></div>
@@ -10300,21 +10343,21 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.unicodestring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unicodestring_sql-1011"><a href="#Generator.unicodestring_sql-1011"><span class="linenos">1011</span></a> <span class="k">def</span> <span class="nf">unicodestring_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">UnicodeString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.unicodestring_sql-1012"><a href="#Generator.unicodestring_sql-1012"><span class="linenos">1012</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.unicodestring_sql-1013"><a href="#Generator.unicodestring_sql-1013"><span class="linenos">1013</span></a> <span class="n">escape</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;escape&quot;</span><span class="p">)</span>
-</span><span id="Generator.unicodestring_sql-1014"><a href="#Generator.unicodestring_sql-1014"><span class="linenos">1014</span></a>
-</span><span id="Generator.unicodestring_sql-1015"><a href="#Generator.unicodestring_sql-1015"><span class="linenos">1015</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">:</span>
-</span><span id="Generator.unicodestring_sql-1016"><a href="#Generator.unicodestring_sql-1016"><span class="linenos">1016</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; UESCAPE </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">escape</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escape</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.unicodestring_sql-1017"><a href="#Generator.unicodestring_sql-1017"><span class="linenos">1017</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_END</span><span class="si">}{</span><span class="n">escape</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unicodestring_sql-1015"><a href="#Generator.unicodestring_sql-1015"><span class="linenos">1015</span></a> <span class="k">def</span> <span class="nf">unicodestring_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">UnicodeString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.unicodestring_sql-1016"><a href="#Generator.unicodestring_sql-1016"><span class="linenos">1016</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.unicodestring_sql-1017"><a href="#Generator.unicodestring_sql-1017"><span class="linenos">1017</span></a> <span class="n">escape</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;escape&quot;</span><span class="p">)</span>
</span><span id="Generator.unicodestring_sql-1018"><a href="#Generator.unicodestring_sql-1018"><span class="linenos">1018</span></a>
-</span><span id="Generator.unicodestring_sql-1019"><a href="#Generator.unicodestring_sql-1019"><span class="linenos">1019</span></a> <span class="k">if</span> <span class="n">escape</span><span class="p">:</span>
-</span><span id="Generator.unicodestring_sql-1020"><a href="#Generator.unicodestring_sql-1020"><span class="linenos">1020</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rf</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">escape</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(\d+)&quot;</span><span class="p">)</span>
-</span><span id="Generator.unicodestring_sql-1021"><a href="#Generator.unicodestring_sql-1021"><span class="linenos">1021</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.unicodestring_sql-1022"><a href="#Generator.unicodestring_sql-1022"><span class="linenos">1022</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">ESCAPED_UNICODE_RE</span>
-</span><span id="Generator.unicodestring_sql-1023"><a href="#Generator.unicodestring_sql-1023"><span class="linenos">1023</span></a>
-</span><span id="Generator.unicodestring_sql-1024"><a href="#Generator.unicodestring_sql-1024"><span class="linenos">1024</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">u\1&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.unicodestring_sql-1025"><a href="#Generator.unicodestring_sql-1025"><span class="linenos">1025</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.unicodestring_sql-1019"><a href="#Generator.unicodestring_sql-1019"><span class="linenos">1019</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="p">:</span>
+</span><span id="Generator.unicodestring_sql-1020"><a href="#Generator.unicodestring_sql-1020"><span class="linenos">1020</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; UESCAPE </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">escape</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escape</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.unicodestring_sql-1021"><a href="#Generator.unicodestring_sql-1021"><span class="linenos">1021</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNICODE_END</span><span class="si">}{</span><span class="n">escape</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.unicodestring_sql-1022"><a href="#Generator.unicodestring_sql-1022"><span class="linenos">1022</span></a>
+</span><span id="Generator.unicodestring_sql-1023"><a href="#Generator.unicodestring_sql-1023"><span class="linenos">1023</span></a> <span class="k">if</span> <span class="n">escape</span><span class="p">:</span>
+</span><span id="Generator.unicodestring_sql-1024"><a href="#Generator.unicodestring_sql-1024"><span class="linenos">1024</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rf</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">escape</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(\d+)&quot;</span><span class="p">)</span>
+</span><span id="Generator.unicodestring_sql-1025"><a href="#Generator.unicodestring_sql-1025"><span class="linenos">1025</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.unicodestring_sql-1026"><a href="#Generator.unicodestring_sql-1026"><span class="linenos">1026</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">ESCAPED_UNICODE_RE</span>
+</span><span id="Generator.unicodestring_sql-1027"><a href="#Generator.unicodestring_sql-1027"><span class="linenos">1027</span></a>
+</span><span id="Generator.unicodestring_sql-1028"><a href="#Generator.unicodestring_sql-1028"><span class="linenos">1028</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">u\1&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.unicodestring_sql-1029"><a href="#Generator.unicodestring_sql-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10332,9 +10375,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.rawstring_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rawstring_sql-1027"><a href="#Generator.rawstring_sql-1027"><span class="linenos">1027</span></a> <span class="k">def</span> <span class="nf">rawstring_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">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.rawstring_sql-1028"><a href="#Generator.rawstring_sql-1028"><span class="linenos">1028</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="Generator.rawstring_sql-1029"><a href="#Generator.rawstring_sql-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">string</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rawstring_sql-1031"><a href="#Generator.rawstring_sql-1031"><span class="linenos">1031</span></a> <span class="k">def</span> <span class="nf">rawstring_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">RawString</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.rawstring_sql-1032"><a href="#Generator.rawstring_sql-1032"><span class="linenos">1032</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="Generator.rawstring_sql-1033"><a href="#Generator.rawstring_sql-1033"><span class="linenos">1033</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">string</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10352,11 +10395,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.datatypeparam_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatypeparam_sql-1031"><a href="#Generator.datatypeparam_sql-1031"><span class="linenos">1031</span></a> <span class="k">def</span> <span class="nf">datatypeparam_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">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.datatypeparam_sql-1032"><a href="#Generator.datatypeparam_sql-1032"><span class="linenos">1032</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.datatypeparam_sql-1033"><a href="#Generator.datatypeparam_sql-1033"><span class="linenos">1033</span></a> <span class="n">specifier</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="Generator.datatypeparam_sql-1034"><a href="#Generator.datatypeparam_sql-1034"><span class="linenos">1034</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DATA_TYPE_SPECIFIERS_ALLOWED</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.datatypeparam_sql-1035"><a href="#Generator.datatypeparam_sql-1035"><span class="linenos">1035</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatypeparam_sql-1035"><a href="#Generator.datatypeparam_sql-1035"><span class="linenos">1035</span></a> <span class="k">def</span> <span class="nf">datatypeparam_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">DataTypeParam</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.datatypeparam_sql-1036"><a href="#Generator.datatypeparam_sql-1036"><span class="linenos">1036</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.datatypeparam_sql-1037"><a href="#Generator.datatypeparam_sql-1037"><span class="linenos">1037</span></a> <span class="n">specifier</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="Generator.datatypeparam_sql-1038"><a href="#Generator.datatypeparam_sql-1038"><span class="linenos">1038</span></a> <span class="n">specifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">specifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DATA_TYPE_SPECIFIERS_ALLOWED</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datatypeparam_sql-1039"><a href="#Generator.datatypeparam_sql-1039"><span class="linenos">1039</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">specifier</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10374,42 +10417,42 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.datatype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatype_sql-1037"><a href="#Generator.datatype_sql-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-1038"><a href="#Generator.datatype_sql-1038"><span class="linenos">1038</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.datatype_sql-1039"><a href="#Generator.datatype_sql-1039"><span class="linenos">1039</span></a>
-</span><span id="Generator.datatype_sql-1040"><a href="#Generator.datatype_sql-1040"><span class="linenos">1040</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
-</span><span id="Generator.datatype_sql-1041"><a href="#Generator.datatype_sql-1041"><span class="linenos">1041</span></a> <span class="n">type_sql</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-1042"><a href="#Generator.datatype_sql-1042"><span class="linenos">1042</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-1043"><a href="#Generator.datatype_sql-1043"><span class="linenos">1043</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.datatype_sql-1044"><a href="#Generator.datatype_sql-1044"><span class="linenos">1044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-1045"><a href="#Generator.datatype_sql-1045"><span class="linenos">1045</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-1046"><a href="#Generator.datatype_sql-1046"><span class="linenos">1046</span></a> <span class="k">else</span> <span class="n">type_value</span>
-</span><span id="Generator.datatype_sql-1047"><a href="#Generator.datatype_sql-1047"><span class="linenos">1047</span></a> <span class="p">)</span>
-</span><span id="Generator.datatype_sql-1048"><a href="#Generator.datatype_sql-1048"><span class="linenos">1048</span></a>
-</span><span id="Generator.datatype_sql-1049"><a href="#Generator.datatype_sql-1049"><span class="linenos">1049</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.datatype_sql-1050"><a href="#Generator.datatype_sql-1050"><span class="linenos">1050</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-1051"><a href="#Generator.datatype_sql-1051"><span class="linenos">1051</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datatype_sql-1041"><a href="#Generator.datatype_sql-1041"><span class="linenos">1041</span></a> <span class="k">def</span> <span class="nf">datatype_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">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-1042"><a href="#Generator.datatype_sql-1042"><span class="linenos">1042</span></a> <span class="n">type_value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.datatype_sql-1043"><a href="#Generator.datatype_sql-1043"><span class="linenos">1043</span></a>
+</span><span id="Generator.datatype_sql-1044"><a href="#Generator.datatype_sql-1044"><span class="linenos">1044</span></a> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">USERDEFINED</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">):</span>
+</span><span id="Generator.datatype_sql-1045"><a href="#Generator.datatype_sql-1045"><span class="linenos">1045</span></a> <span class="n">type_sql</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-1046"><a href="#Generator.datatype_sql-1046"><span class="linenos">1046</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-1047"><a href="#Generator.datatype_sql-1047"><span class="linenos">1047</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.datatype_sql-1048"><a href="#Generator.datatype_sql-1048"><span class="linenos">1048</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">type_value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-1049"><a href="#Generator.datatype_sql-1049"><span class="linenos">1049</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type_value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-1050"><a href="#Generator.datatype_sql-1050"><span class="linenos">1050</span></a> <span class="k">else</span> <span class="n">type_value</span>
+</span><span id="Generator.datatype_sql-1051"><a href="#Generator.datatype_sql-1051"><span class="linenos">1051</span></a> <span class="p">)</span>
</span><span id="Generator.datatype_sql-1052"><a href="#Generator.datatype_sql-1052"><span class="linenos">1052</span></a>
-</span><span id="Generator.datatype_sql-1053"><a href="#Generator.datatype_sql-1053"><span class="linenos">1053</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-1054"><a href="#Generator.datatype_sql-1054"><span class="linenos">1054</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
-</span><span id="Generator.datatype_sql-1055"><a href="#Generator.datatype_sql-1055"><span class="linenos">1055</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.datatype_sql-1056"><a href="#Generator.datatype_sql-1056"><span class="linenos">1056</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-1057"><a href="#Generator.datatype_sql-1057"><span class="linenos">1057</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</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="Generator.datatype_sql-1058"><a href="#Generator.datatype_sql-1058"><span class="linenos">1058</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.datatype_sql-1059"><a href="#Generator.datatype_sql-1059"><span class="linenos">1059</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.datatype_sql-1060"><a href="#Generator.datatype_sql-1060"><span class="linenos">1060</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-1061"><a href="#Generator.datatype_sql-1061"><span class="linenos">1061</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.datatype_sql-1062"><a href="#Generator.datatype_sql-1062"><span class="linenos">1062</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.datatype_sql-1063"><a href="#Generator.datatype_sql-1063"><span class="linenos">1063</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.datatype_sql-1064"><a href="#Generator.datatype_sql-1064"><span class="linenos">1064</span></a>
-</span><span id="Generator.datatype_sql-1065"><a href="#Generator.datatype_sql-1065"><span class="linenos">1065</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.datatype_sql-1066"><a href="#Generator.datatype_sql-1066"><span class="linenos">1066</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator.datatype_sql-1067"><a href="#Generator.datatype_sql-1067"><span class="linenos">1067</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
-</span><span id="Generator.datatype_sql-1068"><a href="#Generator.datatype_sql-1068"><span class="linenos">1068</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Generator.datatype_sql-1069"><a href="#Generator.datatype_sql-1069"><span class="linenos">1069</span></a> <span class="p">):</span>
-</span><span id="Generator.datatype_sql-1070"><a href="#Generator.datatype_sql-1070"><span class="linenos">1070</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
-</span><span id="Generator.datatype_sql-1071"><a href="#Generator.datatype_sql-1071"><span class="linenos">1071</span></a>
-</span><span id="Generator.datatype_sql-1072"><a href="#Generator.datatype_sql-1072"><span class="linenos">1072</span></a> <span class="k">return</span> <span class="n">type_sql</span>
+</span><span id="Generator.datatype_sql-1053"><a href="#Generator.datatype_sql-1053"><span class="linenos">1053</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datatype_sql-1054"><a href="#Generator.datatype_sql-1054"><span class="linenos">1054</span></a> <span class="n">interior</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-1055"><a href="#Generator.datatype_sql-1055"><span class="linenos">1055</span></a> <span class="n">values</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datatype_sql-1056"><a href="#Generator.datatype_sql-1056"><span class="linenos">1056</span></a>
+</span><span id="Generator.datatype_sql-1057"><a href="#Generator.datatype_sql-1057"><span class="linenos">1057</span></a> <span class="k">if</span> <span class="n">interior</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-1058"><a href="#Generator.datatype_sql-1058"><span class="linenos">1058</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nested&quot;</span><span class="p">):</span>
+</span><span id="Generator.datatype_sql-1059"><a href="#Generator.datatype_sql-1059"><span class="linenos">1059</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">interior</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_DELIMITER</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-1060"><a href="#Generator.datatype_sql-1060"><span class="linenos">1060</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-1061"><a href="#Generator.datatype_sql-1061"><span class="linenos">1061</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;[&quot;</span><span class="p">,</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span> <span class="k">else</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="Generator.datatype_sql-1062"><a href="#Generator.datatype_sql-1062"><span class="linenos">1062</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;values&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.datatype_sql-1063"><a href="#Generator.datatype_sql-1063"><span class="linenos">1063</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}{</span><span class="n">values</span><span class="si">}{</span><span class="n">delimiters</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-1064"><a href="#Generator.datatype_sql-1064"><span class="linenos">1064</span></a> <span class="k">elif</span> <span class="n">type_value</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-1065"><a href="#Generator.datatype_sql-1065"><span class="linenos">1065</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-1066"><a href="#Generator.datatype_sql-1066"><span class="linenos">1066</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.datatype_sql-1067"><a href="#Generator.datatype_sql-1067"><span class="linenos">1067</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">interior</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.datatype_sql-1068"><a href="#Generator.datatype_sql-1068"><span class="linenos">1068</span></a>
+</span><span id="Generator.datatype_sql-1069"><a href="#Generator.datatype_sql-1069"><span class="linenos">1069</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}{</span><span class="n">nested</span><span class="si">}{</span><span class="n">values</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.datatype_sql-1070"><a href="#Generator.datatype_sql-1070"><span class="linenos">1070</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TZ_TO_WITH_TIME_ZONE</span> <span class="ow">and</span> <span class="n">type_value</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator.datatype_sql-1071"><a href="#Generator.datatype_sql-1071"><span class="linenos">1071</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="Generator.datatype_sql-1072"><a href="#Generator.datatype_sql-1072"><span class="linenos">1072</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Generator.datatype_sql-1073"><a href="#Generator.datatype_sql-1073"><span class="linenos">1073</span></a> <span class="p">):</span>
+</span><span id="Generator.datatype_sql-1074"><a href="#Generator.datatype_sql-1074"><span class="linenos">1074</span></a> <span class="n">type_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2"> WITH TIME ZONE&quot;</span>
+</span><span id="Generator.datatype_sql-1075"><a href="#Generator.datatype_sql-1075"><span class="linenos">1075</span></a>
+</span><span id="Generator.datatype_sql-1076"><a href="#Generator.datatype_sql-1076"><span class="linenos">1076</span></a> <span class="k">return</span> <span class="n">type_sql</span>
</span></pre></div>
@@ -10427,11 +10470,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.directory_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.directory_sql-1074"><a href="#Generator.directory_sql-1074"><span class="linenos">1074</span></a> <span class="k">def</span> <span class="nf">directory_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">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.directory_sql-1075"><a href="#Generator.directory_sql-1075"><span class="linenos">1075</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.directory_sql-1076"><a href="#Generator.directory_sql-1076"><span class="linenos">1076</span></a> <span class="n">row_format</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;row_format&quot;</span><span class="p">)</span>
-</span><span id="Generator.directory_sql-1077"><a href="#Generator.directory_sql-1077"><span class="linenos">1077</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.directory_sql-1078"><a href="#Generator.directory_sql-1078"><span class="linenos">1078</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </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="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.directory_sql-1078"><a href="#Generator.directory_sql-1078"><span class="linenos">1078</span></a> <span class="k">def</span> <span class="nf">directory_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">Directory</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.directory_sql-1079"><a href="#Generator.directory_sql-1079"><span class="linenos">1079</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot;LOCAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.directory_sql-1080"><a href="#Generator.directory_sql-1080"><span class="linenos">1080</span></a> <span class="n">row_format</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;row_format&quot;</span><span class="p">)</span>
+</span><span id="Generator.directory_sql-1081"><a href="#Generator.directory_sql-1081"><span class="linenos">1081</span></a> <span class="n">row_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.directory_sql-1082"><a href="#Generator.directory_sql-1082"><span class="linenos">1082</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2">DIRECTORY </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="n">row_format</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10449,21 +10492,21 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.delete_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.delete_sql-1080"><a href="#Generator.delete_sql-1080"><span class="linenos">1080</span></a> <span class="k">def</span> <span class="nf">delete_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">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.delete_sql-1081"><a href="#Generator.delete_sql-1081"><span class="linenos">1081</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-1082"><a href="#Generator.delete_sql-1082"><span class="linenos">1082</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.delete_sql-1083"><a href="#Generator.delete_sql-1083"><span class="linenos">1083</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-1084"><a href="#Generator.delete_sql-1084"><span class="linenos">1084</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.delete_sql-1085"><a href="#Generator.delete_sql-1085"><span class="linenos">1085</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-1086"><a href="#Generator.delete_sql-1086"><span class="linenos">1086</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-1087"><a href="#Generator.delete_sql-1087"><span class="linenos">1087</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-1088"><a href="#Generator.delete_sql-1088"><span class="linenos">1088</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
-</span><span id="Generator.delete_sql-1089"><a href="#Generator.delete_sql-1089"><span class="linenos">1089</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.delete_sql-1090"><a href="#Generator.delete_sql-1090"><span class="linenos">1090</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator.delete_sql-1091"><a href="#Generator.delete_sql-1091"><span class="linenos">1091</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.delete_sql-1092"><a href="#Generator.delete_sql-1092"><span class="linenos">1092</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.delete_sql-1093"><a href="#Generator.delete_sql-1093"><span class="linenos">1093</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.delete_sql-1094"><a href="#Generator.delete_sql-1094"><span class="linenos">1094</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.delete_sql-1084"><a href="#Generator.delete_sql-1084"><span class="linenos">1084</span></a> <span class="k">def</span> <span class="nf">delete_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">Delete</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.delete_sql-1085"><a href="#Generator.delete_sql-1085"><span class="linenos">1085</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-1086"><a href="#Generator.delete_sql-1086"><span class="linenos">1086</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.delete_sql-1087"><a href="#Generator.delete_sql-1087"><span class="linenos">1087</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-1088"><a href="#Generator.delete_sql-1088"><span class="linenos">1088</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.delete_sql-1089"><a href="#Generator.delete_sql-1089"><span class="linenos">1089</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-1090"><a href="#Generator.delete_sql-1090"><span class="linenos">1090</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-1091"><a href="#Generator.delete_sql-1091"><span class="linenos">1091</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-1092"><a href="#Generator.delete_sql-1092"><span class="linenos">1092</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;tables&quot;</span><span class="p">)</span>
+</span><span id="Generator.delete_sql-1093"><a href="#Generator.delete_sql-1093"><span class="linenos">1093</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">tables</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">tables</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.delete_sql-1094"><a href="#Generator.delete_sql-1094"><span class="linenos">1094</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator.delete_sql-1095"><a href="#Generator.delete_sql-1095"><span class="linenos">1095</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">returning</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.delete_sql-1096"><a href="#Generator.delete_sql-1096"><span class="linenos">1096</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.delete_sql-1097"><a href="#Generator.delete_sql-1097"><span class="linenos">1097</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.delete_sql-1098"><a href="#Generator.delete_sql-1098"><span class="linenos">1098</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;DELETE</span><span class="si">{</span><span class="n">tables</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -10481,18 +10524,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.drop_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.drop_sql-1096"><a href="#Generator.drop_sql-1096"><span class="linenos">1096</span></a> <span class="k">def</span> <span class="nf">drop_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">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.drop_sql-1097"><a href="#Generator.drop_sql-1097"><span class="linenos">1097</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.drop_sql-1098"><a href="#Generator.drop_sql-1098"><span class="linenos">1098</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="Generator.drop_sql-1099"><a href="#Generator.drop_sql-1099"><span class="linenos">1099</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator.drop_sql-1100"><a href="#Generator.drop_sql-1100"><span class="linenos">1100</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-1101"><a href="#Generator.drop_sql-1101"><span class="linenos">1101</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-1102"><a href="#Generator.drop_sql-1102"><span class="linenos">1102</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-1103"><a href="#Generator.drop_sql-1103"><span class="linenos">1103</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-1104"><a href="#Generator.drop_sql-1104"><span class="linenos">1104</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.drop_sql-1105"><a href="#Generator.drop_sql-1105"><span class="linenos">1105</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator.drop_sql-1106"><a href="#Generator.drop_sql-1106"><span class="linenos">1106</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.drop_sql-1107"><a href="#Generator.drop_sql-1107"><span class="linenos">1107</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.drop_sql-1100"><a href="#Generator.drop_sql-1100"><span class="linenos">1100</span></a> <span class="k">def</span> <span class="nf">drop_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">Drop</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.drop_sql-1101"><a href="#Generator.drop_sql-1101"><span class="linenos">1101</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.drop_sql-1102"><a href="#Generator.drop_sql-1102"><span class="linenos">1102</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="Generator.drop_sql-1103"><a href="#Generator.drop_sql-1103"><span class="linenos">1103</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator.drop_sql-1104"><a href="#Generator.drop_sql-1104"><span class="linenos">1104</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-1105"><a href="#Generator.drop_sql-1105"><span class="linenos">1105</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="s2">&quot; MATERIALIZED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;materialized&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-1106"><a href="#Generator.drop_sql-1106"><span class="linenos">1106</span></a> <span class="n">cascade</span> <span class="o">=</span> <span class="s2">&quot; CASCADE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cascade&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-1107"><a href="#Generator.drop_sql-1107"><span class="linenos">1107</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="s2">&quot; CONSTRAINTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;constraints&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-1108"><a href="#Generator.drop_sql-1108"><span class="linenos">1108</span></a> <span class="n">purge</span> <span class="o">=</span> <span class="s2">&quot; PURGE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;purge&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.drop_sql-1109"><a href="#Generator.drop_sql-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator.drop_sql-1110"><a href="#Generator.drop_sql-1110"><span class="linenos">1110</span></a> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">temporary</span><span class="si">}{</span><span class="n">materialized</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">exists_sql</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">cascade</span><span class="si">}{</span><span class="n">constraints</span><span class="si">}{</span><span class="n">purge</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.drop_sql-1111"><a href="#Generator.drop_sql-1111"><span class="linenos">1111</span></a> <span class="p">)</span>
</span></pre></div>
@@ -10510,11 +10553,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.except_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_sql-1109"><a href="#Generator.except_sql-1109"><span class="linenos">1109</span></a> <span class="k">def</span> <span class="nf">except_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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.except_sql-1110"><a href="#Generator.except_sql-1110"><span class="linenos">1110</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator.except_sql-1111"><a href="#Generator.except_sql-1111"><span class="linenos">1111</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.except_sql-1112"><a href="#Generator.except_sql-1112"><span class="linenos">1112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator.except_sql-1113"><a href="#Generator.except_sql-1113"><span class="linenos">1113</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_sql-1113"><a href="#Generator.except_sql-1113"><span class="linenos">1113</span></a> <span class="k">def</span> <span class="nf">except_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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.except_sql-1114"><a href="#Generator.except_sql-1114"><span class="linenos">1114</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator.except_sql-1115"><a href="#Generator.except_sql-1115"><span class="linenos">1115</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.except_sql-1116"><a href="#Generator.except_sql-1116"><span class="linenos">1116</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator.except_sql-1117"><a href="#Generator.except_sql-1117"><span class="linenos">1117</span></a> <span class="p">)</span>
</span></pre></div>
@@ -10532,8 +10575,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.except_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_op-1115"><a href="#Generator.except_op-1115"><span class="linenos">1115</span></a> <span class="k">def</span> <span class="nf">except_op</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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.except_op-1116"><a href="#Generator.except_op-1116"><span class="linenos">1116</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.except_op-1119"><a href="#Generator.except_op-1119"><span class="linenos">1119</span></a> <span class="k">def</span> <span class="nf">except_op</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">Except</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.except_op-1120"><a href="#Generator.except_op-1120"><span class="linenos">1120</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10551,15 +10594,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.fetch_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fetch_sql-1118"><a href="#Generator.fetch_sql-1118"><span class="linenos">1118</span></a> <span class="k">def</span> <span class="nf">fetch_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">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.fetch_sql-1119"><a href="#Generator.fetch_sql-1119"><span class="linenos">1119</span></a> <span class="n">direction</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;direction&quot;</span><span class="p">)</span>
-</span><span id="Generator.fetch_sql-1120"><a href="#Generator.fetch_sql-1120"><span class="linenos">1120</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fetch_sql-1121"><a href="#Generator.fetch_sql-1121"><span class="linenos">1121</span></a> <span class="n">count</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;count&quot;</span><span class="p">)</span>
-</span><span id="Generator.fetch_sql-1122"><a href="#Generator.fetch_sql-1122"><span class="linenos">1122</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fetch_sql-1123"><a href="#Generator.fetch_sql-1123"><span class="linenos">1123</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
-</span><span id="Generator.fetch_sql-1124"><a href="#Generator.fetch_sql-1124"><span class="linenos">1124</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
-</span><span id="Generator.fetch_sql-1125"><a href="#Generator.fetch_sql-1125"><span class="linenos">1125</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
-</span><span id="Generator.fetch_sql-1126"><a href="#Generator.fetch_sql-1126"><span class="linenos">1126</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fetch_sql-1122"><a href="#Generator.fetch_sql-1122"><span class="linenos">1122</span></a> <span class="k">def</span> <span class="nf">fetch_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">Fetch</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.fetch_sql-1123"><a href="#Generator.fetch_sql-1123"><span class="linenos">1123</span></a> <span class="n">direction</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;direction&quot;</span><span class="p">)</span>
+</span><span id="Generator.fetch_sql-1124"><a href="#Generator.fetch_sql-1124"><span class="linenos">1124</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">direction</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fetch_sql-1125"><a href="#Generator.fetch_sql-1125"><span class="linenos">1125</span></a> <span class="n">count</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;count&quot;</span><span class="p">)</span>
+</span><span id="Generator.fetch_sql-1126"><a href="#Generator.fetch_sql-1126"><span class="linenos">1126</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">count</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fetch_sql-1127"><a href="#Generator.fetch_sql-1127"><span class="linenos">1127</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">):</span>
+</span><span id="Generator.fetch_sql-1128"><a href="#Generator.fetch_sql-1128"><span class="linenos">1128</span></a> <span class="n">count</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="Generator.fetch_sql-1129"><a href="#Generator.fetch_sql-1129"><span class="linenos">1129</span></a> <span class="n">with_ties_or_only</span> <span class="o">=</span> <span class="s2">&quot;WITH TIES&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;with_ties&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ONLY&quot;</span>
+</span><span id="Generator.fetch_sql-1130"><a href="#Generator.fetch_sql-1130"><span class="linenos">1130</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FETCH&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">direction</span><span class="si">}{</span><span class="n">count</span><span class="si">}</span><span class="s2"> ROWS </span><span class="si">{</span><span class="n">with_ties_or_only</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10577,17 +10620,17 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.filter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.filter_sql-1128"><a href="#Generator.filter_sql-1128"><span class="linenos">1128</span></a> <span class="k">def</span> <span class="nf">filter_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">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.filter_sql-1129"><a href="#Generator.filter_sql-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_FILTER_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.filter_sql-1130"><a href="#Generator.filter_sql-1130"><span class="linenos">1130</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.filter_sql-1131"><a href="#Generator.filter_sql-1131"><span class="linenos">1131</span></a> <span class="n">where</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 class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator.filter_sql-1132"><a href="#Generator.filter_sql-1132"><span class="linenos">1132</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.filter_sql-1133"><a href="#Generator.filter_sql-1133"><span class="linenos">1133</span></a>
-</span><span id="Generator.filter_sql-1134"><a href="#Generator.filter_sql-1134"><span class="linenos">1134</span></a> <span class="n">agg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.filter_sql-1135"><a href="#Generator.filter_sql-1135"><span class="linenos">1135</span></a> <span class="n">agg_arg</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.filter_sql-1136"><a href="#Generator.filter_sql-1136"><span class="linenos">1136</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.filter_sql-1137"><a href="#Generator.filter_sql-1137"><span class="linenos">1137</span></a> <span class="n">agg_arg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">true</span><span class="o">=</span><span class="n">agg_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()))</span>
-</span><span id="Generator.filter_sql-1138"><a href="#Generator.filter_sql-1138"><span class="linenos">1138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">agg</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.filter_sql-1132"><a href="#Generator.filter_sql-1132"><span class="linenos">1132</span></a> <span class="k">def</span> <span class="nf">filter_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">Filter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.filter_sql-1133"><a href="#Generator.filter_sql-1133"><span class="linenos">1133</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_FILTER_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.filter_sql-1134"><a href="#Generator.filter_sql-1134"><span class="linenos">1134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.filter_sql-1135"><a href="#Generator.filter_sql-1135"><span class="linenos">1135</span></a> <span class="n">where</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 class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator.filter_sql-1136"><a href="#Generator.filter_sql-1136"><span class="linenos">1136</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FILTER(</span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.filter_sql-1137"><a href="#Generator.filter_sql-1137"><span class="linenos">1137</span></a>
+</span><span id="Generator.filter_sql-1138"><a href="#Generator.filter_sql-1138"><span class="linenos">1138</span></a> <span class="n">agg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.filter_sql-1139"><a href="#Generator.filter_sql-1139"><span class="linenos">1139</span></a> <span class="n">agg_arg</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.filter_sql-1140"><a href="#Generator.filter_sql-1140"><span class="linenos">1140</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.filter_sql-1141"><a href="#Generator.filter_sql-1141"><span class="linenos">1141</span></a> <span class="n">agg_arg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">true</span><span class="o">=</span><span class="n">agg_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()))</span>
+</span><span id="Generator.filter_sql-1142"><a href="#Generator.filter_sql-1142"><span class="linenos">1142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">agg</span><span class="p">)</span>
</span></pre></div>
@@ -10605,12 +10648,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.hint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hint_sql-1140"><a href="#Generator.hint_sql-1140"><span class="linenos">1140</span></a> <span class="k">def</span> <span class="nf">hint_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">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.hint_sql-1141"><a href="#Generator.hint_sql-1141"><span class="linenos">1141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
-</span><span id="Generator.hint_sql-1142"><a href="#Generator.hint_sql-1142"><span class="linenos">1142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
-</span><span id="Generator.hint_sql-1143"><a href="#Generator.hint_sql-1143"><span class="linenos">1143</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.hint_sql-1144"><a href="#Generator.hint_sql-1144"><span class="linenos">1144</span></a>
-</span><span id="Generator.hint_sql-1145"><a href="#Generator.hint_sql-1145"><span class="linenos">1145</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.hint_sql-1144"><a href="#Generator.hint_sql-1144"><span class="linenos">1144</span></a> <span class="k">def</span> <span class="nf">hint_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">Hint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.hint_sql-1145"><a href="#Generator.hint_sql-1145"><span class="linenos">1145</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINTS</span><span class="p">:</span>
+</span><span id="Generator.hint_sql-1146"><a href="#Generator.hint_sql-1146"><span class="linenos">1146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hints are not supported&quot;</span><span class="p">)</span>
+</span><span id="Generator.hint_sql-1147"><a href="#Generator.hint_sql-1147"><span class="linenos">1147</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.hint_sql-1148"><a href="#Generator.hint_sql-1148"><span class="linenos">1148</span></a>
+</span><span id="Generator.hint_sql-1149"><a href="#Generator.hint_sql-1149"><span class="linenos">1149</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_HINT_SEP</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span>
</span></pre></div>
@@ -10628,26 +10671,26 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.index_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.index_sql-1147"><a href="#Generator.index_sql-1147"><span class="linenos">1147</span></a> <span class="k">def</span> <span class="nf">index_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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.index_sql-1148"><a href="#Generator.index_sql-1148"><span class="linenos">1148</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1149"><a href="#Generator.index_sql-1149"><span class="linenos">1149</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1150"><a href="#Generator.index_sql-1150"><span class="linenos">1150</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1151"><a href="#Generator.index_sql-1151"><span class="linenos">1151</span></a> <span class="n">name</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="Generator.index_sql-1152"><a href="#Generator.index_sql-1152"><span class="linenos">1152</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1153"><a href="#Generator.index_sql-1153"><span class="linenos">1153</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
-</span><span id="Generator.index_sql-1154"><a href="#Generator.index_sql-1154"><span class="linenos">1154</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="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </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="Generator.index_sql-1155"><a href="#Generator.index_sql-1155"><span class="linenos">1155</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.index_sql-1156"><a href="#Generator.index_sql-1156"><span class="linenos">1156</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1157"><a href="#Generator.index_sql-1157"><span class="linenos">1157</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1158"><a href="#Generator.index_sql-1158"><span class="linenos">1158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.index_sql-1159"><a href="#Generator.index_sql-1159"><span class="linenos">1159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1160"><a href="#Generator.index_sql-1160"><span class="linenos">1160</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.index_sql-1161"><a href="#Generator.index_sql-1161"><span class="linenos">1161</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.index_sql-1162"><a href="#Generator.index_sql-1162"><span class="linenos">1162</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.index_sql-1163"><a href="#Generator.index_sql-1163"><span class="linenos">1163</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;include&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.index_sql-1164"><a href="#Generator.index_sql-1164"><span class="linenos">1164</span></a> <span class="k">if</span> <span class="n">include</span><span class="p">:</span>
-</span><span id="Generator.index_sql-1165"><a href="#Generator.index_sql-1165"><span class="linenos">1165</span></a> <span class="n">include</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCLUDE (</span><span class="si">{</span><span class="n">include</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.index_sql-1166"><a href="#Generator.index_sql-1166"><span class="linenos">1166</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">include</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.index_sql-1151"><a href="#Generator.index_sql-1151"><span class="linenos">1151</span></a> <span class="k">def</span> <span class="nf">index_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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.index_sql-1152"><a href="#Generator.index_sql-1152"><span class="linenos">1152</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="s2">&quot;UNIQUE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unique&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1153"><a href="#Generator.index_sql-1153"><span class="linenos">1153</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="s2">&quot;PRIMARY &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;primary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1154"><a href="#Generator.index_sql-1154"><span class="linenos">1154</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="s2">&quot;AMP &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;amp&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1155"><a href="#Generator.index_sql-1155"><span class="linenos">1155</span></a> <span class="n">name</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="Generator.index_sql-1156"><a href="#Generator.index_sql-1156"><span class="linenos">1156</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1157"><a href="#Generator.index_sql-1157"><span class="linenos">1157</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
+</span><span id="Generator.index_sql-1158"><a href="#Generator.index_sql-1158"><span class="linenos">1158</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="bp">self</span><span class="o">.</span><span class="n">INDEX_ON</span><span class="si">}</span><span class="s2"> </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="Generator.index_sql-1159"><a href="#Generator.index_sql-1159"><span class="linenos">1159</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.index_sql-1160"><a href="#Generator.index_sql-1160"><span class="linenos">1160</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1161"><a href="#Generator.index_sql-1161"><span class="linenos">1161</span></a> <span class="n">index</span> <span class="o">=</span> <span class="s2">&quot;INDEX &quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1162"><a href="#Generator.index_sql-1162"><span class="linenos">1162</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.index_sql-1163"><a href="#Generator.index_sql-1163"><span class="linenos">1163</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1164"><a href="#Generator.index_sql-1164"><span class="linenos">1164</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.index_sql-1165"><a href="#Generator.index_sql-1165"><span class="linenos">1165</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PARTITION BY </span><span class="si">{</span><span class="n">partition_by</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.index_sql-1166"><a href="#Generator.index_sql-1166"><span class="linenos">1166</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.index_sql-1167"><a href="#Generator.index_sql-1167"><span class="linenos">1167</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;include&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.index_sql-1168"><a href="#Generator.index_sql-1168"><span class="linenos">1168</span></a> <span class="k">if</span> <span class="n">include</span><span class="p">:</span>
+</span><span id="Generator.index_sql-1169"><a href="#Generator.index_sql-1169"><span class="linenos">1169</span></a> <span class="n">include</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCLUDE (</span><span class="si">{</span><span class="n">include</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.index_sql-1170"><a href="#Generator.index_sql-1170"><span class="linenos">1170</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">unique</span><span class="si">}{</span><span class="n">primary</span><span class="si">}{</span><span class="n">amp</span><span class="si">}{</span><span class="n">index</span><span class="si">}{</span><span class="n">name</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">columns</span><span class="si">}{</span><span class="n">include</span><span class="si">}{</span><span class="n">partition_by</span><span class="si">}{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10665,19 +10708,19 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.identifier_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.identifier_sql-1168"><a href="#Generator.identifier_sql-1168"><span class="linenos">1168</span></a> <span class="k">def</span> <span class="nf">identifier_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">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.identifier_sql-1169"><a href="#Generator.identifier_sql-1169"><span class="linenos">1169</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator.identifier_sql-1170"><a href="#Generator.identifier_sql-1170"><span class="linenos">1170</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Generator.identifier_sql-1171"><a href="#Generator.identifier_sql-1171"><span class="linenos">1171</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="Generator.identifier_sql-1172"><a href="#Generator.identifier_sql-1172"><span class="linenos">1172</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
-</span><span id="Generator.identifier_sql-1173"><a href="#Generator.identifier_sql-1173"><span class="linenos">1173</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Generator.identifier_sql-1174"><a href="#Generator.identifier_sql-1174"><span class="linenos">1174</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Generator.identifier_sql-1175"><a href="#Generator.identifier_sql-1175"><span class="linenos">1175</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
-</span><span id="Generator.identifier_sql-1176"><a href="#Generator.identifier_sql-1176"><span class="linenos">1176</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
-</span><span id="Generator.identifier_sql-1177"><a href="#Generator.identifier_sql-1177"><span class="linenos">1177</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
-</span><span id="Generator.identifier_sql-1178"><a href="#Generator.identifier_sql-1178"><span class="linenos">1178</span></a> <span class="p">):</span>
-</span><span id="Generator.identifier_sql-1179"><a href="#Generator.identifier_sql-1179"><span class="linenos">1179</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.identifier_sql-1180"><a href="#Generator.identifier_sql-1180"><span class="linenos">1180</span></a> <span class="k">return</span> <span class="n">text</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.identifier_sql-1172"><a href="#Generator.identifier_sql-1172"><span class="linenos">1172</span></a> <span class="k">def</span> <span class="nf">identifier_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">Identifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.identifier_sql-1173"><a href="#Generator.identifier_sql-1173"><span class="linenos">1173</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator.identifier_sql-1174"><a href="#Generator.identifier_sql-1174"><span class="linenos">1174</span></a> <span class="n">lower</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Generator.identifier_sql-1175"><a href="#Generator.identifier_sql-1175"><span class="linenos">1175</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">lower</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="Generator.identifier_sql-1176"><a href="#Generator.identifier_sql-1176"><span class="linenos">1176</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_identifier_end</span><span class="p">)</span>
+</span><span id="Generator.identifier_sql-1177"><a href="#Generator.identifier_sql-1177"><span class="linenos">1177</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Generator.identifier_sql-1178"><a href="#Generator.identifier_sql-1178"><span class="linenos">1178</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Generator.identifier_sql-1179"><a href="#Generator.identifier_sql-1179"><span class="linenos">1179</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">can_identify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">)</span>
+</span><span id="Generator.identifier_sql-1180"><a href="#Generator.identifier_sql-1180"><span class="linenos">1180</span></a> <span class="ow">or</span> <span class="n">lower</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span>
+</span><span id="Generator.identifier_sql-1181"><a href="#Generator.identifier_sql-1181"><span class="linenos">1181</span></a> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">())</span>
+</span><span id="Generator.identifier_sql-1182"><a href="#Generator.identifier_sql-1182"><span class="linenos">1182</span></a> <span class="p">):</span>
+</span><span id="Generator.identifier_sql-1183"><a href="#Generator.identifier_sql-1183"><span class="linenos">1183</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_START</span><span class="si">}{</span><span class="n">text</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIER_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.identifier_sql-1184"><a href="#Generator.identifier_sql-1184"><span class="linenos">1184</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -10695,12 +10738,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.inputoutputformat_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.inputoutputformat_sql-1182"><a href="#Generator.inputoutputformat_sql-1182"><span class="linenos">1182</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_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">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.inputoutputformat_sql-1183"><a href="#Generator.inputoutputformat_sql-1183"><span class="linenos">1183</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
-</span><span id="Generator.inputoutputformat_sql-1184"><a href="#Generator.inputoutputformat_sql-1184"><span class="linenos">1184</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.inputoutputformat_sql-1185"><a href="#Generator.inputoutputformat_sql-1185"><span class="linenos">1185</span></a> <span class="n">output_format</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;output_format&quot;</span><span class="p">)</span>
-</span><span id="Generator.inputoutputformat_sql-1186"><a href="#Generator.inputoutputformat_sql-1186"><span class="linenos">1186</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.inputoutputformat_sql-1187"><a href="#Generator.inputoutputformat_sql-1187"><span class="linenos">1187</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.inputoutputformat_sql-1186"><a href="#Generator.inputoutputformat_sql-1186"><span class="linenos">1186</span></a> <span class="k">def</span> <span class="nf">inputoutputformat_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">InputOutputFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.inputoutputformat_sql-1187"><a href="#Generator.inputoutputformat_sql-1187"><span class="linenos">1187</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
+</span><span id="Generator.inputoutputformat_sql-1188"><a href="#Generator.inputoutputformat_sql-1188"><span class="linenos">1188</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.inputoutputformat_sql-1189"><a href="#Generator.inputoutputformat_sql-1189"><span class="linenos">1189</span></a> <span class="n">output_format</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;output_format&quot;</span><span class="p">)</span>
+</span><span id="Generator.inputoutputformat_sql-1190"><a href="#Generator.inputoutputformat_sql-1190"><span class="linenos">1190</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;OUTPUTFORMAT </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">output_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.inputoutputformat_sql-1191"><a href="#Generator.inputoutputformat_sql-1191"><span class="linenos">1191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="p">))</span>
</span></pre></div>
@@ -10718,9 +10761,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.national_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.national_sql-1189"><a href="#Generator.national_sql-1189"><span class="linenos">1189</span></a> <span class="k">def</span> <span class="nf">national_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">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.national_sql-1190"><a href="#Generator.national_sql-1190"><span class="linenos">1190</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-</span><span id="Generator.national_sql-1191"><a href="#Generator.national_sql-1191"><span class="linenos">1191</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.national_sql-1193"><a href="#Generator.national_sql-1193"><span class="linenos">1193</span></a> <span class="k">def</span> <span class="nf">national_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">National</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;N&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.national_sql-1194"><a href="#Generator.national_sql-1194"><span class="linenos">1194</span></a> <span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</span><span id="Generator.national_sql-1195"><a href="#Generator.national_sql-1195"><span class="linenos">1195</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">string</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10738,8 +10781,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.partition_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partition_sql-1193"><a href="#Generator.partition_sql-1193"><span class="linenos">1193</span></a> <span class="k">def</span> <span class="nf">partition_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">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.partition_sql-1194"><a href="#Generator.partition_sql-1194"><span class="linenos">1194</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partition_sql-1197"><a href="#Generator.partition_sql-1197"><span class="linenos">1197</span></a> <span class="k">def</span> <span class="nf">partition_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">Partition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.partition_sql-1198"><a href="#Generator.partition_sql-1198"><span class="linenos">1198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -10757,20 +10800,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.properties_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties_sql-1196"><a href="#Generator.properties_sql-1196"><span class="linenos">1196</span></a> <span class="k">def</span> <span class="nf">properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-1197"><a href="#Generator.properties_sql-1197"><span class="linenos">1197</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.properties_sql-1198"><a href="#Generator.properties_sql-1198"><span class="linenos">1198</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.properties_sql-1199"><a href="#Generator.properties_sql-1199"><span class="linenos">1199</span></a>
-</span><span id="Generator.properties_sql-1200"><a href="#Generator.properties_sql-1200"><span class="linenos">1200</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-1201"><a href="#Generator.properties_sql-1201"><span class="linenos">1201</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator.properties_sql-1202"><a href="#Generator.properties_sql-1202"><span class="linenos">1202</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-1203"><a href="#Generator.properties_sql-1203"><span class="linenos">1203</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="Generator.properties_sql-1204"><a href="#Generator.properties_sql-1204"><span class="linenos">1204</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
-</span><span id="Generator.properties_sql-1205"><a href="#Generator.properties_sql-1205"><span class="linenos">1205</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="Generator.properties_sql-1206"><a href="#Generator.properties_sql-1206"><span class="linenos">1206</span></a>
-</span><span id="Generator.properties_sql-1207"><a href="#Generator.properties_sql-1207"><span class="linenos">1207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
-</span><span id="Generator.properties_sql-1208"><a href="#Generator.properties_sql-1208"><span class="linenos">1208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
-</span><span id="Generator.properties_sql-1209"><a href="#Generator.properties_sql-1209"><span class="linenos">1209</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties_sql-1200"><a href="#Generator.properties_sql-1200"><span class="linenos">1200</span></a> <span class="k">def</span> <span class="nf">properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1201"><a href="#Generator.properties_sql-1201"><span class="linenos">1201</span></a> <span class="n">root_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.properties_sql-1202"><a href="#Generator.properties_sql-1202"><span class="linenos">1202</span></a> <span class="n">with_properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.properties_sql-1203"><a href="#Generator.properties_sql-1203"><span class="linenos">1203</span></a>
+</span><span id="Generator.properties_sql-1204"><a href="#Generator.properties_sql-1204"><span class="linenos">1204</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1205"><a href="#Generator.properties_sql-1205"><span class="linenos">1205</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator.properties_sql-1206"><a href="#Generator.properties_sql-1206"><span class="linenos">1206</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1207"><a href="#Generator.properties_sql-1207"><span class="linenos">1207</span></a> <span class="n">with_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+</span><span id="Generator.properties_sql-1208"><a href="#Generator.properties_sql-1208"><span class="linenos">1208</span></a> <span class="k">elif</span> <span class="n">p_loc</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">:</span>
+</span><span id="Generator.properties_sql-1209"><a href="#Generator.properties_sql-1209"><span class="linenos">1209</span></a> <span class="n">root_properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+</span><span id="Generator.properties_sql-1210"><a href="#Generator.properties_sql-1210"><span class="linenos">1210</span></a>
+</span><span id="Generator.properties_sql-1211"><a href="#Generator.properties_sql-1211"><span class="linenos">1211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_properties</span><span class="p">(</span>
+</span><span id="Generator.properties_sql-1212"><a href="#Generator.properties_sql-1212"><span class="linenos">1212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">root_properties</span><span class="p">)</span>
+</span><span id="Generator.properties_sql-1213"><a href="#Generator.properties_sql-1213"><span class="linenos">1213</span></a> <span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_properties</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">with_properties</span><span class="p">))</span>
</span></pre></div>
@@ -10788,10 +10831,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.root_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.root_properties-1211"><a href="#Generator.root_properties-1211"><span class="linenos">1211</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.root_properties-1212"><a href="#Generator.root_properties-1212"><span class="linenos">1212</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.root_properties-1213"><a href="#Generator.root_properties-1213"><span class="linenos">1213</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.root_properties-1214"><a href="#Generator.root_properties-1214"><span class="linenos">1214</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.root_properties-1215"><a href="#Generator.root_properties-1215"><span class="linenos">1215</span></a> <span class="k">def</span> <span class="nf">root_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.root_properties-1216"><a href="#Generator.root_properties-1216"><span class="linenos">1216</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.root_properties-1217"><a href="#Generator.root_properties-1217"><span class="linenos">1217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.root_properties-1218"><a href="#Generator.root_properties-1218"><span class="linenos">1218</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -10809,20 +10852,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties-1216"><a href="#Generator.properties-1216"><span class="linenos">1216</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
-</span><span id="Generator.properties-1217"><a href="#Generator.properties-1217"><span class="linenos">1217</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.properties-1218"><a href="#Generator.properties-1218"><span class="linenos">1218</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
-</span><span id="Generator.properties-1219"><a href="#Generator.properties-1219"><span class="linenos">1219</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.properties-1220"><a href="#Generator.properties-1220"><span class="linenos">1220</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
-</span><span id="Generator.properties-1221"><a href="#Generator.properties-1221"><span class="linenos">1221</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.properties-1222"><a href="#Generator.properties-1222"><span class="linenos">1222</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator.properties-1223"><a href="#Generator.properties-1223"><span class="linenos">1223</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.properties-1224"><a href="#Generator.properties-1224"><span class="linenos">1224</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.properties-1225"><a href="#Generator.properties-1225"><span class="linenos">1225</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.properties-1226"><a href="#Generator.properties-1226"><span class="linenos">1226</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.properties-1227"><a href="#Generator.properties-1227"><span class="linenos">1227</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="Generator.properties-1228"><a href="#Generator.properties-1228"><span class="linenos">1228</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.properties-1229"><a href="#Generator.properties-1229"><span class="linenos">1229</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.properties-1220"><a href="#Generator.properties-1220"><span class="linenos">1220</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span>
+</span><span id="Generator.properties-1221"><a href="#Generator.properties-1221"><span class="linenos">1221</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.properties-1222"><a href="#Generator.properties-1222"><span class="linenos">1222</span></a> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span>
+</span><span id="Generator.properties-1223"><a href="#Generator.properties-1223"><span class="linenos">1223</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.properties-1224"><a href="#Generator.properties-1224"><span class="linenos">1224</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
+</span><span id="Generator.properties-1225"><a href="#Generator.properties-1225"><span class="linenos">1225</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.properties-1226"><a href="#Generator.properties-1226"><span class="linenos">1226</span></a> <span class="n">wrapped</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator.properties-1227"><a href="#Generator.properties-1227"><span class="linenos">1227</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.properties-1228"><a href="#Generator.properties-1228"><span class="linenos">1228</span></a> <span class="k">if</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.properties-1229"><a href="#Generator.properties-1229"><span class="linenos">1229</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.properties-1230"><a href="#Generator.properties-1230"><span class="linenos">1230</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.properties-1231"><a href="#Generator.properties-1231"><span class="linenos">1231</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">wrapped</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="Generator.properties-1232"><a href="#Generator.properties-1232"><span class="linenos">1232</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">prefix</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.properties-1233"><a href="#Generator.properties-1233"><span class="linenos">1233</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -10840,8 +10883,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.with_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_properties-1231"><a href="#Generator.with_properties-1231"><span class="linenos">1231</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.with_properties-1232"><a href="#Generator.with_properties-1232"><span class="linenos">1232</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.with_properties-1235"><a href="#Generator.with_properties-1235"><span class="linenos">1235</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.with_properties-1236"><a href="#Generator.with_properties-1236"><span class="linenos">1236</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -10859,16 +10902,16 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.locate_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.locate_properties-1234"><a href="#Generator.locate_properties-1234"><span class="linenos">1234</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
-</span><span id="Generator.locate_properties-1235"><a href="#Generator.locate_properties-1235"><span class="linenos">1235</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
-</span><span id="Generator.locate_properties-1236"><a href="#Generator.locate_properties-1236"><span class="linenos">1236</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.locate_properties-1237"><a href="#Generator.locate_properties-1237"><span class="linenos">1237</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
-</span><span id="Generator.locate_properties-1238"><a href="#Generator.locate_properties-1238"><span class="linenos">1238</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</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="Generator.locate_properties-1239"><a href="#Generator.locate_properties-1239"><span class="linenos">1239</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
-</span><span id="Generator.locate_properties-1240"><a href="#Generator.locate_properties-1240"><span class="linenos">1240</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.locate_properties-1241"><a href="#Generator.locate_properties-1241"><span class="linenos">1241</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.locate_properties-1242"><a href="#Generator.locate_properties-1242"><span class="linenos">1242</span></a>
-</span><span id="Generator.locate_properties-1243"><a href="#Generator.locate_properties-1243"><span class="linenos">1243</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.locate_properties-1238"><a href="#Generator.locate_properties-1238"><span class="linenos">1238</span></a> <span class="k">def</span> <span class="nf">locate_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">DefaultDict</span><span class="p">:</span>
+</span><span id="Generator.locate_properties-1239"><a href="#Generator.locate_properties-1239"><span class="linenos">1239</span></a> <span class="n">properties_locs</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Generator.locate_properties-1240"><a href="#Generator.locate_properties-1240"><span class="linenos">1240</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.locate_properties-1241"><a href="#Generator.locate_properties-1241"><span class="linenos">1241</span></a> <span class="n">p_loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="vm">__class__</span><span class="p">]</span>
+</span><span id="Generator.locate_properties-1242"><a href="#Generator.locate_properties-1242"><span class="linenos">1242</span></a> <span class="k">if</span> <span class="n">p_loc</span> <span class="o">!=</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="Generator.locate_properties-1243"><a href="#Generator.locate_properties-1243"><span class="linenos">1243</span></a> <span class="n">properties_locs</span><span class="p">[</span><span class="n">p_loc</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+</span><span id="Generator.locate_properties-1244"><a href="#Generator.locate_properties-1244"><span class="linenos">1244</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.locate_properties-1245"><a href="#Generator.locate_properties-1245"><span class="linenos">1245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.locate_properties-1246"><a href="#Generator.locate_properties-1246"><span class="linenos">1246</span></a>
+</span><span id="Generator.locate_properties-1247"><a href="#Generator.locate_properties-1247"><span class="linenos">1247</span></a> <span class="k">return</span> <span class="n">properties_locs</span>
</span></pre></div>
@@ -10886,10 +10929,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.property_name"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.property_name-1245"><a href="#Generator.property_name-1245"><span class="linenos">1245</span></a> <span class="k">def</span> <span class="nf">property_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">string_key</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator.property_name-1246"><a href="#Generator.property_name-1246"><span class="linenos">1246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Generator.property_name-1247"><a href="#Generator.property_name-1247"><span class="linenos">1247</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.property_name-1248"><a href="#Generator.property_name-1248"><span class="linenos">1248</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">string_key</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.property_name-1249"><a href="#Generator.property_name-1249"><span class="linenos">1249</span></a> <span class="k">def</span> <span class="nf">property_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">string_key</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator.property_name-1250"><a href="#Generator.property_name-1250"><span class="linenos">1250</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Generator.property_name-1251"><a href="#Generator.property_name-1251"><span class="linenos">1251</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.property_name-1252"><a href="#Generator.property_name-1252"><span class="linenos">1252</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">string_key</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -10907,16 +10950,16 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.property_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.property_sql-1250"><a href="#Generator.property_sql-1250"><span class="linenos">1250</span></a> <span class="k">def</span> <span class="nf">property_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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.property_sql-1251"><a href="#Generator.property_sql-1251"><span class="linenos">1251</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="Generator.property_sql-1252"><a href="#Generator.property_sql-1252"><span class="linenos">1252</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
-</span><span id="Generator.property_sql-1253"><a href="#Generator.property_sql-1253"><span class="linenos">1253</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">property_name</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.property_sql-1254"><a href="#Generator.property_sql-1254"><span class="linenos">1254</span></a>
-</span><span id="Generator.property_sql-1255"><a href="#Generator.property_sql-1255"><span class="linenos">1255</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
-</span><span id="Generator.property_sql-1256"><a href="#Generator.property_sql-1256"><span class="linenos">1256</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
-</span><span id="Generator.property_sql-1257"><a href="#Generator.property_sql-1257"><span class="linenos">1257</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.property_sql-1254"><a href="#Generator.property_sql-1254"><span class="linenos">1254</span></a> <span class="k">def</span> <span class="nf">property_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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.property_sql-1255"><a href="#Generator.property_sql-1255"><span class="linenos">1255</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="Generator.property_sql-1256"><a href="#Generator.property_sql-1256"><span class="linenos">1256</span></a> <span class="k">if</span> <span class="n">property_cls</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span>
+</span><span id="Generator.property_sql-1257"><a href="#Generator.property_sql-1257"><span class="linenos">1257</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">property_name</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator.property_sql-1258"><a href="#Generator.property_sql-1258"><span class="linenos">1258</span></a>
-</span><span id="Generator.property_sql-1259"><a href="#Generator.property_sql-1259"><span class="linenos">1259</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator.property_sql-1259"><a href="#Generator.property_sql-1259"><span class="linenos">1259</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">property_cls</span><span class="p">)</span>
+</span><span id="Generator.property_sql-1260"><a href="#Generator.property_sql-1260"><span class="linenos">1260</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
+</span><span id="Generator.property_sql-1261"><a href="#Generator.property_sql-1261"><span class="linenos">1261</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.property_sql-1262"><a href="#Generator.property_sql-1262"><span class="linenos">1262</span></a>
+</span><span id="Generator.property_sql-1263"><a href="#Generator.property_sql-1263"><span class="linenos">1263</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -10934,22 +10977,22 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.likeproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeproperty_sql-1261"><a href="#Generator.likeproperty_sql-1261"><span class="linenos">1261</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.likeproperty_sql-1262"><a href="#Generator.likeproperty_sql-1262"><span class="linenos">1262</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_CREATE_TABLE_LIKE</span><span class="p">:</span>
-</span><span id="Generator.likeproperty_sql-1263"><a href="#Generator.likeproperty_sql-1263"><span class="linenos">1263</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator.likeproperty_sql-1264"><a href="#Generator.likeproperty_sql-1264"><span class="linenos">1264</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.likeproperty_sql-1265"><a href="#Generator.likeproperty_sql-1265"><span class="linenos">1265</span></a>
-</span><span id="Generator.likeproperty_sql-1266"><a href="#Generator.likeproperty_sql-1266"><span class="linenos">1266</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;LIKE </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="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.likeproperty_sql-1267"><a href="#Generator.likeproperty_sql-1267"><span class="linenos">1267</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="Generator.likeproperty_sql-1268"><a href="#Generator.likeproperty_sql-1268"><span class="linenos">1268</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">like</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeproperty_sql-1265"><a href="#Generator.likeproperty_sql-1265"><span class="linenos">1265</span></a> <span class="k">def</span> <span class="nf">likeproperty_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">LikeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.likeproperty_sql-1266"><a href="#Generator.likeproperty_sql-1266"><span class="linenos">1266</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_CREATE_TABLE_LIKE</span><span class="p">:</span>
+</span><span id="Generator.likeproperty_sql-1267"><a href="#Generator.likeproperty_sql-1267"><span class="linenos">1267</span></a> <span class="n">options</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator.likeproperty_sql-1268"><a href="#Generator.likeproperty_sql-1268"><span class="linenos">1268</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator.likeproperty_sql-1269"><a href="#Generator.likeproperty_sql-1269"><span class="linenos">1269</span></a>
-</span><span id="Generator.likeproperty_sql-1270"><a href="#Generator.likeproperty_sql-1270"><span class="linenos">1270</span></a> <span class="k">return</span> <span class="n">like</span>
-</span><span id="Generator.likeproperty_sql-1271"><a href="#Generator.likeproperty_sql-1271"><span class="linenos">1271</span></a>
-</span><span id="Generator.likeproperty_sql-1272"><a href="#Generator.likeproperty_sql-1272"><span class="linenos">1272</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.likeproperty_sql-1273"><a href="#Generator.likeproperty_sql-1273"><span class="linenos">1273</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Transpilation of LIKE property options is unsupported&quot;</span><span class="p">)</span>
-</span><span id="Generator.likeproperty_sql-1274"><a href="#Generator.likeproperty_sql-1274"><span class="linenos">1274</span></a>
-</span><span id="Generator.likeproperty_sql-1275"><a href="#Generator.likeproperty_sql-1275"><span class="linenos">1275</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="Generator.likeproperty_sql-1276"><a href="#Generator.likeproperty_sql-1276"><span class="linenos">1276</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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">select</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.likeproperty_sql-1270"><a href="#Generator.likeproperty_sql-1270"><span class="linenos">1270</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;LIKE </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="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.likeproperty_sql-1271"><a href="#Generator.likeproperty_sql-1271"><span class="linenos">1271</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIKE_PROPERTY_INSIDE_SCHEMA</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="Generator.likeproperty_sql-1272"><a href="#Generator.likeproperty_sql-1272"><span class="linenos">1272</span></a> <span class="n">like</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">like</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.likeproperty_sql-1273"><a href="#Generator.likeproperty_sql-1273"><span class="linenos">1273</span></a>
+</span><span id="Generator.likeproperty_sql-1274"><a href="#Generator.likeproperty_sql-1274"><span class="linenos">1274</span></a> <span class="k">return</span> <span class="n">like</span>
+</span><span id="Generator.likeproperty_sql-1275"><a href="#Generator.likeproperty_sql-1275"><span class="linenos">1275</span></a>
+</span><span id="Generator.likeproperty_sql-1276"><a href="#Generator.likeproperty_sql-1276"><span class="linenos">1276</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.likeproperty_sql-1277"><a href="#Generator.likeproperty_sql-1277"><span class="linenos">1277</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Transpilation of LIKE property options is unsupported&quot;</span><span class="p">)</span>
+</span><span id="Generator.likeproperty_sql-1278"><a href="#Generator.likeproperty_sql-1278"><span class="linenos">1278</span></a>
+</span><span id="Generator.likeproperty_sql-1279"><a href="#Generator.likeproperty_sql-1279"><span class="linenos">1279</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="Generator.likeproperty_sql-1280"><a href="#Generator.likeproperty_sql-1280"><span class="linenos">1280</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AS </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">select</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10967,10 +11010,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.fallbackproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fallbackproperty_sql-1278"><a href="#Generator.fallbackproperty_sql-1278"><span class="linenos">1278</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_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">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.fallbackproperty_sql-1279"><a href="#Generator.fallbackproperty_sql-1279"><span class="linenos">1279</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fallbackproperty_sql-1280"><a href="#Generator.fallbackproperty_sql-1280"><span class="linenos">1280</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.fallbackproperty_sql-1281"><a href="#Generator.fallbackproperty_sql-1281"><span class="linenos">1281</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fallbackproperty_sql-1282"><a href="#Generator.fallbackproperty_sql-1282"><span class="linenos">1282</span></a> <span class="k">def</span> <span class="nf">fallbackproperty_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">FallbackProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.fallbackproperty_sql-1283"><a href="#Generator.fallbackproperty_sql-1283"><span class="linenos">1283</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fallbackproperty_sql-1284"><a href="#Generator.fallbackproperty_sql-1284"><span class="linenos">1284</span></a> <span class="n">protection</span> <span class="o">=</span> <span class="s2">&quot; PROTECTION&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;protection&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.fallbackproperty_sql-1285"><a href="#Generator.fallbackproperty_sql-1285"><span class="linenos">1285</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}</span><span class="s2">FALLBACK</span><span class="si">{</span><span class="n">protection</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10988,14 +11031,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.journalproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.journalproperty_sql-1283"><a href="#Generator.journalproperty_sql-1283"><span class="linenos">1283</span></a> <span class="k">def</span> <span class="nf">journalproperty_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">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.journalproperty_sql-1284"><a href="#Generator.journalproperty_sql-1284"><span class="linenos">1284</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1285"><a href="#Generator.journalproperty_sql-1285"><span class="linenos">1285</span></a> <span class="n">local</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;local&quot;</span><span class="p">)</span>
-</span><span id="Generator.journalproperty_sql-1286"><a href="#Generator.journalproperty_sql-1286"><span class="linenos">1286</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1287"><a href="#Generator.journalproperty_sql-1287"><span class="linenos">1287</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1288"><a href="#Generator.journalproperty_sql-1288"><span class="linenos">1288</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1289"><a href="#Generator.journalproperty_sql-1289"><span class="linenos">1289</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.journalproperty_sql-1290"><a href="#Generator.journalproperty_sql-1290"><span class="linenos">1290</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.journalproperty_sql-1287"><a href="#Generator.journalproperty_sql-1287"><span class="linenos">1287</span></a> <span class="k">def</span> <span class="nf">journalproperty_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">JournalProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.journalproperty_sql-1288"><a href="#Generator.journalproperty_sql-1288"><span class="linenos">1288</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot;NO &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1289"><a href="#Generator.journalproperty_sql-1289"><span class="linenos">1289</span></a> <span class="n">local</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;local&quot;</span><span class="p">)</span>
+</span><span id="Generator.journalproperty_sql-1290"><a href="#Generator.journalproperty_sql-1290"><span class="linenos">1290</span></a> <span class="n">local</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">local</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">local</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1291"><a href="#Generator.journalproperty_sql-1291"><span class="linenos">1291</span></a> <span class="n">dual</span> <span class="o">=</span> <span class="s2">&quot;DUAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;dual&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1292"><a href="#Generator.journalproperty_sql-1292"><span class="linenos">1292</span></a> <span class="n">before</span> <span class="o">=</span> <span class="s2">&quot;BEFORE &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;before&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1293"><a href="#Generator.journalproperty_sql-1293"><span class="linenos">1293</span></a> <span class="n">after</span> <span class="o">=</span> <span class="s2">&quot;AFTER &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;after&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.journalproperty_sql-1294"><a href="#Generator.journalproperty_sql-1294"><span class="linenos">1294</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">local</span><span class="si">}{</span><span class="n">dual</span><span class="si">}{</span><span class="n">before</span><span class="si">}{</span><span class="n">after</span><span class="si">}</span><span class="s2">JOURNAL&quot;</span>
</span></pre></div>
@@ -11013,10 +11056,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.freespaceproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.freespaceproperty_sql-1292"><a href="#Generator.freespaceproperty_sql-1292"><span class="linenos">1292</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_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">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.freespaceproperty_sql-1293"><a href="#Generator.freespaceproperty_sql-1293"><span class="linenos">1293</span></a> <span class="n">freespace</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="Generator.freespaceproperty_sql-1294"><a href="#Generator.freespaceproperty_sql-1294"><span class="linenos">1294</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.freespaceproperty_sql-1295"><a href="#Generator.freespaceproperty_sql-1295"><span class="linenos">1295</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.freespaceproperty_sql-1296"><a href="#Generator.freespaceproperty_sql-1296"><span class="linenos">1296</span></a> <span class="k">def</span> <span class="nf">freespaceproperty_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">FreespaceProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.freespaceproperty_sql-1297"><a href="#Generator.freespaceproperty_sql-1297"><span class="linenos">1297</span></a> <span class="n">freespace</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="Generator.freespaceproperty_sql-1298"><a href="#Generator.freespaceproperty_sql-1298"><span class="linenos">1298</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.freespaceproperty_sql-1299"><a href="#Generator.freespaceproperty_sql-1299"><span class="linenos">1299</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FREESPACE=</span><span class="si">{</span><span class="n">freespace</span><span class="si">}{</span><span class="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11034,14 +11077,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.checksumproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.checksumproperty_sql-1297"><a href="#Generator.checksumproperty_sql-1297"><span class="linenos">1297</span></a> <span class="k">def</span> <span class="nf">checksumproperty_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">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.checksumproperty_sql-1298"><a href="#Generator.checksumproperty_sql-1298"><span class="linenos">1298</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator.checksumproperty_sql-1299"><a href="#Generator.checksumproperty_sql-1299"><span class="linenos">1299</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator.checksumproperty_sql-1300"><a href="#Generator.checksumproperty_sql-1300"><span class="linenos">1300</span></a> <span class="k">elif</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;on&quot;</span><span class="p">):</span>
-</span><span id="Generator.checksumproperty_sql-1301"><a href="#Generator.checksumproperty_sql-1301"><span class="linenos">1301</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
-</span><span id="Generator.checksumproperty_sql-1302"><a href="#Generator.checksumproperty_sql-1302"><span class="linenos">1302</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.checksumproperty_sql-1303"><a href="#Generator.checksumproperty_sql-1303"><span class="linenos">1303</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
-</span><span id="Generator.checksumproperty_sql-1304"><a href="#Generator.checksumproperty_sql-1304"><span class="linenos">1304</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.checksumproperty_sql-1301"><a href="#Generator.checksumproperty_sql-1301"><span class="linenos">1301</span></a> <span class="k">def</span> <span class="nf">checksumproperty_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">ChecksumProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.checksumproperty_sql-1302"><a href="#Generator.checksumproperty_sql-1302"><span class="linenos">1302</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator.checksumproperty_sql-1303"><a href="#Generator.checksumproperty_sql-1303"><span class="linenos">1303</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator.checksumproperty_sql-1304"><a href="#Generator.checksumproperty_sql-1304"><span class="linenos">1304</span></a> <span class="k">elif</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;on&quot;</span><span class="p">):</span>
+</span><span id="Generator.checksumproperty_sql-1305"><a href="#Generator.checksumproperty_sql-1305"><span class="linenos">1305</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;ON&quot;</span>
+</span><span id="Generator.checksumproperty_sql-1306"><a href="#Generator.checksumproperty_sql-1306"><span class="linenos">1306</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.checksumproperty_sql-1307"><a href="#Generator.checksumproperty_sql-1307"><span class="linenos">1307</span></a> <span class="nb">property</span> <span class="o">=</span> <span class="s2">&quot;OFF&quot;</span>
+</span><span id="Generator.checksumproperty_sql-1308"><a href="#Generator.checksumproperty_sql-1308"><span class="linenos">1308</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECKSUM=</span><span class="si">{</span><span class="nb">property</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11059,14 +11102,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.mergeblockratioproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergeblockratioproperty_sql-1306"><a href="#Generator.mergeblockratioproperty_sql-1306"><span class="linenos">1306</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_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">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1307"><a href="#Generator.mergeblockratioproperty_sql-1307"><span class="linenos">1307</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1308"><a href="#Generator.mergeblockratioproperty_sql-1308"><span class="linenos">1308</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1309"><a href="#Generator.mergeblockratioproperty_sql-1309"><span class="linenos">1309</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1310"><a href="#Generator.mergeblockratioproperty_sql-1310"><span class="linenos">1310</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1311"><a href="#Generator.mergeblockratioproperty_sql-1311"><span class="linenos">1311</span></a>
-</span><span id="Generator.mergeblockratioproperty_sql-1312"><a href="#Generator.mergeblockratioproperty_sql-1312"><span class="linenos">1312</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergeblockratioproperty_sql-1313"><a href="#Generator.mergeblockratioproperty_sql-1313"><span class="linenos">1313</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</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="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergeblockratioproperty_sql-1310"><a href="#Generator.mergeblockratioproperty_sql-1310"><span class="linenos">1310</span></a> <span class="k">def</span> <span class="nf">mergeblockratioproperty_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">MergeBlockRatioProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1311"><a href="#Generator.mergeblockratioproperty_sql-1311"><span class="linenos">1311</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">):</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1312"><a href="#Generator.mergeblockratioproperty_sql-1312"><span class="linenos">1312</span></a> <span class="k">return</span> <span class="s2">&quot;NO MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1313"><a href="#Generator.mergeblockratioproperty_sql-1313"><span class="linenos">1313</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">):</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1314"><a href="#Generator.mergeblockratioproperty_sql-1314"><span class="linenos">1314</span></a> <span class="k">return</span> <span class="s2">&quot;DEFAULT MERGEBLOCKRATIO&quot;</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1315"><a href="#Generator.mergeblockratioproperty_sql-1315"><span class="linenos">1315</span></a>
+</span><span id="Generator.mergeblockratioproperty_sql-1316"><a href="#Generator.mergeblockratioproperty_sql-1316"><span class="linenos">1316</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="s2">&quot; PERCENT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;percent&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergeblockratioproperty_sql-1317"><a href="#Generator.mergeblockratioproperty_sql-1317"><span class="linenos">1317</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;MERGEBLOCKRATIO=</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="n">percent</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11084,21 +11127,21 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.datablocksizeproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datablocksizeproperty_sql-1315"><a href="#Generator.datablocksizeproperty_sql-1315"><span class="linenos">1315</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_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">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1316"><a href="#Generator.datablocksizeproperty_sql-1316"><span class="linenos">1316</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1317"><a href="#Generator.datablocksizeproperty_sql-1317"><span class="linenos">1317</span></a> <span class="n">minimum</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;minimum&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1318"><a href="#Generator.datablocksizeproperty_sql-1318"><span class="linenos">1318</span></a> <span class="n">maximum</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;maximum&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1319"><a href="#Generator.datablocksizeproperty_sql-1319"><span class="linenos">1319</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1320"><a href="#Generator.datablocksizeproperty_sql-1320"><span class="linenos">1320</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1321"><a href="#Generator.datablocksizeproperty_sql-1321"><span class="linenos">1321</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1322"><a href="#Generator.datablocksizeproperty_sql-1322"><span class="linenos">1322</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1323"><a href="#Generator.datablocksizeproperty_sql-1323"><span class="linenos">1323</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1324"><a href="#Generator.datablocksizeproperty_sql-1324"><span class="linenos">1324</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.datablocksizeproperty_sql-1325"><a href="#Generator.datablocksizeproperty_sql-1325"><span class="linenos">1325</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1326"><a href="#Generator.datablocksizeproperty_sql-1326"><span class="linenos">1326</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1327"><a href="#Generator.datablocksizeproperty_sql-1327"><span class="linenos">1327</span></a> <span class="n">units</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;units&quot;</span><span class="p">)</span>
-</span><span id="Generator.datablocksizeproperty_sql-1328"><a href="#Generator.datablocksizeproperty_sql-1328"><span class="linenos">1328</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.datablocksizeproperty_sql-1329"><a href="#Generator.datablocksizeproperty_sql-1329"><span class="linenos">1329</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</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;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datablocksizeproperty_sql-1319"><a href="#Generator.datablocksizeproperty_sql-1319"><span class="linenos">1319</span></a> <span class="k">def</span> <span class="nf">datablocksizeproperty_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">DataBlocksizeProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1320"><a href="#Generator.datablocksizeproperty_sql-1320"><span class="linenos">1320</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1321"><a href="#Generator.datablocksizeproperty_sql-1321"><span class="linenos">1321</span></a> <span class="n">minimum</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;minimum&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1322"><a href="#Generator.datablocksizeproperty_sql-1322"><span class="linenos">1322</span></a> <span class="n">maximum</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;maximum&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1323"><a href="#Generator.datablocksizeproperty_sql-1323"><span class="linenos">1323</span></a> <span class="k">if</span> <span class="n">default</span> <span class="ow">or</span> <span class="n">minimum</span> <span class="ow">or</span> <span class="n">maximum</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1324"><a href="#Generator.datablocksizeproperty_sql-1324"><span class="linenos">1324</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1325"><a href="#Generator.datablocksizeproperty_sql-1325"><span class="linenos">1325</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1326"><a href="#Generator.datablocksizeproperty_sql-1326"><span class="linenos">1326</span></a> <span class="k">elif</span> <span class="n">minimum</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1327"><a href="#Generator.datablocksizeproperty_sql-1327"><span class="linenos">1327</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MINIMUM&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1328"><a href="#Generator.datablocksizeproperty_sql-1328"><span class="linenos">1328</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.datablocksizeproperty_sql-1329"><a href="#Generator.datablocksizeproperty_sql-1329"><span class="linenos">1329</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MAXIMUM&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1330"><a href="#Generator.datablocksizeproperty_sql-1330"><span class="linenos">1330</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2"> DATABLOCKSIZE&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1331"><a href="#Generator.datablocksizeproperty_sql-1331"><span class="linenos">1331</span></a> <span class="n">units</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;units&quot;</span><span class="p">)</span>
+</span><span id="Generator.datablocksizeproperty_sql-1332"><a href="#Generator.datablocksizeproperty_sql-1332"><span class="linenos">1332</span></a> <span class="n">units</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">units</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.datablocksizeproperty_sql-1333"><a href="#Generator.datablocksizeproperty_sql-1333"><span class="linenos">1333</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATABLOCKSIZE=</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;size&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">units</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11116,24 +11159,24 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.blockcompressionproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.blockcompressionproperty_sql-1331"><a href="#Generator.blockcompressionproperty_sql-1331"><span class="linenos">1331</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_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">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1332"><a href="#Generator.blockcompressionproperty_sql-1332"><span class="linenos">1332</span></a> <span class="n">autotemp</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;autotemp&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1333"><a href="#Generator.blockcompressionproperty_sql-1333"><span class="linenos">1333</span></a> <span class="n">always</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;always&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1334"><a href="#Generator.blockcompressionproperty_sql-1334"><span class="linenos">1334</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1335"><a href="#Generator.blockcompressionproperty_sql-1335"><span class="linenos">1335</span></a> <span class="n">manual</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;manual&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1336"><a href="#Generator.blockcompressionproperty_sql-1336"><span class="linenos">1336</span></a> <span class="n">never</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;never&quot;</span><span class="p">)</span>
-</span><span id="Generator.blockcompressionproperty_sql-1337"><a href="#Generator.blockcompressionproperty_sql-1337"><span class="linenos">1337</span></a>
-</span><span id="Generator.blockcompressionproperty_sql-1338"><a href="#Generator.blockcompressionproperty_sql-1338"><span class="linenos">1338</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1339"><a href="#Generator.blockcompressionproperty_sql-1339"><span class="linenos">1339</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1340"><a href="#Generator.blockcompressionproperty_sql-1340"><span class="linenos">1340</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1341"><a href="#Generator.blockcompressionproperty_sql-1341"><span class="linenos">1341</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1342"><a href="#Generator.blockcompressionproperty_sql-1342"><span class="linenos">1342</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1343"><a href="#Generator.blockcompressionproperty_sql-1343"><span class="linenos">1343</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1344"><a href="#Generator.blockcompressionproperty_sql-1344"><span class="linenos">1344</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1345"><a href="#Generator.blockcompressionproperty_sql-1345"><span class="linenos">1345</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1346"><a href="#Generator.blockcompressionproperty_sql-1346"><span class="linenos">1346</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
-</span><span id="Generator.blockcompressionproperty_sql-1347"><a href="#Generator.blockcompressionproperty_sql-1347"><span class="linenos">1347</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
-</span><span id="Generator.blockcompressionproperty_sql-1348"><a href="#Generator.blockcompressionproperty_sql-1348"><span class="linenos">1348</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.blockcompressionproperty_sql-1335"><a href="#Generator.blockcompressionproperty_sql-1335"><span class="linenos">1335</span></a> <span class="k">def</span> <span class="nf">blockcompressionproperty_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">BlockCompressionProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1336"><a href="#Generator.blockcompressionproperty_sql-1336"><span class="linenos">1336</span></a> <span class="n">autotemp</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;autotemp&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1337"><a href="#Generator.blockcompressionproperty_sql-1337"><span class="linenos">1337</span></a> <span class="n">always</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;always&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1338"><a href="#Generator.blockcompressionproperty_sql-1338"><span class="linenos">1338</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1339"><a href="#Generator.blockcompressionproperty_sql-1339"><span class="linenos">1339</span></a> <span class="n">manual</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;manual&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1340"><a href="#Generator.blockcompressionproperty_sql-1340"><span class="linenos">1340</span></a> <span class="n">never</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;never&quot;</span><span class="p">)</span>
+</span><span id="Generator.blockcompressionproperty_sql-1341"><a href="#Generator.blockcompressionproperty_sql-1341"><span class="linenos">1341</span></a>
+</span><span id="Generator.blockcompressionproperty_sql-1342"><a href="#Generator.blockcompressionproperty_sql-1342"><span class="linenos">1342</span></a> <span class="k">if</span> <span class="n">autotemp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1343"><a href="#Generator.blockcompressionproperty_sql-1343"><span class="linenos">1343</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;AUTOTEMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">autotemp</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1344"><a href="#Generator.blockcompressionproperty_sql-1344"><span class="linenos">1344</span></a> <span class="k">elif</span> <span class="n">always</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1345"><a href="#Generator.blockcompressionproperty_sql-1345"><span class="linenos">1345</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;ALWAYS&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1346"><a href="#Generator.blockcompressionproperty_sql-1346"><span class="linenos">1346</span></a> <span class="k">elif</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1347"><a href="#Generator.blockcompressionproperty_sql-1347"><span class="linenos">1347</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1348"><a href="#Generator.blockcompressionproperty_sql-1348"><span class="linenos">1348</span></a> <span class="k">elif</span> <span class="n">manual</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1349"><a href="#Generator.blockcompressionproperty_sql-1349"><span class="linenos">1349</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;MANUAL&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1350"><a href="#Generator.blockcompressionproperty_sql-1350"><span class="linenos">1350</span></a> <span class="k">elif</span> <span class="n">never</span><span class="p">:</span>
+</span><span id="Generator.blockcompressionproperty_sql-1351"><a href="#Generator.blockcompressionproperty_sql-1351"><span class="linenos">1351</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="s2">&quot;NEVER&quot;</span>
+</span><span id="Generator.blockcompressionproperty_sql-1352"><a href="#Generator.blockcompressionproperty_sql-1352"><span class="linenos">1352</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BLOCKCOMPRESSION=</span><span class="si">{</span><span class="n">prop</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11151,20 +11194,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.isolatedloadingproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.isolatedloadingproperty_sql-1350"><a href="#Generator.isolatedloadingproperty_sql-1350"><span class="linenos">1350</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_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">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1351"><a href="#Generator.isolatedloadingproperty_sql-1351"><span class="linenos">1351</span></a> <span class="n">no</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;no&quot;</span><span class="p">)</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1352"><a href="#Generator.isolatedloadingproperty_sql-1352"><span class="linenos">1352</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1353"><a href="#Generator.isolatedloadingproperty_sql-1353"><span class="linenos">1353</span></a> <span class="n">concurrent</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;concurrent&quot;</span><span class="p">)</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1354"><a href="#Generator.isolatedloadingproperty_sql-1354"><span class="linenos">1354</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1355"><a href="#Generator.isolatedloadingproperty_sql-1355"><span class="linenos">1355</span></a>
-</span><span id="Generator.isolatedloadingproperty_sql-1356"><a href="#Generator.isolatedloadingproperty_sql-1356"><span class="linenos">1356</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1357"><a href="#Generator.isolatedloadingproperty_sql-1357"><span class="linenos">1357</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1358"><a href="#Generator.isolatedloadingproperty_sql-1358"><span class="linenos">1358</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1359"><a href="#Generator.isolatedloadingproperty_sql-1359"><span class="linenos">1359</span></a> <span class="k">elif</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;for_insert&quot;</span><span class="p">):</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1360"><a href="#Generator.isolatedloadingproperty_sql-1360"><span class="linenos">1360</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1361"><a href="#Generator.isolatedloadingproperty_sql-1361"><span class="linenos">1361</span></a> <span class="k">elif</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;for_none&quot;</span><span class="p">):</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1362"><a href="#Generator.isolatedloadingproperty_sql-1362"><span class="linenos">1362</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
-</span><span id="Generator.isolatedloadingproperty_sql-1363"><a href="#Generator.isolatedloadingproperty_sql-1363"><span class="linenos">1363</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.isolatedloadingproperty_sql-1354"><a href="#Generator.isolatedloadingproperty_sql-1354"><span class="linenos">1354</span></a> <span class="k">def</span> <span class="nf">isolatedloadingproperty_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">IsolatedLoadingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1355"><a href="#Generator.isolatedloadingproperty_sql-1355"><span class="linenos">1355</span></a> <span class="n">no</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;no&quot;</span><span class="p">)</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1356"><a href="#Generator.isolatedloadingproperty_sql-1356"><span class="linenos">1356</span></a> <span class="n">no</span> <span class="o">=</span> <span class="s2">&quot; NO&quot;</span> <span class="k">if</span> <span class="n">no</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1357"><a href="#Generator.isolatedloadingproperty_sql-1357"><span class="linenos">1357</span></a> <span class="n">concurrent</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;concurrent&quot;</span><span class="p">)</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1358"><a href="#Generator.isolatedloadingproperty_sql-1358"><span class="linenos">1358</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="s2">&quot; CONCURRENT&quot;</span> <span class="k">if</span> <span class="n">concurrent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1359"><a href="#Generator.isolatedloadingproperty_sql-1359"><span class="linenos">1359</span></a>
+</span><span id="Generator.isolatedloadingproperty_sql-1360"><a href="#Generator.isolatedloadingproperty_sql-1360"><span class="linenos">1360</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1361"><a href="#Generator.isolatedloadingproperty_sql-1361"><span class="linenos">1361</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;for_all&quot;</span><span class="p">):</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1362"><a href="#Generator.isolatedloadingproperty_sql-1362"><span class="linenos">1362</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR ALL&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1363"><a href="#Generator.isolatedloadingproperty_sql-1363"><span class="linenos">1363</span></a> <span class="k">elif</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;for_insert&quot;</span><span class="p">):</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1364"><a href="#Generator.isolatedloadingproperty_sql-1364"><span class="linenos">1364</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR INSERT&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1365"><a href="#Generator.isolatedloadingproperty_sql-1365"><span class="linenos">1365</span></a> <span class="k">elif</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;for_none&quot;</span><span class="p">):</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1366"><a href="#Generator.isolatedloadingproperty_sql-1366"><span class="linenos">1366</span></a> <span class="n">for_</span> <span class="o">=</span> <span class="s2">&quot; FOR NONE&quot;</span>
+</span><span id="Generator.isolatedloadingproperty_sql-1367"><a href="#Generator.isolatedloadingproperty_sql-1367"><span class="linenos">1367</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH</span><span class="si">{</span><span class="n">no</span><span class="si">}{</span><span class="n">concurrent</span><span class="si">}</span><span class="s2"> ISOLATED LOADING</span><span class="si">{</span><span class="n">for_</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11182,17 +11225,17 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.partitionboundspec_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partitionboundspec_sql-1365"><a href="#Generator.partitionboundspec_sql-1365"><span class="linenos">1365</span></a> <span class="k">def</span> <span class="nf">partitionboundspec_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">PartitionBoundSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.partitionboundspec_sql-1366"><a href="#Generator.partitionboundspec_sql-1366"><span class="linenos">1366</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator.partitionboundspec_sql-1367"><a href="#Generator.partitionboundspec_sql-1367"><span class="linenos">1367</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IN (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.partitionboundspec_sql-1368"><a href="#Generator.partitionboundspec_sql-1368"><span class="linenos">1368</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Generator.partitionboundspec_sql-1369"><a href="#Generator.partitionboundspec_sql-1369"><span class="linenos">1369</span></a> <span class="n">modulus</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="Generator.partitionboundspec_sql-1370"><a href="#Generator.partitionboundspec_sql-1370"><span class="linenos">1370</span></a> <span class="n">remainder</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="Generator.partitionboundspec_sql-1371"><a href="#Generator.partitionboundspec_sql-1371"><span class="linenos">1371</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (MODULUS </span><span class="si">{</span><span class="n">modulus</span><span class="si">}</span><span class="s2">, REMAINDER </span><span class="si">{</span><span class="n">remainder</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.partitionboundspec_sql-1372"><a href="#Generator.partitionboundspec_sql-1372"><span class="linenos">1372</span></a>
-</span><span id="Generator.partitionboundspec_sql-1373"><a href="#Generator.partitionboundspec_sql-1373"><span class="linenos">1373</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;from_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.partitionboundspec_sql-1374"><a href="#Generator.partitionboundspec_sql-1374"><span class="linenos">1374</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;to_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.partitionboundspec_sql-1375"><a href="#Generator.partitionboundspec_sql-1375"><span class="linenos">1375</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FROM (</span><span class="si">{</span><span class="n">from_expressions</span><span class="si">}</span><span class="s2">) TO (</span><span class="si">{</span><span class="n">to_expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partitionboundspec_sql-1369"><a href="#Generator.partitionboundspec_sql-1369"><span class="linenos">1369</span></a> <span class="k">def</span> <span class="nf">partitionboundspec_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">PartitionBoundSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.partitionboundspec_sql-1370"><a href="#Generator.partitionboundspec_sql-1370"><span class="linenos">1370</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator.partitionboundspec_sql-1371"><a href="#Generator.partitionboundspec_sql-1371"><span class="linenos">1371</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IN (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.partitionboundspec_sql-1372"><a href="#Generator.partitionboundspec_sql-1372"><span class="linenos">1372</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator.partitionboundspec_sql-1373"><a href="#Generator.partitionboundspec_sql-1373"><span class="linenos">1373</span></a> <span class="n">modulus</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="Generator.partitionboundspec_sql-1374"><a href="#Generator.partitionboundspec_sql-1374"><span class="linenos">1374</span></a> <span class="n">remainder</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="Generator.partitionboundspec_sql-1375"><a href="#Generator.partitionboundspec_sql-1375"><span class="linenos">1375</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (MODULUS </span><span class="si">{</span><span class="n">modulus</span><span class="si">}</span><span class="s2">, REMAINDER </span><span class="si">{</span><span class="n">remainder</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.partitionboundspec_sql-1376"><a href="#Generator.partitionboundspec_sql-1376"><span class="linenos">1376</span></a>
+</span><span id="Generator.partitionboundspec_sql-1377"><a href="#Generator.partitionboundspec_sql-1377"><span class="linenos">1377</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;from_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.partitionboundspec_sql-1378"><a href="#Generator.partitionboundspec_sql-1378"><span class="linenos">1378</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;to_expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.partitionboundspec_sql-1379"><a href="#Generator.partitionboundspec_sql-1379"><span class="linenos">1379</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FROM (</span><span class="si">{</span><span class="n">from_expressions</span><span class="si">}</span><span class="s2">) TO (</span><span class="si">{</span><span class="n">to_expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -11210,16 +11253,16 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.partitionedofproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partitionedofproperty_sql-1377"><a href="#Generator.partitionedofproperty_sql-1377"><span class="linenos">1377</span></a> <span class="k">def</span> <span class="nf">partitionedofproperty_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">PartitionedOfProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.partitionedofproperty_sql-1378"><a href="#Generator.partitionedofproperty_sql-1378"><span class="linenos">1378</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.partitionedofproperty_sql-1379"><a href="#Generator.partitionedofproperty_sql-1379"><span class="linenos">1379</span></a>
-</span><span id="Generator.partitionedofproperty_sql-1380"><a href="#Generator.partitionedofproperty_sql-1380"><span class="linenos">1380</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Generator.partitionedofproperty_sql-1381"><a href="#Generator.partitionedofproperty_sql-1381"><span class="linenos">1381</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">for_values_or_default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">):</span>
-</span><span id="Generator.partitionedofproperty_sql-1382"><a href="#Generator.partitionedofproperty_sql-1382"><span class="linenos">1382</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR VALUES </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">for_values_or_default</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.partitionedofproperty_sql-1383"><a href="#Generator.partitionedofproperty_sql-1383"><span class="linenos">1383</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.partitionedofproperty_sql-1384"><a href="#Generator.partitionedofproperty_sql-1384"><span class="linenos">1384</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="s2">&quot; DEFAULT&quot;</span>
-</span><span id="Generator.partitionedofproperty_sql-1385"><a href="#Generator.partitionedofproperty_sql-1385"><span class="linenos">1385</span></a>
-</span><span id="Generator.partitionedofproperty_sql-1386"><a href="#Generator.partitionedofproperty_sql-1386"><span class="linenos">1386</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION OF </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_values_or_default</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partitionedofproperty_sql-1381"><a href="#Generator.partitionedofproperty_sql-1381"><span class="linenos">1381</span></a> <span class="k">def</span> <span class="nf">partitionedofproperty_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">PartitionedOfProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.partitionedofproperty_sql-1382"><a href="#Generator.partitionedofproperty_sql-1382"><span class="linenos">1382</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.partitionedofproperty_sql-1383"><a href="#Generator.partitionedofproperty_sql-1383"><span class="linenos">1383</span></a>
+</span><span id="Generator.partitionedofproperty_sql-1384"><a href="#Generator.partitionedofproperty_sql-1384"><span class="linenos">1384</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Generator.partitionedofproperty_sql-1385"><a href="#Generator.partitionedofproperty_sql-1385"><span class="linenos">1385</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">for_values_or_default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">):</span>
+</span><span id="Generator.partitionedofproperty_sql-1386"><a href="#Generator.partitionedofproperty_sql-1386"><span class="linenos">1386</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR VALUES </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">for_values_or_default</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.partitionedofproperty_sql-1387"><a href="#Generator.partitionedofproperty_sql-1387"><span class="linenos">1387</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.partitionedofproperty_sql-1388"><a href="#Generator.partitionedofproperty_sql-1388"><span class="linenos">1388</span></a> <span class="n">for_values_or_default</span> <span class="o">=</span> <span class="s2">&quot; DEFAULT&quot;</span>
+</span><span id="Generator.partitionedofproperty_sql-1389"><a href="#Generator.partitionedofproperty_sql-1389"><span class="linenos">1389</span></a>
+</span><span id="Generator.partitionedofproperty_sql-1390"><a href="#Generator.partitionedofproperty_sql-1390"><span class="linenos">1390</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION OF </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_values_or_default</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11237,14 +11280,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lockingproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lockingproperty_sql-1388"><a href="#Generator.lockingproperty_sql-1388"><span class="linenos">1388</span></a> <span class="k">def</span> <span class="nf">lockingproperty_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">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lockingproperty_sql-1389"><a href="#Generator.lockingproperty_sql-1389"><span class="linenos">1389</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.lockingproperty_sql-1390"><a href="#Generator.lockingproperty_sql-1390"><span class="linenos">1390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="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 class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lockingproperty_sql-1391"><a href="#Generator.lockingproperty_sql-1391"><span class="linenos">1391</span></a> <span class="n">for_or_in</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;for_or_in&quot;</span><span class="p">)</span>
-</span><span id="Generator.lockingproperty_sql-1392"><a href="#Generator.lockingproperty_sql-1392"><span class="linenos">1392</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">for_or_in</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lockingproperty_sql-1393"><a href="#Generator.lockingproperty_sql-1393"><span class="linenos">1393</span></a> <span class="n">lock_type</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;lock_type&quot;</span><span class="p">)</span>
-</span><span id="Generator.lockingproperty_sql-1394"><a href="#Generator.lockingproperty_sql-1394"><span class="linenos">1394</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lockingproperty_sql-1395"><a href="#Generator.lockingproperty_sql-1395"><span class="linenos">1395</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lockingproperty_sql-1392"><a href="#Generator.lockingproperty_sql-1392"><span class="linenos">1392</span></a> <span class="k">def</span> <span class="nf">lockingproperty_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">LockingProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lockingproperty_sql-1393"><a href="#Generator.lockingproperty_sql-1393"><span class="linenos">1393</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="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.lockingproperty_sql-1394"><a href="#Generator.lockingproperty_sql-1394"><span class="linenos">1394</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="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 class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lockingproperty_sql-1395"><a href="#Generator.lockingproperty_sql-1395"><span class="linenos">1395</span></a> <span class="n">for_or_in</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;for_or_in&quot;</span><span class="p">)</span>
+</span><span id="Generator.lockingproperty_sql-1396"><a href="#Generator.lockingproperty_sql-1396"><span class="linenos">1396</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">for_or_in</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lockingproperty_sql-1397"><a href="#Generator.lockingproperty_sql-1397"><span class="linenos">1397</span></a> <span class="n">lock_type</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;lock_type&quot;</span><span class="p">)</span>
+</span><span id="Generator.lockingproperty_sql-1398"><a href="#Generator.lockingproperty_sql-1398"><span class="linenos">1398</span></a> <span class="n">override</span> <span class="o">=</span> <span class="s2">&quot; OVERRIDE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;override&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lockingproperty_sql-1399"><a href="#Generator.lockingproperty_sql-1399"><span class="linenos">1399</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOCKING </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">for_or_in</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">override</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11262,13 +11305,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.withdataproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withdataproperty_sql-1397"><a href="#Generator.withdataproperty_sql-1397"><span class="linenos">1397</span></a> <span class="k">def</span> <span class="nf">withdataproperty_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">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.withdataproperty_sql-1398"><a href="#Generator.withdataproperty_sql-1398"><span class="linenos">1398</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
-</span><span id="Generator.withdataproperty_sql-1399"><a href="#Generator.withdataproperty_sql-1399"><span class="linenos">1399</span></a> <span class="n">statistics</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;statistics&quot;</span><span class="p">)</span>
-</span><span id="Generator.withdataproperty_sql-1400"><a href="#Generator.withdataproperty_sql-1400"><span class="linenos">1400</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.withdataproperty_sql-1401"><a href="#Generator.withdataproperty_sql-1401"><span class="linenos">1401</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.withdataproperty_sql-1402"><a href="#Generator.withdataproperty_sql-1402"><span class="linenos">1402</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
-</span><span id="Generator.withdataproperty_sql-1403"><a href="#Generator.withdataproperty_sql-1403"><span class="linenos">1403</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withdataproperty_sql-1401"><a href="#Generator.withdataproperty_sql-1401"><span class="linenos">1401</span></a> <span class="k">def</span> <span class="nf">withdataproperty_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">WithDataProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.withdataproperty_sql-1402"><a href="#Generator.withdataproperty_sql-1402"><span class="linenos">1402</span></a> <span class="n">data_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;no&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">DATA&quot;</span>
+</span><span id="Generator.withdataproperty_sql-1403"><a href="#Generator.withdataproperty_sql-1403"><span class="linenos">1403</span></a> <span class="n">statistics</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;statistics&quot;</span><span class="p">)</span>
+</span><span id="Generator.withdataproperty_sql-1404"><a href="#Generator.withdataproperty_sql-1404"><span class="linenos">1404</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.withdataproperty_sql-1405"><a href="#Generator.withdataproperty_sql-1405"><span class="linenos">1405</span></a> <span class="k">if</span> <span class="n">statistics</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.withdataproperty_sql-1406"><a href="#Generator.withdataproperty_sql-1406"><span class="linenos">1406</span></a> <span class="n">statistics_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="s1">&#39;NO &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">statistics</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">STATISTICS&quot;</span>
+</span><span id="Generator.withdataproperty_sql-1407"><a href="#Generator.withdataproperty_sql-1407"><span class="linenos">1407</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">data_sql</span><span class="si">}{</span><span class="n">statistics_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11286,20 +11329,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.withsystemversioningproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withsystemversioningproperty_sql-1405"><a href="#Generator.withsystemversioningproperty_sql-1405"><span class="linenos">1405</span></a> <span class="k">def</span> <span class="nf">withsystemversioningproperty_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">WithSystemVersioningProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.withsystemversioningproperty_sql-1406"><a href="#Generator.withsystemversioningproperty_sql-1406"><span class="linenos">1406</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;WITH(SYSTEM_VERSIONING=ON&quot;</span>
-</span><span id="Generator.withsystemversioningproperty_sql-1407"><a href="#Generator.withsystemversioningproperty_sql-1407"><span class="linenos">1407</span></a>
-</span><span id="Generator.withsystemversioningproperty_sql-1408"><a href="#Generator.withsystemversioningproperty_sql-1408"><span class="linenos">1408</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Generator.withsystemversioningproperty_sql-1409"><a href="#Generator.withsystemversioningproperty_sql-1409"><span class="linenos">1409</span></a> <span class="n">history_table</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="Generator.withsystemversioningproperty_sql-1410"><a href="#Generator.withsystemversioningproperty_sql-1410"><span class="linenos">1410</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">(HISTORY_TABLE=</span><span class="si">{</span><span class="n">history_table</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withsystemversioningproperty_sql-1409"><a href="#Generator.withsystemversioningproperty_sql-1409"><span class="linenos">1409</span></a> <span class="k">def</span> <span class="nf">withsystemversioningproperty_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">WithSystemVersioningProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.withsystemversioningproperty_sql-1410"><a href="#Generator.withsystemversioningproperty_sql-1410"><span class="linenos">1410</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;WITH(SYSTEM_VERSIONING=ON&quot;</span>
</span><span id="Generator.withsystemversioningproperty_sql-1411"><a href="#Generator.withsystemversioningproperty_sql-1411"><span class="linenos">1411</span></a>
-</span><span id="Generator.withsystemversioningproperty_sql-1412"><a href="#Generator.withsystemversioningproperty_sql-1412"><span class="linenos">1412</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
-</span><span id="Generator.withsystemversioningproperty_sql-1413"><a href="#Generator.withsystemversioningproperty_sql-1413"><span class="linenos">1413</span></a> <span class="n">data_consistency_check</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="Generator.withsystemversioningproperty_sql-1414"><a href="#Generator.withsystemversioningproperty_sql-1414"><span class="linenos">1414</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">, DATA_CONSISTENCY_CHECK=</span><span class="si">{</span><span class="n">data_consistency_check</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.withsystemversioningproperty_sql-1412"><a href="#Generator.withsystemversioningproperty_sql-1412"><span class="linenos">1412</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator.withsystemversioningproperty_sql-1413"><a href="#Generator.withsystemversioningproperty_sql-1413"><span class="linenos">1413</span></a> <span class="n">history_table</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="Generator.withsystemversioningproperty_sql-1414"><a href="#Generator.withsystemversioningproperty_sql-1414"><span class="linenos">1414</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">(HISTORY_TABLE=</span><span class="si">{</span><span class="n">history_table</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator.withsystemversioningproperty_sql-1415"><a href="#Generator.withsystemversioningproperty_sql-1415"><span class="linenos">1415</span></a>
-</span><span id="Generator.withsystemversioningproperty_sql-1416"><a href="#Generator.withsystemversioningproperty_sql-1416"><span class="linenos">1416</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.withsystemversioningproperty_sql-1417"><a href="#Generator.withsystemversioningproperty_sql-1417"><span class="linenos">1417</span></a>
-</span><span id="Generator.withsystemversioningproperty_sql-1418"><a href="#Generator.withsystemversioningproperty_sql-1418"><span class="linenos">1418</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.withsystemversioningproperty_sql-1416"><a href="#Generator.withsystemversioningproperty_sql-1416"><span class="linenos">1416</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
+</span><span id="Generator.withsystemversioningproperty_sql-1417"><a href="#Generator.withsystemversioningproperty_sql-1417"><span class="linenos">1417</span></a> <span class="n">data_consistency_check</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="Generator.withsystemversioningproperty_sql-1418"><a href="#Generator.withsystemversioningproperty_sql-1418"><span class="linenos">1418</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">, DATA_CONSISTENCY_CHECK=</span><span class="si">{</span><span class="n">data_consistency_check</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.withsystemversioningproperty_sql-1419"><a href="#Generator.withsystemversioningproperty_sql-1419"><span class="linenos">1419</span></a>
+</span><span id="Generator.withsystemversioningproperty_sql-1420"><a href="#Generator.withsystemversioningproperty_sql-1420"><span class="linenos">1420</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.withsystemversioningproperty_sql-1421"><a href="#Generator.withsystemversioningproperty_sql-1421"><span class="linenos">1421</span></a>
+</span><span id="Generator.withsystemversioningproperty_sql-1422"><a href="#Generator.withsystemversioningproperty_sql-1422"><span class="linenos">1422</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -11317,38 +11360,38 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.insert_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.insert_sql-1420"><a href="#Generator.insert_sql-1420"><span class="linenos">1420</span></a> <span class="k">def</span> <span class="nf">insert_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">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1421"><a href="#Generator.insert_sql-1421"><span class="linenos">1421</span></a> <span class="n">overwrite</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;overwrite&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1422"><a href="#Generator.insert_sql-1422"><span class="linenos">1422</span></a>
-</span><span id="Generator.insert_sql-1423"><a href="#Generator.insert_sql-1423"><span class="linenos">1423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
-</span><span id="Generator.insert_sql-1424"><a href="#Generator.insert_sql-1424"><span class="linenos">1424</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator.insert_sql-1425"><a href="#Generator.insert_sql-1425"><span class="linenos">1425</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1426"><a href="#Generator.insert_sql-1426"><span class="linenos">1426</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">INSERT_OVERWRITE</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
-</span><span id="Generator.insert_sql-1427"><a href="#Generator.insert_sql-1427"><span class="linenos">1427</span></a>
-</span><span id="Generator.insert_sql-1428"><a href="#Generator.insert_sql-1428"><span class="linenos">1428</span></a> <span class="n">alternative</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;alternative&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1429"><a href="#Generator.insert_sql-1429"><span class="linenos">1429</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1430"><a href="#Generator.insert_sql-1430"><span class="linenos">1430</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.insert_sql-1424"><a href="#Generator.insert_sql-1424"><span class="linenos">1424</span></a> <span class="k">def</span> <span class="nf">insert_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">Insert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1425"><a href="#Generator.insert_sql-1425"><span class="linenos">1425</span></a> <span class="n">overwrite</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;overwrite&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1426"><a href="#Generator.insert_sql-1426"><span class="linenos">1426</span></a>
+</span><span id="Generator.insert_sql-1427"><a href="#Generator.insert_sql-1427"><span class="linenos">1427</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">):</span>
+</span><span id="Generator.insert_sql-1428"><a href="#Generator.insert_sql-1428"><span class="linenos">1428</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
+</span><span id="Generator.insert_sql-1429"><a href="#Generator.insert_sql-1429"><span class="linenos">1429</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1430"><a href="#Generator.insert_sql-1430"><span class="linenos">1430</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">INSERT_OVERWRITE</span> <span class="k">if</span> <span class="n">overwrite</span> <span class="k">else</span> <span class="s2">&quot; INTO&quot;</span>
</span><span id="Generator.insert_sql-1431"><a href="#Generator.insert_sql-1431"><span class="linenos">1431</span></a>
-</span><span id="Generator.insert_sql-1432"><a href="#Generator.insert_sql-1432"><span class="linenos">1432</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </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="Generator.insert_sql-1433"><a href="#Generator.insert_sql-1433"><span class="linenos">1433</span></a>
-</span><span id="Generator.insert_sql-1434"><a href="#Generator.insert_sql-1434"><span class="linenos">1434</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1435"><a href="#Generator.insert_sql-1435"><span class="linenos">1435</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.insert_sql-1436"><a href="#Generator.insert_sql-1436"><span class="linenos">1436</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1437"><a href="#Generator.insert_sql-1437"><span class="linenos">1437</span></a> <span class="p">)</span>
-</span><span id="Generator.insert_sql-1438"><a href="#Generator.insert_sql-1438"><span class="linenos">1438</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1439"><a href="#Generator.insert_sql-1439"><span class="linenos">1439</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1440"><a href="#Generator.insert_sql-1440"><span class="linenos">1440</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1441"><a href="#Generator.insert_sql-1441"><span class="linenos">1441</span></a> <span class="n">conflict</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;conflict&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1442"><a href="#Generator.insert_sql-1442"><span class="linenos">1442</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.insert_sql-1443"><a href="#Generator.insert_sql-1443"><span class="linenos">1443</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator.insert_sql-1444"><a href="#Generator.insert_sql-1444"><span class="linenos">1444</span></a>
-</span><span id="Generator.insert_sql-1445"><a href="#Generator.insert_sql-1445"><span class="linenos">1445</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1446"><a href="#Generator.insert_sql-1446"><span class="linenos">1446</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1447"><a href="#Generator.insert_sql-1447"><span class="linenos">1447</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.insert_sql-1448"><a href="#Generator.insert_sql-1448"><span class="linenos">1448</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1449"><a href="#Generator.insert_sql-1449"><span class="linenos">1449</span></a>
-</span><span id="Generator.insert_sql-1450"><a href="#Generator.insert_sql-1450"><span class="linenos">1450</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.insert_sql-1451"><a href="#Generator.insert_sql-1451"><span class="linenos">1451</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1432"><a href="#Generator.insert_sql-1432"><span class="linenos">1432</span></a> <span class="n">alternative</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;alternative&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1433"><a href="#Generator.insert_sql-1433"><span class="linenos">1433</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OR </span><span class="si">{</span><span class="n">alternative</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alternative</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1434"><a href="#Generator.insert_sql-1434"><span class="linenos">1434</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="s2">&quot; IGNORE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1435"><a href="#Generator.insert_sql-1435"><span class="linenos">1435</span></a>
+</span><span id="Generator.insert_sql-1436"><a href="#Generator.insert_sql-1436"><span class="linenos">1436</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </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="Generator.insert_sql-1437"><a href="#Generator.insert_sql-1437"><span class="linenos">1437</span></a>
+</span><span id="Generator.insert_sql-1438"><a href="#Generator.insert_sql-1438"><span class="linenos">1438</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1439"><a href="#Generator.insert_sql-1439"><span class="linenos">1439</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.insert_sql-1440"><a href="#Generator.insert_sql-1440"><span class="linenos">1440</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;partition&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1441"><a href="#Generator.insert_sql-1441"><span class="linenos">1441</span></a> <span class="p">)</span>
+</span><span id="Generator.insert_sql-1442"><a href="#Generator.insert_sql-1442"><span class="linenos">1442</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1443"><a href="#Generator.insert_sql-1443"><span class="linenos">1443</span></a> <span class="n">where</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">REPLACE WHERE </span><span class="si">{</span><span class="n">where</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">where</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1444"><a href="#Generator.insert_sql-1444"><span class="linenos">1444</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1445"><a href="#Generator.insert_sql-1445"><span class="linenos">1445</span></a> <span class="n">conflict</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;conflict&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1446"><a href="#Generator.insert_sql-1446"><span class="linenos">1446</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.insert_sql-1447"><a href="#Generator.insert_sql-1447"><span class="linenos">1447</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator.insert_sql-1448"><a href="#Generator.insert_sql-1448"><span class="linenos">1448</span></a>
+</span><span id="Generator.insert_sql-1449"><a href="#Generator.insert_sql-1449"><span class="linenos">1449</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1450"><a href="#Generator.insert_sql-1450"><span class="linenos">1450</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1451"><a href="#Generator.insert_sql-1451"><span class="linenos">1451</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.insert_sql-1452"><a href="#Generator.insert_sql-1452"><span class="linenos">1452</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">conflict</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1453"><a href="#Generator.insert_sql-1453"><span class="linenos">1453</span></a>
+</span><span id="Generator.insert_sql-1454"><a href="#Generator.insert_sql-1454"><span class="linenos">1454</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT</span><span class="si">{</span><span class="n">alternative</span><span class="si">}{</span><span class="n">ignore</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}{</span><span class="n">exists</span><span class="si">}{</span><span class="n">partition_sql</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.insert_sql-1455"><a href="#Generator.insert_sql-1455"><span class="linenos">1455</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -11366,11 +11409,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.intersect_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_sql-1453"><a href="#Generator.intersect_sql-1453"><span class="linenos">1453</span></a> <span class="k">def</span> <span class="nf">intersect_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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.intersect_sql-1454"><a href="#Generator.intersect_sql-1454"><span class="linenos">1454</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator.intersect_sql-1455"><a href="#Generator.intersect_sql-1455"><span class="linenos">1455</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.intersect_sql-1456"><a href="#Generator.intersect_sql-1456"><span class="linenos">1456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator.intersect_sql-1457"><a href="#Generator.intersect_sql-1457"><span class="linenos">1457</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_sql-1457"><a href="#Generator.intersect_sql-1457"><span class="linenos">1457</span></a> <span class="k">def</span> <span class="nf">intersect_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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.intersect_sql-1458"><a href="#Generator.intersect_sql-1458"><span class="linenos">1458</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator.intersect_sql-1459"><a href="#Generator.intersect_sql-1459"><span class="linenos">1459</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.intersect_sql-1460"><a href="#Generator.intersect_sql-1460"><span class="linenos">1460</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator.intersect_sql-1461"><a href="#Generator.intersect_sql-1461"><span class="linenos">1461</span></a> <span class="p">)</span>
</span></pre></div>
@@ -11388,8 +11431,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.intersect_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_op-1459"><a href="#Generator.intersect_op-1459"><span class="linenos">1459</span></a> <span class="k">def</span> <span class="nf">intersect_op</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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.intersect_op-1460"><a href="#Generator.intersect_op-1460"><span class="linenos">1460</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intersect_op-1463"><a href="#Generator.intersect_op-1463"><span class="linenos">1463</span></a> <span class="k">def</span> <span class="nf">intersect_op</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">Intersect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.intersect_op-1464"><a href="#Generator.intersect_op-1464"><span class="linenos">1464</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;distinct&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39; ALL&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11407,8 +11450,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.introducer_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.introducer_sql-1462"><a href="#Generator.introducer_sql-1462"><span class="linenos">1462</span></a> <span class="k">def</span> <span class="nf">introducer_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">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.introducer_sql-1463"><a href="#Generator.introducer_sql-1463"><span class="linenos">1463</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.introducer_sql-1466"><a href="#Generator.introducer_sql-1466"><span class="linenos">1466</span></a> <span class="k">def</span> <span class="nf">introducer_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">Introducer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.introducer_sql-1467"><a href="#Generator.introducer_sql-1467"><span class="linenos">1467</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11426,12 +11469,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.kill_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.kill_sql-1465"><a href="#Generator.kill_sql-1465"><span class="linenos">1465</span></a> <span class="k">def</span> <span class="nf">kill_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">Kill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.kill_sql-1466"><a href="#Generator.kill_sql-1466"><span class="linenos">1466</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.kill_sql-1467"><a href="#Generator.kill_sql-1467"><span class="linenos">1467</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.kill_sql-1468"><a href="#Generator.kill_sql-1468"><span class="linenos">1468</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.kill_sql-1469"><a href="#Generator.kill_sql-1469"><span class="linenos">1469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.kill_sql-1470"><a href="#Generator.kill_sql-1470"><span class="linenos">1470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KILL</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.kill_sql-1469"><a href="#Generator.kill_sql-1469"><span class="linenos">1469</span></a> <span class="k">def</span> <span class="nf">kill_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">Kill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.kill_sql-1470"><a href="#Generator.kill_sql-1470"><span class="linenos">1470</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.kill_sql-1471"><a href="#Generator.kill_sql-1471"><span class="linenos">1471</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.kill_sql-1472"><a href="#Generator.kill_sql-1472"><span class="linenos">1472</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.kill_sql-1473"><a href="#Generator.kill_sql-1473"><span class="linenos">1473</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.kill_sql-1474"><a href="#Generator.kill_sql-1474"><span class="linenos">1474</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KILL</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11449,8 +11492,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.pseudotype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pseudotype_sql-1472"><a href="#Generator.pseudotype_sql-1472"><span class="linenos">1472</span></a> <span class="k">def</span> <span class="nf">pseudotype_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">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.pseudotype_sql-1473"><a href="#Generator.pseudotype_sql-1473"><span class="linenos">1473</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pseudotype_sql-1476"><a href="#Generator.pseudotype_sql-1476"><span class="linenos">1476</span></a> <span class="k">def</span> <span class="nf">pseudotype_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">PseudoType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.pseudotype_sql-1477"><a href="#Generator.pseudotype_sql-1477"><span class="linenos">1477</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -11468,8 +11511,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.objectidentifier_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.objectidentifier_sql-1475"><a href="#Generator.objectidentifier_sql-1475"><span class="linenos">1475</span></a> <span class="k">def</span> <span class="nf">objectidentifier_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">ObjectIdentifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.objectidentifier_sql-1476"><a href="#Generator.objectidentifier_sql-1476"><span class="linenos">1476</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.objectidentifier_sql-1479"><a href="#Generator.objectidentifier_sql-1479"><span class="linenos">1479</span></a> <span class="k">def</span> <span class="nf">objectidentifier_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">ObjectIdentifier</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.objectidentifier_sql-1480"><a href="#Generator.objectidentifier_sql-1480"><span class="linenos">1480</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -11487,19 +11530,19 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.onconflict_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.onconflict_sql-1478"><a href="#Generator.onconflict_sql-1478"><span class="linenos">1478</span></a> <span class="k">def</span> <span class="nf">onconflict_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">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.onconflict_sql-1479"><a href="#Generator.onconflict_sql-1479"><span class="linenos">1479</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
-</span><span id="Generator.onconflict_sql-1480"><a href="#Generator.onconflict_sql-1480"><span class="linenos">1480</span></a> <span class="n">constraint</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;constraint&quot;</span><span class="p">)</span>
-</span><span id="Generator.onconflict_sql-1481"><a href="#Generator.onconflict_sql-1481"><span class="linenos">1481</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Generator.onconflict_sql-1482"><a href="#Generator.onconflict_sql-1482"><span class="linenos">1482</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.onconflict_sql-1483"><a href="#Generator.onconflict_sql-1483"><span class="linenos">1483</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.onconflict_sql-1484"><a href="#Generator.onconflict_sql-1484"><span class="linenos">1484</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
-</span><span id="Generator.onconflict_sql-1485"><a href="#Generator.onconflict_sql-1485"><span class="linenos">1485</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.onconflict_sql-1486"><a href="#Generator.onconflict_sql-1486"><span class="linenos">1486</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.onconflict_sql-1487"><a href="#Generator.onconflict_sql-1487"><span class="linenos">1487</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.onconflict_sql-1488"><a href="#Generator.onconflict_sql-1488"><span class="linenos">1488</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.onconflict_sql-1489"><a href="#Generator.onconflict_sql-1489"><span class="linenos">1489</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.onconflict_sql-1490"><a href="#Generator.onconflict_sql-1490"><span class="linenos">1490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.onconflict_sql-1482"><a href="#Generator.onconflict_sql-1482"><span class="linenos">1482</span></a> <span class="k">def</span> <span class="nf">onconflict_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">OnConflict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.onconflict_sql-1483"><a href="#Generator.onconflict_sql-1483"><span class="linenos">1483</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="s2">&quot;ON DUPLICATE KEY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;ON CONFLICT&quot;</span>
+</span><span id="Generator.onconflict_sql-1484"><a href="#Generator.onconflict_sql-1484"><span class="linenos">1484</span></a> <span class="n">constraint</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;constraint&quot;</span><span class="p">)</span>
+</span><span id="Generator.onconflict_sql-1485"><a href="#Generator.onconflict_sql-1485"><span class="linenos">1485</span></a> <span class="k">if</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Generator.onconflict_sql-1486"><a href="#Generator.onconflict_sql-1486"><span class="linenos">1486</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON CONSTRAINT </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.onconflict_sql-1487"><a href="#Generator.onconflict_sql-1487"><span class="linenos">1487</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.onconflict_sql-1488"><a href="#Generator.onconflict_sql-1488"><span class="linenos">1488</span></a> <span class="n">do</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; DO &quot;</span>
+</span><span id="Generator.onconflict_sql-1489"><a href="#Generator.onconflict_sql-1489"><span class="linenos">1489</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="s2">&quot;NOTHING&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;nothing&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.onconflict_sql-1490"><a href="#Generator.onconflict_sql-1490"><span class="linenos">1490</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.onconflict_sql-1491"><a href="#Generator.onconflict_sql-1491"><span class="linenos">1491</span></a> <span class="n">set_keyword</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">DUPLICATE_KEY_UPDATE_WITH_SET</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.onconflict_sql-1492"><a href="#Generator.onconflict_sql-1492"><span class="linenos">1492</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.onconflict_sql-1493"><a href="#Generator.onconflict_sql-1493"><span class="linenos">1493</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">set_keyword</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.onconflict_sql-1494"><a href="#Generator.onconflict_sql-1494"><span class="linenos">1494</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">conflict</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">constraint</span><span class="si">}{</span><span class="n">key</span><span class="si">}{</span><span class="n">do</span><span class="si">}{</span><span class="n">nothing</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11517,8 +11560,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.returning_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.returning_sql-1492"><a href="#Generator.returning_sql-1492"><span class="linenos">1492</span></a> <span class="k">def</span> <span class="nf">returning_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">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.returning_sql-1493"><a href="#Generator.returning_sql-1493"><span class="linenos">1493</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.returning_sql-1496"><a href="#Generator.returning_sql-1496"><span class="linenos">1496</span></a> <span class="k">def</span> <span class="nf">returning_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">Returning</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.returning_sql-1497"><a href="#Generator.returning_sql-1497"><span class="linenos">1497</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;RETURNING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11536,20 +11579,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.rowformatdelimitedproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rowformatdelimitedproperty_sql-1495"><a href="#Generator.rowformatdelimitedproperty_sql-1495"><span class="linenos">1495</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_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">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1496"><a href="#Generator.rowformatdelimitedproperty_sql-1496"><span class="linenos">1496</span></a> <span class="n">fields</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;fields&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1497"><a href="#Generator.rowformatdelimitedproperty_sql-1497"><span class="linenos">1497</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1498"><a href="#Generator.rowformatdelimitedproperty_sql-1498"><span class="linenos">1498</span></a> <span class="n">escaped</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;escaped&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1499"><a href="#Generator.rowformatdelimitedproperty_sql-1499"><span class="linenos">1499</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1500"><a href="#Generator.rowformatdelimitedproperty_sql-1500"><span class="linenos">1500</span></a> <span class="n">items</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;collection_items&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1501"><a href="#Generator.rowformatdelimitedproperty_sql-1501"><span class="linenos">1501</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1502"><a href="#Generator.rowformatdelimitedproperty_sql-1502"><span class="linenos">1502</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1503"><a href="#Generator.rowformatdelimitedproperty_sql-1503"><span class="linenos">1503</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1504"><a href="#Generator.rowformatdelimitedproperty_sql-1504"><span class="linenos">1504</span></a> <span class="n">lines</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;lines&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1505"><a href="#Generator.rowformatdelimitedproperty_sql-1505"><span class="linenos">1505</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1506"><a href="#Generator.rowformatdelimitedproperty_sql-1506"><span class="linenos">1506</span></a> <span class="n">null</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;null&quot;</span><span class="p">)</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1507"><a href="#Generator.rowformatdelimitedproperty_sql-1507"><span class="linenos">1507</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rowformatdelimitedproperty_sql-1508"><a href="#Generator.rowformatdelimitedproperty_sql-1508"><span class="linenos">1508</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rowformatdelimitedproperty_sql-1499"><a href="#Generator.rowformatdelimitedproperty_sql-1499"><span class="linenos">1499</span></a> <span class="k">def</span> <span class="nf">rowformatdelimitedproperty_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">RowFormatDelimitedProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1500"><a href="#Generator.rowformatdelimitedproperty_sql-1500"><span class="linenos">1500</span></a> <span class="n">fields</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;fields&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1501"><a href="#Generator.rowformatdelimitedproperty_sql-1501"><span class="linenos">1501</span></a> <span class="n">fields</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FIELDS TERMINATED BY </span><span class="si">{</span><span class="n">fields</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">fields</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1502"><a href="#Generator.rowformatdelimitedproperty_sql-1502"><span class="linenos">1502</span></a> <span class="n">escaped</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;escaped&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1503"><a href="#Generator.rowformatdelimitedproperty_sql-1503"><span class="linenos">1503</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ESCAPED BY </span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">escaped</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1504"><a href="#Generator.rowformatdelimitedproperty_sql-1504"><span class="linenos">1504</span></a> <span class="n">items</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;collection_items&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1505"><a href="#Generator.rowformatdelimitedproperty_sql-1505"><span class="linenos">1505</span></a> <span class="n">items</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLECTION ITEMS TERMINATED BY </span><span class="si">{</span><span class="n">items</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">items</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1506"><a href="#Generator.rowformatdelimitedproperty_sql-1506"><span class="linenos">1506</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_keys&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1507"><a href="#Generator.rowformatdelimitedproperty_sql-1507"><span class="linenos">1507</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; MAP KEYS TERMINATED BY </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">keys</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1508"><a href="#Generator.rowformatdelimitedproperty_sql-1508"><span class="linenos">1508</span></a> <span class="n">lines</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;lines&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1509"><a href="#Generator.rowformatdelimitedproperty_sql-1509"><span class="linenos">1509</span></a> <span class="n">lines</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; LINES TERMINATED BY </span><span class="si">{</span><span class="n">lines</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">lines</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1510"><a href="#Generator.rowformatdelimitedproperty_sql-1510"><span class="linenos">1510</span></a> <span class="n">null</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;null&quot;</span><span class="p">)</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1511"><a href="#Generator.rowformatdelimitedproperty_sql-1511"><span class="linenos">1511</span></a> <span class="n">null</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; NULL DEFINED AS </span><span class="si">{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rowformatdelimitedproperty_sql-1512"><a href="#Generator.rowformatdelimitedproperty_sql-1512"><span class="linenos">1512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROW FORMAT DELIMITED</span><span class="si">{</span><span class="n">fields</span><span class="si">}{</span><span class="n">escaped</span><span class="si">}{</span><span class="n">items</span><span class="si">}{</span><span class="n">keys</span><span class="si">}{</span><span class="n">lines</span><span class="si">}{</span><span class="n">null</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11567,8 +11610,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.withtablehint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withtablehint_sql-1510"><a href="#Generator.withtablehint_sql-1510"><span class="linenos">1510</span></a> <span class="k">def</span> <span class="nf">withtablehint_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">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.withtablehint_sql-1511"><a href="#Generator.withtablehint_sql-1511"><span class="linenos">1511</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withtablehint_sql-1514"><a href="#Generator.withtablehint_sql-1514"><span class="linenos">1514</span></a> <span class="k">def</span> <span class="nf">withtablehint_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">WithTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.withtablehint_sql-1515"><a href="#Generator.withtablehint_sql-1515"><span class="linenos">1515</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -11586,11 +11629,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.indextablehint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indextablehint_sql-1513"><a href="#Generator.indextablehint_sql-1513"><span class="linenos">1513</span></a> <span class="k">def</span> <span class="nf">indextablehint_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">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indextablehint_sql-1514"><a href="#Generator.indextablehint_sql-1514"><span class="linenos">1514</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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"> INDEX&quot;</span>
-</span><span id="Generator.indextablehint_sql-1515"><a href="#Generator.indextablehint_sql-1515"><span class="linenos">1515</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
-</span><span id="Generator.indextablehint_sql-1516"><a href="#Generator.indextablehint_sql-1516"><span class="linenos">1516</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indextablehint_sql-1517"><a href="#Generator.indextablehint_sql-1517"><span class="linenos">1517</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indextablehint_sql-1517"><a href="#Generator.indextablehint_sql-1517"><span class="linenos">1517</span></a> <span class="k">def</span> <span class="nf">indextablehint_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">IndexTableHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indextablehint_sql-1518"><a href="#Generator.indextablehint_sql-1518"><span class="linenos">1518</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="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"> INDEX&quot;</span>
+</span><span id="Generator.indextablehint_sql-1519"><a href="#Generator.indextablehint_sql-1519"><span class="linenos">1519</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">)</span>
+</span><span id="Generator.indextablehint_sql-1520"><a href="#Generator.indextablehint_sql-1520"><span class="linenos">1520</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FOR </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">target</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indextablehint_sql-1521"><a href="#Generator.indextablehint_sql-1521"><span class="linenos">1521</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -11608,11 +11651,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.historicaldata_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.historicaldata_sql-1519"><a href="#Generator.historicaldata_sql-1519"><span class="linenos">1519</span></a> <span class="k">def</span> <span class="nf">historicaldata_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">HistoricalData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.historicaldata_sql-1520"><a href="#Generator.historicaldata_sql-1520"><span class="linenos">1520</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.historicaldata_sql-1521"><a href="#Generator.historicaldata_sql-1521"><span class="linenos">1521</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.historicaldata_sql-1522"><a href="#Generator.historicaldata_sql-1522"><span class="linenos">1522</span></a> <span class="n">expr</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="Generator.historicaldata_sql-1523"><a href="#Generator.historicaldata_sql-1523"><span class="linenos">1523</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.historicaldata_sql-1523"><a href="#Generator.historicaldata_sql-1523"><span class="linenos">1523</span></a> <span class="k">def</span> <span class="nf">historicaldata_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">HistoricalData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.historicaldata_sql-1524"><a href="#Generator.historicaldata_sql-1524"><span class="linenos">1524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.historicaldata_sql-1525"><a href="#Generator.historicaldata_sql-1525"><span class="linenos">1525</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.historicaldata_sql-1526"><a href="#Generator.historicaldata_sql-1526"><span class="linenos">1526</span></a> <span class="n">expr</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="Generator.historicaldata_sql-1527"><a href="#Generator.historicaldata_sql-1527"><span class="linenos">1527</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> =&gt; </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -11630,44 +11673,44 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.table_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.table_sql-1525"><a href="#Generator.table_sql-1525"><span class="linenos">1525</span></a> <span class="k">def</span> <span class="nf">table_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">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.table_sql-1526"><a href="#Generator.table_sql-1526"><span class="linenos">1526</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.table_sql-1527"><a href="#Generator.table_sql-1527"><span class="linenos">1527</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1528"><a href="#Generator.table_sql-1528"><span class="linenos">1528</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator.table_sql-1529"><a href="#Generator.table_sql-1529"><span class="linenos">1529</span></a> <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;catalog&quot;</span><span class="p">),</span>
-</span><span id="Generator.table_sql-1530"><a href="#Generator.table_sql-1530"><span class="linenos">1530</span></a> <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;db&quot;</span><span class="p">),</span>
-</span><span id="Generator.table_sql-1531"><a href="#Generator.table_sql-1531"><span class="linenos">1531</span></a> <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;this&quot;</span><span class="p">),</span>
-</span><span id="Generator.table_sql-1532"><a href="#Generator.table_sql-1532"><span class="linenos">1532</span></a> <span class="p">)</span>
-</span><span id="Generator.table_sql-1533"><a href="#Generator.table_sql-1533"><span class="linenos">1533</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="Generator.table_sql-1534"><a href="#Generator.table_sql-1534"><span class="linenos">1534</span></a> <span class="p">)</span>
-</span><span id="Generator.table_sql-1535"><a href="#Generator.table_sql-1535"><span class="linenos">1535</span></a>
-</span><span id="Generator.table_sql-1536"><a href="#Generator.table_sql-1536"><span class="linenos">1536</span></a> <span class="n">version</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;version&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1537"><a href="#Generator.table_sql-1537"><span class="linenos">1537</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1538"><a href="#Generator.table_sql-1538"><span class="linenos">1538</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1539"><a href="#Generator.table_sql-1539"><span class="linenos">1539</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1540"><a href="#Generator.table_sql-1540"><span class="linenos">1540</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1541"><a href="#Generator.table_sql-1541"><span class="linenos">1541</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1542"><a href="#Generator.table_sql-1542"><span class="linenos">1542</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1543"><a href="#Generator.table_sql-1543"><span class="linenos">1543</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1544"><a href="#Generator.table_sql-1544"><span class="linenos">1544</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1545"><a href="#Generator.table_sql-1545"><span class="linenos">1545</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1546"><a href="#Generator.table_sql-1546"><span class="linenos">1546</span></a>
-</span><span id="Generator.table_sql-1547"><a href="#Generator.table_sql-1547"><span class="linenos">1547</span></a> <span class="n">file_format</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;format&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1548"><a href="#Generator.table_sql-1548"><span class="linenos">1548</span></a> <span class="k">if</span> <span class="n">file_format</span><span class="p">:</span>
-</span><span id="Generator.table_sql-1549"><a href="#Generator.table_sql-1549"><span class="linenos">1549</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1550"><a href="#Generator.table_sql-1550"><span class="linenos">1550</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, PATTERN =&gt; </span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1551"><a href="#Generator.table_sql-1551"><span class="linenos">1551</span></a> <span class="n">file_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (FILE_FORMAT =&gt; </span><span class="si">{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.table_sql-1552"><a href="#Generator.table_sql-1552"><span class="linenos">1552</span></a>
-</span><span id="Generator.table_sql-1553"><a href="#Generator.table_sql-1553"><span class="linenos">1553</span></a> <span class="n">ordinality</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;ordinality&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1554"><a href="#Generator.table_sql-1554"><span class="linenos">1554</span></a> <span class="k">if</span> <span class="n">ordinality</span><span class="p">:</span>
-</span><span id="Generator.table_sql-1555"><a href="#Generator.table_sql-1555"><span class="linenos">1555</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.table_sql-1556"><a href="#Generator.table_sql-1556"><span class="linenos">1556</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.table_sql-1557"><a href="#Generator.table_sql-1557"><span class="linenos">1557</span></a>
-</span><span id="Generator.table_sql-1558"><a href="#Generator.table_sql-1558"><span class="linenos">1558</span></a> <span class="n">when</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;when&quot;</span><span class="p">)</span>
-</span><span id="Generator.table_sql-1559"><a href="#Generator.table_sql-1559"><span class="linenos">1559</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
-</span><span id="Generator.table_sql-1560"><a href="#Generator.table_sql-1560"><span class="linenos">1560</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"> </span><span class="si">{</span><span class="n">when</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.table_sql-1529"><a href="#Generator.table_sql-1529"><span class="linenos">1529</span></a> <span class="k">def</span> <span class="nf">table_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">Table</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.table_sql-1530"><a href="#Generator.table_sql-1530"><span class="linenos">1530</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.table_sql-1531"><a href="#Generator.table_sql-1531"><span class="linenos">1531</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">part</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1532"><a href="#Generator.table_sql-1532"><span class="linenos">1532</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator.table_sql-1533"><a href="#Generator.table_sql-1533"><span class="linenos">1533</span></a> <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;catalog&quot;</span><span class="p">),</span>
+</span><span id="Generator.table_sql-1534"><a href="#Generator.table_sql-1534"><span class="linenos">1534</span></a> <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;db&quot;</span><span class="p">),</span>
+</span><span id="Generator.table_sql-1535"><a href="#Generator.table_sql-1535"><span class="linenos">1535</span></a> <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;this&quot;</span><span class="p">),</span>
+</span><span id="Generator.table_sql-1536"><a href="#Generator.table_sql-1536"><span class="linenos">1536</span></a> <span class="p">)</span>
+</span><span id="Generator.table_sql-1537"><a href="#Generator.table_sql-1537"><span class="linenos">1537</span></a> <span class="k">if</span> <span class="n">part</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="Generator.table_sql-1538"><a href="#Generator.table_sql-1538"><span class="linenos">1538</span></a> <span class="p">)</span>
+</span><span id="Generator.table_sql-1539"><a href="#Generator.table_sql-1539"><span class="linenos">1539</span></a>
+</span><span id="Generator.table_sql-1540"><a href="#Generator.table_sql-1540"><span class="linenos">1540</span></a> <span class="n">version</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;version&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1541"><a href="#Generator.table_sql-1541"><span class="linenos">1541</span></a> <span class="n">version</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">version</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1542"><a href="#Generator.table_sql-1542"><span class="linenos">1542</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1543"><a href="#Generator.table_sql-1543"><span class="linenos">1543</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1544"><a href="#Generator.table_sql-1544"><span class="linenos">1544</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1545"><a href="#Generator.table_sql-1545"><span class="linenos">1545</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">hints</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_HINTS</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1546"><a href="#Generator.table_sql-1546"><span class="linenos">1546</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1547"><a href="#Generator.table_sql-1547"><span class="linenos">1547</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1548"><a href="#Generator.table_sql-1548"><span class="linenos">1548</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1549"><a href="#Generator.table_sql-1549"><span class="linenos">1549</span></a> <span class="n">laterals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1550"><a href="#Generator.table_sql-1550"><span class="linenos">1550</span></a>
+</span><span id="Generator.table_sql-1551"><a href="#Generator.table_sql-1551"><span class="linenos">1551</span></a> <span class="n">file_format</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;format&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1552"><a href="#Generator.table_sql-1552"><span class="linenos">1552</span></a> <span class="k">if</span> <span class="n">file_format</span><span class="p">:</span>
+</span><span id="Generator.table_sql-1553"><a href="#Generator.table_sql-1553"><span class="linenos">1553</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1554"><a href="#Generator.table_sql-1554"><span class="linenos">1554</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, PATTERN =&gt; </span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1555"><a href="#Generator.table_sql-1555"><span class="linenos">1555</span></a> <span class="n">file_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; (FILE_FORMAT =&gt; </span><span class="si">{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.table_sql-1556"><a href="#Generator.table_sql-1556"><span class="linenos">1556</span></a>
+</span><span id="Generator.table_sql-1557"><a href="#Generator.table_sql-1557"><span class="linenos">1557</span></a> <span class="n">ordinality</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;ordinality&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.table_sql-1558"><a href="#Generator.table_sql-1558"><span class="linenos">1558</span></a> <span class="k">if</span> <span class="n">ordinality</span><span class="p">:</span>
+</span><span id="Generator.table_sql-1559"><a href="#Generator.table_sql-1559"><span class="linenos">1559</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.table_sql-1560"><a href="#Generator.table_sql-1560"><span class="linenos">1560</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator.table_sql-1561"><a href="#Generator.table_sql-1561"><span class="linenos">1561</span></a>
-</span><span id="Generator.table_sql-1562"><a href="#Generator.table_sql-1562"><span class="linenos">1562</span></a> <span class="k">return</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="n">version</span><span class="si">}{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}{</span><span class="n">ordinality</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.table_sql-1562"><a href="#Generator.table_sql-1562"><span class="linenos">1562</span></a> <span class="n">when</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;when&quot;</span><span class="p">)</span>
+</span><span id="Generator.table_sql-1563"><a href="#Generator.table_sql-1563"><span class="linenos">1563</span></a> <span class="k">if</span> <span class="n">when</span><span class="p">:</span>
+</span><span id="Generator.table_sql-1564"><a href="#Generator.table_sql-1564"><span class="linenos">1564</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"> </span><span class="si">{</span><span class="n">when</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.table_sql-1565"><a href="#Generator.table_sql-1565"><span class="linenos">1565</span></a>
+</span><span id="Generator.table_sql-1566"><a href="#Generator.table_sql-1566"><span class="linenos">1566</span></a> <span class="k">return</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="n">version</span><span class="si">}{</span><span class="n">file_format</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">hints</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">laterals</span><span class="si">}{</span><span class="n">ordinality</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11685,46 +11728,46 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablesample_sql-1564"><a href="#Generator.tablesample_sql-1564"><span class="linenos">1564</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
-</span><span id="Generator.tablesample_sql-1565"><a href="#Generator.tablesample_sql-1565"><span class="linenos">1565</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.tablesample_sql-1566"><a href="#Generator.tablesample_sql-1566"><span class="linenos">1566</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="Generator.tablesample_sql-1567"><a href="#Generator.tablesample_sql-1567"><span class="linenos">1567</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="Generator.tablesample_sql-1568"><a href="#Generator.tablesample_sql-1568"><span class="linenos">1568</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.tablesample_sql-1569"><a href="#Generator.tablesample_sql-1569"><span class="linenos">1569</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1570"><a href="#Generator.tablesample_sql-1570"><span class="linenos">1570</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1571"><a href="#Generator.tablesample_sql-1571"><span class="linenos">1571</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Generator.tablesample_sql-1572"><a href="#Generator.tablesample_sql-1572"><span class="linenos">1572</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1573"><a href="#Generator.tablesample_sql-1573"><span class="linenos">1573</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1574"><a href="#Generator.tablesample_sql-1574"><span class="linenos">1574</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</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="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.tablesample_sql-1575"><a href="#Generator.tablesample_sql-1575"><span class="linenos">1575</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1576"><a href="#Generator.tablesample_sql-1576"><span class="linenos">1576</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1577"><a href="#Generator.tablesample_sql-1577"><span class="linenos">1577</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1578"><a href="#Generator.tablesample_sql-1578"><span class="linenos">1578</span></a>
-</span><span id="Generator.tablesample_sql-1579"><a href="#Generator.tablesample_sql-1579"><span class="linenos">1579</span></a> <span class="n">method</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;method&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1580"><a href="#Generator.tablesample_sql-1580"><span class="linenos">1580</span></a> <span class="n">method</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1581"><a href="#Generator.tablesample_sql-1581"><span class="linenos">1581</span></a> <span class="n">numerator</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;bucket_numerator&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1582"><a href="#Generator.tablesample_sql-1582"><span class="linenos">1582</span></a> <span class="n">denominator</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;bucket_denominator&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1583"><a href="#Generator.tablesample_sql-1583"><span class="linenos">1583</span></a> <span class="n">field</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;bucket_field&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1584"><a href="#Generator.tablesample_sql-1584"><span class="linenos">1584</span></a> <span class="n">field</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">field</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1585"><a href="#Generator.tablesample_sql-1585"><span class="linenos">1585</span></a> <span class="n">bucket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;BUCKET </span><span class="si">{</span><span class="n">numerator</span><span class="si">}</span><span class="s2"> OUT OF </span><span class="si">{</span><span class="n">denominator</span><span class="si">}{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">numerator</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1586"><a href="#Generator.tablesample_sql-1586"><span class="linenos">1586</span></a> <span class="n">seed</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;seed&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1587"><a href="#Generator.tablesample_sql-1587"><span class="linenos">1587</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SEED_KEYWORD</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">seed</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">seed</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1588"><a href="#Generator.tablesample_sql-1588"><span class="linenos">1588</span></a>
-</span><span id="Generator.tablesample_sql-1589"><a href="#Generator.tablesample_sql-1589"><span class="linenos">1589</span></a> <span class="n">size</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;size&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1590"><a href="#Generator.tablesample_sql-1590"><span class="linenos">1590</span></a> <span class="k">if</span> <span class="n">size</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_ROWS</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1591"><a href="#Generator.tablesample_sql-1591"><span class="linenos">1591</span></a> <span class="n">size</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">size</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablesample_sql-1568"><a href="#Generator.tablesample_sql-1568"><span class="linenos">1568</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="Generator.tablesample_sql-1569"><a href="#Generator.tablesample_sql-1569"><span class="linenos">1569</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.tablesample_sql-1570"><a href="#Generator.tablesample_sql-1570"><span class="linenos">1570</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="Generator.tablesample_sql-1571"><a href="#Generator.tablesample_sql-1571"><span class="linenos">1571</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
+</span><span id="Generator.tablesample_sql-1572"><a href="#Generator.tablesample_sql-1572"><span class="linenos">1572</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.tablesample_sql-1573"><a href="#Generator.tablesample_sql-1573"><span class="linenos">1573</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1574"><a href="#Generator.tablesample_sql-1574"><span class="linenos">1574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1575"><a href="#Generator.tablesample_sql-1575"><span class="linenos">1575</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Generator.tablesample_sql-1576"><a href="#Generator.tablesample_sql-1576"><span class="linenos">1576</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1577"><a href="#Generator.tablesample_sql-1577"><span class="linenos">1577</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1578"><a href="#Generator.tablesample_sql-1578"><span class="linenos">1578</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</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="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.tablesample_sql-1579"><a href="#Generator.tablesample_sql-1579"><span class="linenos">1579</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1580"><a href="#Generator.tablesample_sql-1580"><span class="linenos">1580</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1581"><a href="#Generator.tablesample_sql-1581"><span class="linenos">1581</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablesample_sql-1582"><a href="#Generator.tablesample_sql-1582"><span class="linenos">1582</span></a>
+</span><span id="Generator.tablesample_sql-1583"><a href="#Generator.tablesample_sql-1583"><span class="linenos">1583</span></a> <span class="n">method</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;method&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1584"><a href="#Generator.tablesample_sql-1584"><span class="linenos">1584</span></a> <span class="n">method</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablesample_sql-1585"><a href="#Generator.tablesample_sql-1585"><span class="linenos">1585</span></a> <span class="n">numerator</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;bucket_numerator&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1586"><a href="#Generator.tablesample_sql-1586"><span class="linenos">1586</span></a> <span class="n">denominator</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;bucket_denominator&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1587"><a href="#Generator.tablesample_sql-1587"><span class="linenos">1587</span></a> <span class="n">field</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;bucket_field&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1588"><a href="#Generator.tablesample_sql-1588"><span class="linenos">1588</span></a> <span class="n">field</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">field</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablesample_sql-1589"><a href="#Generator.tablesample_sql-1589"><span class="linenos">1589</span></a> <span class="n">bucket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;BUCKET </span><span class="si">{</span><span class="n">numerator</span><span class="si">}</span><span class="s2"> OUT OF </span><span class="si">{</span><span class="n">denominator</span><span class="si">}{</span><span class="n">field</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">numerator</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablesample_sql-1590"><a href="#Generator.tablesample_sql-1590"><span class="linenos">1590</span></a> <span class="n">seed</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;seed&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1591"><a href="#Generator.tablesample_sql-1591"><span class="linenos">1591</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SEED_KEYWORD</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">seed</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">seed</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator.tablesample_sql-1592"><a href="#Generator.tablesample_sql-1592"><span class="linenos">1592</span></a>
-</span><span id="Generator.tablesample_sql-1593"><a href="#Generator.tablesample_sql-1593"><span class="linenos">1593</span></a> <span class="n">percent</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;percent&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1594"><a href="#Generator.tablesample_sql-1594"><span class="linenos">1594</span></a> <span class="k">if</span> <span class="n">percent</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1595"><a href="#Generator.tablesample_sql-1595"><span class="linenos">1595</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">percent</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
+</span><span id="Generator.tablesample_sql-1593"><a href="#Generator.tablesample_sql-1593"><span class="linenos">1593</span></a> <span class="n">size</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;size&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1594"><a href="#Generator.tablesample_sql-1594"><span class="linenos">1594</span></a> <span class="k">if</span> <span class="n">size</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_ROWS</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1595"><a href="#Generator.tablesample_sql-1595"><span class="linenos">1595</span></a> <span class="n">size</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">size</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span><span id="Generator.tablesample_sql-1596"><a href="#Generator.tablesample_sql-1596"><span class="linenos">1596</span></a>
-</span><span id="Generator.tablesample_sql-1597"><a href="#Generator.tablesample_sql-1597"><span class="linenos">1597</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">bucket</span><span class="si">}{</span><span class="n">percent</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.tablesample_sql-1598"><a href="#Generator.tablesample_sql-1598"><span class="linenos">1598</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_REQUIRES_PARENS</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1599"><a href="#Generator.tablesample_sql-1599"><span class="linenos">1599</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.tablesample_sql-1597"><a href="#Generator.tablesample_sql-1597"><span class="linenos">1597</span></a> <span class="n">percent</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;percent&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1598"><a href="#Generator.tablesample_sql-1598"><span class="linenos">1598</span></a> <span class="k">if</span> <span class="n">percent</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1599"><a href="#Generator.tablesample_sql-1599"><span class="linenos">1599</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">percent</span><span class="si">}</span><span class="s2"> PERCENT&quot;</span>
</span><span id="Generator.tablesample_sql-1600"><a href="#Generator.tablesample_sql-1600"><span class="linenos">1600</span></a>
-</span><span id="Generator.tablesample_sql-1601"><a href="#Generator.tablesample_sql-1601"><span class="linenos">1601</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Generator.tablesample_sql-1602"><a href="#Generator.tablesample_sql-1602"><span class="linenos">1602</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">tablesample_keyword</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_KEYWORDS</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">method</span><span class="si">}{</span><span class="n">expr</span><span class="si">}{</span><span class="n">seed</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.tablesample_sql-1603"><a href="#Generator.tablesample_sql-1603"><span class="linenos">1603</span></a> <span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1601"><a href="#Generator.tablesample_sql-1601"><span class="linenos">1601</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">bucket</span><span class="si">}{</span><span class="n">percent</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.tablesample_sql-1602"><a href="#Generator.tablesample_sql-1602"><span class="linenos">1602</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_REQUIRES_PARENS</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1603"><a href="#Generator.tablesample_sql-1603"><span class="linenos">1603</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.tablesample_sql-1604"><a href="#Generator.tablesample_sql-1604"><span class="linenos">1604</span></a>
+</span><span id="Generator.tablesample_sql-1605"><a href="#Generator.tablesample_sql-1605"><span class="linenos">1605</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Generator.tablesample_sql-1606"><a href="#Generator.tablesample_sql-1606"><span class="linenos">1606</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">tablesample_keyword</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_KEYWORDS</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">method</span><span class="si">}{</span><span class="n">expr</span><span class="si">}{</span><span class="n">seed</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.tablesample_sql-1607"><a href="#Generator.tablesample_sql-1607"><span class="linenos">1607</span></a> <span class="p">)</span>
</span></pre></div>
@@ -11742,30 +11785,30 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.pivot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pivot_sql-1605"><a href="#Generator.pivot_sql-1605"><span class="linenos">1605</span></a> <span class="k">def</span> <span class="nf">pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.pivot_sql-1606"><a href="#Generator.pivot_sql-1606"><span class="linenos">1606</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1607"><a href="#Generator.pivot_sql-1607"><span class="linenos">1607</span></a>
-</span><span id="Generator.pivot_sql-1608"><a href="#Generator.pivot_sql-1608"><span class="linenos">1608</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Generator.pivot_sql-1609"><a href="#Generator.pivot_sql-1609"><span class="linenos">1609</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1610"><a href="#Generator.pivot_sql-1610"><span class="linenos">1610</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.pivot_sql-1611"><a href="#Generator.pivot_sql-1611"><span class="linenos">1611</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNPIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.pivot_sql-1612"><a href="#Generator.pivot_sql-1612"><span class="linenos">1612</span></a>
-</span><span id="Generator.pivot_sql-1613"><a href="#Generator.pivot_sql-1613"><span class="linenos">1613</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.pivot_sql-1614"><a href="#Generator.pivot_sql-1614"><span class="linenos">1614</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1615"><a href="#Generator.pivot_sql-1615"><span class="linenos">1615</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.pivot_sql-1616"><a href="#Generator.pivot_sql-1616"><span class="linenos">1616</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1617"><a href="#Generator.pivot_sql-1617"><span class="linenos">1617</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.pivot_sql-1618"><a href="#Generator.pivot_sql-1618"><span class="linenos">1618</span></a>
-</span><span id="Generator.pivot_sql-1619"><a href="#Generator.pivot_sql-1619"><span class="linenos">1619</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1620"><a href="#Generator.pivot_sql-1620"><span class="linenos">1620</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.pivot_sql-1621"><a href="#Generator.pivot_sql-1621"><span class="linenos">1621</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="s2">&quot;UNPIVOT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
-</span><span id="Generator.pivot_sql-1622"><a href="#Generator.pivot_sql-1622"><span class="linenos">1622</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1623"><a href="#Generator.pivot_sql-1623"><span class="linenos">1623</span></a> <span class="n">include_nulls</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;include_nulls&quot;</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1624"><a href="#Generator.pivot_sql-1624"><span class="linenos">1624</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.pivot_sql-1625"><a href="#Generator.pivot_sql-1625"><span class="linenos">1625</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
-</span><span id="Generator.pivot_sql-1626"><a href="#Generator.pivot_sql-1626"><span class="linenos">1626</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.pivot_sql-1627"><a href="#Generator.pivot_sql-1627"><span class="linenos">1627</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.pivot_sql-1628"><a href="#Generator.pivot_sql-1628"><span class="linenos">1628</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pivot_sql-1609"><a href="#Generator.pivot_sql-1609"><span class="linenos">1609</span></a> <span class="k">def</span> <span class="nf">pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1610"><a href="#Generator.pivot_sql-1610"><span class="linenos">1610</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1611"><a href="#Generator.pivot_sql-1611"><span class="linenos">1611</span></a>
+</span><span id="Generator.pivot_sql-1612"><a href="#Generator.pivot_sql-1612"><span class="linenos">1612</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1613"><a href="#Generator.pivot_sql-1613"><span class="linenos">1613</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1614"><a href="#Generator.pivot_sql-1614"><span class="linenos">1614</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1615"><a href="#Generator.pivot_sql-1615"><span class="linenos">1615</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNPIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.pivot_sql-1616"><a href="#Generator.pivot_sql-1616"><span class="linenos">1616</span></a>
+</span><span id="Generator.pivot_sql-1617"><a href="#Generator.pivot_sql-1617"><span class="linenos">1617</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ON&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.pivot_sql-1618"><a href="#Generator.pivot_sql-1618"><span class="linenos">1618</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1619"><a href="#Generator.pivot_sql-1619"><span class="linenos">1619</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;USING&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.pivot_sql-1620"><a href="#Generator.pivot_sql-1620"><span class="linenos">1620</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1621"><a href="#Generator.pivot_sql-1621"><span class="linenos">1621</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PIVOT </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">group</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.pivot_sql-1622"><a href="#Generator.pivot_sql-1622"><span class="linenos">1622</span></a>
+</span><span id="Generator.pivot_sql-1623"><a href="#Generator.pivot_sql-1623"><span class="linenos">1623</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1624"><a href="#Generator.pivot_sql-1624"><span class="linenos">1624</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.pivot_sql-1625"><a href="#Generator.pivot_sql-1625"><span class="linenos">1625</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="s2">&quot;UNPIVOT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
+</span><span id="Generator.pivot_sql-1626"><a href="#Generator.pivot_sql-1626"><span class="linenos">1626</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1627"><a href="#Generator.pivot_sql-1627"><span class="linenos">1627</span></a> <span class="n">include_nulls</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;include_nulls&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1628"><a href="#Generator.pivot_sql-1628"><span class="linenos">1628</span></a> <span class="k">if</span> <span class="n">include_nulls</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1629"><a href="#Generator.pivot_sql-1629"><span class="linenos">1629</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot; INCLUDE NULLS &quot;</span> <span class="k">if</span> <span class="n">include_nulls</span> <span class="k">else</span> <span class="s2">&quot; EXCLUDE NULLS &quot;</span>
+</span><span id="Generator.pivot_sql-1630"><a href="#Generator.pivot_sql-1630"><span class="linenos">1630</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.pivot_sql-1631"><a href="#Generator.pivot_sql-1631"><span class="linenos">1631</span></a> <span class="n">nulls</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.pivot_sql-1632"><a href="#Generator.pivot_sql-1632"><span class="linenos">1632</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">direction</span><span class="si">}{</span><span class="n">nulls</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">field</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11783,11 +11826,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.version_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.version_sql-1630"><a href="#Generator.version_sql-1630"><span class="linenos">1630</span></a> <span class="k">def</span> <span class="nf">version_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">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.version_sql-1631"><a href="#Generator.version_sql-1631"><span class="linenos">1631</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.version_sql-1632"><a href="#Generator.version_sql-1632"><span class="linenos">1632</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.version_sql-1633"><a href="#Generator.version_sql-1633"><span class="linenos">1633</span></a> <span class="n">expr</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="Generator.version_sql-1634"><a href="#Generator.version_sql-1634"><span class="linenos">1634</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.version_sql-1634"><a href="#Generator.version_sql-1634"><span class="linenos">1634</span></a> <span class="k">def</span> <span class="nf">version_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">Version</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.version_sql-1635"><a href="#Generator.version_sql-1635"><span class="linenos">1635</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.version_sql-1636"><a href="#Generator.version_sql-1636"><span class="linenos">1636</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.version_sql-1637"><a href="#Generator.version_sql-1637"><span class="linenos">1637</span></a> <span class="n">expr</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="Generator.version_sql-1638"><a href="#Generator.version_sql-1638"><span class="linenos">1638</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11805,8 +11848,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.tuple_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tuple_sql-1636"><a href="#Generator.tuple_sql-1636"><span class="linenos">1636</span></a> <span class="k">def</span> <span class="nf">tuple_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">Tuple</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tuple_sql-1637"><a href="#Generator.tuple_sql-1637"><span class="linenos">1637</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tuple_sql-1640"><a href="#Generator.tuple_sql-1640"><span class="linenos">1640</span></a> <span class="k">def</span> <span class="nf">tuple_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">Tuple</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tuple_sql-1641"><a href="#Generator.tuple_sql-1641"><span class="linenos">1641</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -11824,20 +11867,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.update_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.update_sql-1639"><a href="#Generator.update_sql-1639"><span class="linenos">1639</span></a> <span class="k">def</span> <span class="nf">update_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">Update</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.update_sql-1640"><a href="#Generator.update_sql-1640"><span class="linenos">1640</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1641"><a href="#Generator.update_sql-1641"><span class="linenos">1641</span></a> <span class="n">set_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1642"><a href="#Generator.update_sql-1642"><span class="linenos">1642</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1643"><a href="#Generator.update_sql-1643"><span class="linenos">1643</span></a> <span class="n">where_sql</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1644"><a href="#Generator.update_sql-1644"><span class="linenos">1644</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1645"><a href="#Generator.update_sql-1645"><span class="linenos">1645</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1646"><a href="#Generator.update_sql-1646"><span class="linenos">1646</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.update_sql-1647"><a href="#Generator.update_sql-1647"><span class="linenos">1647</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
-</span><span id="Generator.update_sql-1648"><a href="#Generator.update_sql-1648"><span class="linenos">1648</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.update_sql-1649"><a href="#Generator.update_sql-1649"><span class="linenos">1649</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.update_sql-1650"><a href="#Generator.update_sql-1650"><span class="linenos">1650</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.update_sql-1651"><a href="#Generator.update_sql-1651"><span class="linenos">1651</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.update_sql-1652"><a href="#Generator.update_sql-1652"><span class="linenos">1652</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.update_sql-1643"><a href="#Generator.update_sql-1643"><span class="linenos">1643</span></a> <span class="k">def</span> <span class="nf">update_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">Update</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.update_sql-1644"><a href="#Generator.update_sql-1644"><span class="linenos">1644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1645"><a href="#Generator.update_sql-1645"><span class="linenos">1645</span></a> <span class="n">set_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1646"><a href="#Generator.update_sql-1646"><span class="linenos">1646</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1647"><a href="#Generator.update_sql-1647"><span class="linenos">1647</span></a> <span class="n">where_sql</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1648"><a href="#Generator.update_sql-1648"><span class="linenos">1648</span></a> <span class="n">returning</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;returning&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1649"><a href="#Generator.update_sql-1649"><span class="linenos">1649</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1650"><a href="#Generator.update_sql-1650"><span class="linenos">1650</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.update_sql-1651"><a href="#Generator.update_sql-1651"><span class="linenos">1651</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">RETURNING_END</span><span class="p">:</span>
+</span><span id="Generator.update_sql-1652"><a href="#Generator.update_sql-1652"><span class="linenos">1652</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}{</span><span class="n">returning</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.update_sql-1653"><a href="#Generator.update_sql-1653"><span class="linenos">1653</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.update_sql-1654"><a href="#Generator.update_sql-1654"><span class="linenos">1654</span></a> <span class="n">expression_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">returning</span><span class="si">}{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.update_sql-1655"><a href="#Generator.update_sql-1655"><span class="linenos">1655</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET </span><span class="si">{</span><span class="n">set_sql</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">order</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.update_sql-1656"><a href="#Generator.update_sql-1656"><span class="linenos">1656</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -11855,47 +11898,47 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.values_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.values_sql-1654"><a href="#Generator.values_sql-1654"><span class="linenos">1654</span></a> <span class="k">def</span> <span class="nf">values_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">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.values_sql-1655"><a href="#Generator.values_sql-1655"><span class="linenos">1655</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
-</span><span id="Generator.values_sql-1656"><a href="#Generator.values_sql-1656"><span class="linenos">1656</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
-</span><span id="Generator.values_sql-1657"><a href="#Generator.values_sql-1657"><span class="linenos">1657</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1658"><a href="#Generator.values_sql-1658"><span class="linenos">1658</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1659"><a href="#Generator.values_sql-1659"><span class="linenos">1659</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;VALUES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.values_sql-1660"><a href="#Generator.values_sql-1660"><span class="linenos">1660</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.values_sql-1661"><a href="#Generator.values_sql-1661"><span class="linenos">1661</span></a> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.values_sql-1662"><a href="#Generator.values_sql-1662"><span class="linenos">1662</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAP_DERIVED_VALUES</span> <span class="ow">and</span> <span class="p">(</span><span class="n">alias</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">))</span>
-</span><span id="Generator.values_sql-1663"><a href="#Generator.values_sql-1663"><span class="linenos">1663</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator.values_sql-1664"><a href="#Generator.values_sql-1664"><span class="linenos">1664</span></a> <span class="p">)</span>
-</span><span id="Generator.values_sql-1665"><a href="#Generator.values_sql-1665"><span class="linenos">1665</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator.values_sql-1666"><a href="#Generator.values_sql-1666"><span class="linenos">1666</span></a>
-</span><span id="Generator.values_sql-1667"><a href="#Generator.values_sql-1667"><span class="linenos">1667</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
-</span><span id="Generator.values_sql-1668"><a href="#Generator.values_sql-1668"><span class="linenos">1668</span></a> <span class="n">alias_node</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1669"><a href="#Generator.values_sql-1669"><span class="linenos">1669</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">columns</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.values_sql-1658"><a href="#Generator.values_sql-1658"><span class="linenos">1658</span></a> <span class="k">def</span> <span class="nf">values_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">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.values_sql-1659"><a href="#Generator.values_sql-1659"><span class="linenos">1659</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
+</span><span id="Generator.values_sql-1660"><a href="#Generator.values_sql-1660"><span class="linenos">1660</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_AS_TABLE</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
+</span><span id="Generator.values_sql-1661"><a href="#Generator.values_sql-1661"><span class="linenos">1661</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1662"><a href="#Generator.values_sql-1662"><span class="linenos">1662</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1663"><a href="#Generator.values_sql-1663"><span class="linenos">1663</span></a> <span class="n">values</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;VALUES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.values_sql-1664"><a href="#Generator.values_sql-1664"><span class="linenos">1664</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.values_sql-1665"><a href="#Generator.values_sql-1665"><span class="linenos">1665</span></a> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.values_sql-1666"><a href="#Generator.values_sql-1666"><span class="linenos">1666</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAP_DERIVED_VALUES</span> <span class="ow">and</span> <span class="p">(</span><span class="n">alias</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">))</span>
+</span><span id="Generator.values_sql-1667"><a href="#Generator.values_sql-1667"><span class="linenos">1667</span></a> <span class="k">else</span> <span class="n">values</span>
+</span><span id="Generator.values_sql-1668"><a href="#Generator.values_sql-1668"><span class="linenos">1668</span></a> <span class="p">)</span>
+</span><span id="Generator.values_sql-1669"><a href="#Generator.values_sql-1669"><span class="linenos">1669</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">values</span>
</span><span id="Generator.values_sql-1670"><a href="#Generator.values_sql-1670"><span class="linenos">1670</span></a>
-</span><span id="Generator.values_sql-1671"><a href="#Generator.values_sql-1671"><span class="linenos">1671</span></a> <span class="n">selects</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.values_sql-1672"><a href="#Generator.values_sql-1672"><span class="linenos">1672</span></a>
-</span><span id="Generator.values_sql-1673"><a href="#Generator.values_sql-1673"><span class="linenos">1673</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Generator.values_sql-1674"><a href="#Generator.values_sql-1674"><span class="linenos">1674</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator.values_sql-1675"><a href="#Generator.values_sql-1675"><span class="linenos">1675</span></a>
-</span><span id="Generator.values_sql-1676"><a href="#Generator.values_sql-1676"><span class="linenos">1676</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
-</span><span id="Generator.values_sql-1677"><a href="#Generator.values_sql-1677"><span class="linenos">1677</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator.values_sql-1678"><a href="#Generator.values_sql-1678"><span class="linenos">1678</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1679"><a href="#Generator.values_sql-1679"><span class="linenos">1679</span></a> <span class="p">]</span>
-</span><span id="Generator.values_sql-1680"><a href="#Generator.values_sql-1680"><span class="linenos">1680</span></a>
-</span><span id="Generator.values_sql-1681"><a href="#Generator.values_sql-1681"><span class="linenos">1681</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
-</span><span id="Generator.values_sql-1682"><a href="#Generator.values_sql-1682"><span class="linenos">1682</span></a>
-</span><span id="Generator.values_sql-1683"><a href="#Generator.values_sql-1683"><span class="linenos">1683</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.values_sql-1684"><a href="#Generator.values_sql-1684"><span class="linenos">1684</span></a> <span class="c1"># This may result in poor performance for large-cardinality `VALUES` tables, due to</span>
-</span><span id="Generator.values_sql-1685"><a href="#Generator.values_sql-1685"><span class="linenos">1685</span></a> <span class="c1"># the deep nesting of the resulting exp.Unions. If this is a problem, either increase</span>
-</span><span id="Generator.values_sql-1686"><a href="#Generator.values_sql-1686"><span class="linenos">1686</span></a> <span class="c1"># `sys.setrecursionlimit` to avoid RecursionErrors, or don&#39;t set `pretty`.</span>
-</span><span id="Generator.values_sql-1687"><a href="#Generator.values_sql-1687"><span class="linenos">1687</span></a> <span class="n">subqueryable</span> <span class="o">=</span> <span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">selects</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1688"><a href="#Generator.values_sql-1688"><span class="linenos">1688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span>
-</span><span id="Generator.values_sql-1689"><a href="#Generator.values_sql-1689"><span class="linenos">1689</span></a> <span class="n">subqueryable</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1690"><a href="#Generator.values_sql-1690"><span class="linenos">1690</span></a> <span class="p">)</span>
-</span><span id="Generator.values_sql-1691"><a href="#Generator.values_sql-1691"><span class="linenos">1691</span></a>
-</span><span id="Generator.values_sql-1692"><a href="#Generator.values_sql-1692"><span class="linenos">1692</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">alias_node</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias_node</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.values_sql-1693"><a href="#Generator.values_sql-1693"><span class="linenos">1693</span></a> <span class="n">unions</span> <span class="o">=</span> <span class="s2">&quot; UNION ALL &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">select</span><span class="p">)</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">)</span>
-</span><span id="Generator.values_sql-1694"><a href="#Generator.values_sql-1694"><span class="linenos">1694</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">unions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.values_sql-1671"><a href="#Generator.values_sql-1671"><span class="linenos">1671</span></a> <span class="c1"># Converts `VALUES...` expression into a series of select unions.</span>
+</span><span id="Generator.values_sql-1672"><a href="#Generator.values_sql-1672"><span class="linenos">1672</span></a> <span class="n">alias_node</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1673"><a href="#Generator.values_sql-1673"><span class="linenos">1673</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="Generator.values_sql-1674"><a href="#Generator.values_sql-1674"><span class="linenos">1674</span></a>
+</span><span id="Generator.values_sql-1675"><a href="#Generator.values_sql-1675"><span class="linenos">1675</span></a> <span class="n">selects</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.values_sql-1676"><a href="#Generator.values_sql-1676"><span class="linenos">1676</span></a>
+</span><span id="Generator.values_sql-1677"><a href="#Generator.values_sql-1677"><span class="linenos">1677</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Generator.values_sql-1678"><a href="#Generator.values_sql-1678"><span class="linenos">1678</span></a> <span class="n">row</span> <span class="o">=</span> <span class="n">tup</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator.values_sql-1679"><a href="#Generator.values_sql-1679"><span class="linenos">1679</span></a>
+</span><span id="Generator.values_sql-1680"><a href="#Generator.values_sql-1680"><span class="linenos">1680</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
+</span><span id="Generator.values_sql-1681"><a href="#Generator.values_sql-1681"><span class="linenos">1681</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator.values_sql-1682"><a href="#Generator.values_sql-1682"><span class="linenos">1682</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1683"><a href="#Generator.values_sql-1683"><span class="linenos">1683</span></a> <span class="p">]</span>
+</span><span id="Generator.values_sql-1684"><a href="#Generator.values_sql-1684"><span class="linenos">1684</span></a>
+</span><span id="Generator.values_sql-1685"><a href="#Generator.values_sql-1685"><span class="linenos">1685</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
+</span><span id="Generator.values_sql-1686"><a href="#Generator.values_sql-1686"><span class="linenos">1686</span></a>
+</span><span id="Generator.values_sql-1687"><a href="#Generator.values_sql-1687"><span class="linenos">1687</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.values_sql-1688"><a href="#Generator.values_sql-1688"><span class="linenos">1688</span></a> <span class="c1"># This may result in poor performance for large-cardinality `VALUES` tables, due to</span>
+</span><span id="Generator.values_sql-1689"><a href="#Generator.values_sql-1689"><span class="linenos">1689</span></a> <span class="c1"># the deep nesting of the resulting exp.Unions. If this is a problem, either increase</span>
+</span><span id="Generator.values_sql-1690"><a href="#Generator.values_sql-1690"><span class="linenos">1690</span></a> <span class="c1"># `sys.setrecursionlimit` to avoid RecursionErrors, or don&#39;t set `pretty`.</span>
+</span><span id="Generator.values_sql-1691"><a href="#Generator.values_sql-1691"><span class="linenos">1691</span></a> <span class="n">subqueryable</span> <span class="o">=</span> <span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">selects</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1692"><a href="#Generator.values_sql-1692"><span class="linenos">1692</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span>
+</span><span id="Generator.values_sql-1693"><a href="#Generator.values_sql-1693"><span class="linenos">1693</span></a> <span class="n">subqueryable</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias_node</span> <span class="ow">and</span> <span class="n">alias_node</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1694"><a href="#Generator.values_sql-1694"><span class="linenos">1694</span></a> <span class="p">)</span>
+</span><span id="Generator.values_sql-1695"><a href="#Generator.values_sql-1695"><span class="linenos">1695</span></a>
+</span><span id="Generator.values_sql-1696"><a href="#Generator.values_sql-1696"><span class="linenos">1696</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">alias_node</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias_node</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.values_sql-1697"><a href="#Generator.values_sql-1697"><span class="linenos">1697</span></a> <span class="n">unions</span> <span class="o">=</span> <span class="s2">&quot; UNION ALL &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">select</span><span class="p">)</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">)</span>
+</span><span id="Generator.values_sql-1698"><a href="#Generator.values_sql-1698"><span class="linenos">1698</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">unions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -11913,8 +11956,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.var_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.var_sql-1696"><a href="#Generator.var_sql-1696"><span class="linenos">1696</span></a> <span class="k">def</span> <span class="nf">var_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">Var</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.var_sql-1697"><a href="#Generator.var_sql-1697"><span class="linenos">1697</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.var_sql-1700"><a href="#Generator.var_sql-1700"><span class="linenos">1700</span></a> <span class="k">def</span> <span class="nf">var_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">Var</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.var_sql-1701"><a href="#Generator.var_sql-1701"><span class="linenos">1701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -11932,10 +11975,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.into_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.into_sql-1699"><a href="#Generator.into_sql-1699"><span class="linenos">1699</span></a> <span class="k">def</span> <span class="nf">into_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">Into</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.into_sql-1700"><a href="#Generator.into_sql-1700"><span class="linenos">1700</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.into_sql-1701"><a href="#Generator.into_sql-1701"><span class="linenos">1701</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unlogged&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.into_sql-1702"><a href="#Generator.into_sql-1702"><span class="linenos">1702</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;INTO&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">temporary</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">unlogged</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator.into_sql-1703"><a href="#Generator.into_sql-1703"><span class="linenos">1703</span></a> <span class="k">def</span> <span class="nf">into_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">Into</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.into_sql-1704"><a href="#Generator.into_sql-1704"><span class="linenos">1704</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;temporary&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.into_sql-1705"><a href="#Generator.into_sql-1705"><span class="linenos">1705</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unlogged&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.into_sql-1706"><a href="#Generator.into_sql-1706"><span class="linenos">1706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;INTO&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">temporary</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">unlogged</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -11953,8 +11996,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.from_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.from_sql-1704"><a href="#Generator.from_sql-1704"><span class="linenos">1704</span></a> <span class="k">def</span> <span class="nf">from_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">From</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.from_sql-1705"><a href="#Generator.from_sql-1705"><span class="linenos">1705</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator.from_sql-1708"><a href="#Generator.from_sql-1708"><span class="linenos">1708</span></a> <span class="k">def</span> <span class="nf">from_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">From</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.from_sql-1709"><a href="#Generator.from_sql-1709"><span class="linenos">1709</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;FROM&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -11972,43 +12015,43 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.group_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.group_sql-1707"><a href="#Generator.group_sql-1707"><span class="linenos">1707</span></a> <span class="k">def</span> <span class="nf">group_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">Group</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1708"><a href="#Generator.group_sql-1708"><span class="linenos">1708</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.group_sql-1709"><a href="#Generator.group_sql-1709"><span class="linenos">1709</span></a>
-</span><span id="Generator.group_sql-1710"><a href="#Generator.group_sql-1710"><span class="linenos">1710</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
-</span><span id="Generator.group_sql-1711"><a href="#Generator.group_sql-1711"><span class="linenos">1711</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
-</span><span id="Generator.group_sql-1712"><a href="#Generator.group_sql-1712"><span class="linenos">1712</span></a>
-</span><span id="Generator.group_sql-1713"><a href="#Generator.group_sql-1713"><span class="linenos">1713</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.group_sql-1714"><a href="#Generator.group_sql-1714"><span class="linenos">1714</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.group_sql-1715"><a href="#Generator.group_sql-1715"><span class="linenos">1715</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;GROUPING SETS&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">grouping_sets</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.group_sql-1716"><a href="#Generator.group_sql-1716"><span class="linenos">1716</span></a> <span class="p">)</span>
-</span><span id="Generator.group_sql-1717"><a href="#Generator.group_sql-1717"><span class="linenos">1717</span></a>
-</span><span id="Generator.group_sql-1718"><a href="#Generator.group_sql-1718"><span class="linenos">1718</span></a> <span class="n">cube</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;cube&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Generator.group_sql-1719"><a href="#Generator.group_sql-1719"><span class="linenos">1719</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">cube</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1720"><a href="#Generator.group_sql-1720"><span class="linenos">1720</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.group_sql-1721"><a href="#Generator.group_sql-1721"><span class="linenos">1721</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1722"><a href="#Generator.group_sql-1722"><span class="linenos">1722</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;cube&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.group_sql-1723"><a href="#Generator.group_sql-1723"><span class="linenos">1723</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">cube_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">cube_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.group_sql-1724"><a href="#Generator.group_sql-1724"><span class="linenos">1724</span></a>
-</span><span id="Generator.group_sql-1725"><a href="#Generator.group_sql-1725"><span class="linenos">1725</span></a> <span class="n">rollup</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;rollup&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Generator.group_sql-1726"><a href="#Generator.group_sql-1726"><span class="linenos">1726</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">rollup</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1727"><a href="#Generator.group_sql-1727"><span class="linenos">1727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.group_sql-1728"><a href="#Generator.group_sql-1728"><span class="linenos">1728</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1729"><a href="#Generator.group_sql-1729"><span class="linenos">1729</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;rollup&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.group_sql-1730"><a href="#Generator.group_sql-1730"><span class="linenos">1730</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">rollup_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">rollup_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.group_sql-1731"><a href="#Generator.group_sql-1731"><span class="linenos">1731</span></a>
-</span><span id="Generator.group_sql-1732"><a href="#Generator.group_sql-1732"><span class="linenos">1732</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator.group_sql-1733"><a href="#Generator.group_sql-1733"><span class="linenos">1733</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1734"><a href="#Generator.group_sql-1734"><span class="linenos">1734</span></a> <span class="n">cube_sql</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1735"><a href="#Generator.group_sql-1735"><span class="linenos">1735</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1736"><a href="#Generator.group_sql-1736"><span class="linenos">1736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1737"><a href="#Generator.group_sql-1737"><span class="linenos">1737</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
-</span><span id="Generator.group_sql-1738"><a href="#Generator.group_sql-1738"><span class="linenos">1738</span></a> <span class="p">)</span>
-</span><span id="Generator.group_sql-1739"><a href="#Generator.group_sql-1739"><span class="linenos">1739</span></a>
-</span><span id="Generator.group_sql-1740"><a href="#Generator.group_sql-1740"><span class="linenos">1740</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">groupings</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1741"><a href="#Generator.group_sql-1741"><span class="linenos">1741</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.group_sql-1742"><a href="#Generator.group_sql-1742"><span class="linenos">1742</span></a>
-</span><span id="Generator.group_sql-1743"><a href="#Generator.group_sql-1743"><span class="linenos">1743</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="n">groupings</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.group_sql-1711"><a href="#Generator.group_sql-1711"><span class="linenos">1711</span></a> <span class="k">def</span> <span class="nf">group_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">Group</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1712"><a href="#Generator.group_sql-1712"><span class="linenos">1712</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.group_sql-1713"><a href="#Generator.group_sql-1713"><span class="linenos">1713</span></a>
+</span><span id="Generator.group_sql-1714"><a href="#Generator.group_sql-1714"><span class="linenos">1714</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">):</span>
+</span><span id="Generator.group_sql-1715"><a href="#Generator.group_sql-1715"><span class="linenos">1715</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}</span><span class="s2"> ALL&quot;</span>
+</span><span id="Generator.group_sql-1716"><a href="#Generator.group_sql-1716"><span class="linenos">1716</span></a>
+</span><span id="Generator.group_sql-1717"><a href="#Generator.group_sql-1717"><span class="linenos">1717</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.group_sql-1718"><a href="#Generator.group_sql-1718"><span class="linenos">1718</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.group_sql-1719"><a href="#Generator.group_sql-1719"><span class="linenos">1719</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;GROUPING SETS&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">grouping_sets</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.group_sql-1720"><a href="#Generator.group_sql-1720"><span class="linenos">1720</span></a> <span class="p">)</span>
+</span><span id="Generator.group_sql-1721"><a href="#Generator.group_sql-1721"><span class="linenos">1721</span></a>
+</span><span id="Generator.group_sql-1722"><a href="#Generator.group_sql-1722"><span class="linenos">1722</span></a> <span class="n">cube</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;cube&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Generator.group_sql-1723"><a href="#Generator.group_sql-1723"><span class="linenos">1723</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">cube</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1724"><a href="#Generator.group_sql-1724"><span class="linenos">1724</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.group_sql-1725"><a href="#Generator.group_sql-1725"><span class="linenos">1725</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1726"><a href="#Generator.group_sql-1726"><span class="linenos">1726</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;cube&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.group_sql-1727"><a href="#Generator.group_sql-1727"><span class="linenos">1727</span></a> <span class="n">cube_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;CUBE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">cube_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">cube_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.group_sql-1728"><a href="#Generator.group_sql-1728"><span class="linenos">1728</span></a>
+</span><span id="Generator.group_sql-1729"><a href="#Generator.group_sql-1729"><span class="linenos">1729</span></a> <span class="n">rollup</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;rollup&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Generator.group_sql-1730"><a href="#Generator.group_sql-1730"><span class="linenos">1730</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">rollup</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1731"><a href="#Generator.group_sql-1731"><span class="linenos">1731</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WITH ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.group_sql-1732"><a href="#Generator.group_sql-1732"><span class="linenos">1732</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1733"><a href="#Generator.group_sql-1733"><span class="linenos">1733</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;rollup&quot;</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.group_sql-1734"><a href="#Generator.group_sql-1734"><span class="linenos">1734</span></a> <span class="n">rollup_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;ROLLUP&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">rollup_sql</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">rollup_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.group_sql-1735"><a href="#Generator.group_sql-1735"><span class="linenos">1735</span></a>
+</span><span id="Generator.group_sql-1736"><a href="#Generator.group_sql-1736"><span class="linenos">1736</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator.group_sql-1737"><a href="#Generator.group_sql-1737"><span class="linenos">1737</span></a> <span class="n">grouping_sets</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1738"><a href="#Generator.group_sql-1738"><span class="linenos">1738</span></a> <span class="n">cube_sql</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1739"><a href="#Generator.group_sql-1739"><span class="linenos">1739</span></a> <span class="n">rollup_sql</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1740"><a href="#Generator.group_sql-1740"><span class="linenos">1740</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WITH TOTALS&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;totals&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1741"><a href="#Generator.group_sql-1741"><span class="linenos">1741</span></a> <span class="n">sep</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="p">,</span>
+</span><span id="Generator.group_sql-1742"><a href="#Generator.group_sql-1742"><span class="linenos">1742</span></a> <span class="p">)</span>
+</span><span id="Generator.group_sql-1743"><a href="#Generator.group_sql-1743"><span class="linenos">1743</span></a>
+</span><span id="Generator.group_sql-1744"><a href="#Generator.group_sql-1744"><span class="linenos">1744</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">groupings</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1745"><a href="#Generator.group_sql-1745"><span class="linenos">1745</span></a> <span class="n">group_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">GROUPINGS_SEP</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.group_sql-1746"><a href="#Generator.group_sql-1746"><span class="linenos">1746</span></a>
+</span><span id="Generator.group_sql-1747"><a href="#Generator.group_sql-1747"><span class="linenos">1747</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">group_by</span><span class="si">}{</span><span class="n">groupings</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12026,9 +12069,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.having_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.having_sql-1745"><a href="#Generator.having_sql-1745"><span class="linenos">1745</span></a> <span class="k">def</span> <span class="nf">having_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">Having</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.having_sql-1746"><a href="#Generator.having_sql-1746"><span class="linenos">1746</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="Generator.having_sql-1747"><a href="#Generator.having_sql-1747"><span class="linenos">1747</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;HAVING&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.having_sql-1749"><a href="#Generator.having_sql-1749"><span class="linenos">1749</span></a> <span class="k">def</span> <span class="nf">having_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">Having</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.having_sql-1750"><a href="#Generator.having_sql-1750"><span class="linenos">1750</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="Generator.having_sql-1751"><a href="#Generator.having_sql-1751"><span class="linenos">1751</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;HAVING&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12046,12 +12089,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.connect_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.connect_sql-1749"><a href="#Generator.connect_sql-1749"><span class="linenos">1749</span></a> <span class="k">def</span> <span class="nf">connect_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">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.connect_sql-1750"><a href="#Generator.connect_sql-1750"><span class="linenos">1750</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;start&quot;</span><span class="p">)</span>
-</span><span id="Generator.connect_sql-1751"><a href="#Generator.connect_sql-1751"><span class="linenos">1751</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.connect_sql-1752"><a href="#Generator.connect_sql-1752"><span class="linenos">1752</span></a> <span class="n">connect</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;connect&quot;</span><span class="p">)</span>
-</span><span id="Generator.connect_sql-1753"><a href="#Generator.connect_sql-1753"><span class="linenos">1753</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.connect_sql-1754"><a href="#Generator.connect_sql-1754"><span class="linenos">1754</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.connect_sql-1753"><a href="#Generator.connect_sql-1753"><span class="linenos">1753</span></a> <span class="k">def</span> <span class="nf">connect_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">Connect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.connect_sql-1754"><a href="#Generator.connect_sql-1754"><span class="linenos">1754</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;start&quot;</span><span class="p">)</span>
+</span><span id="Generator.connect_sql-1755"><a href="#Generator.connect_sql-1755"><span class="linenos">1755</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;START WITH </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">start</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.connect_sql-1756"><a href="#Generator.connect_sql-1756"><span class="linenos">1756</span></a> <span class="n">connect</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;connect&quot;</span><span class="p">)</span>
+</span><span id="Generator.connect_sql-1757"><a href="#Generator.connect_sql-1757"><span class="linenos">1757</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;CONNECT BY </span><span class="si">{</span><span class="n">connect</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.connect_sql-1758"><a href="#Generator.connect_sql-1758"><span class="linenos">1758</span></a> <span class="k">return</span> <span class="n">start</span> <span class="o">+</span> <span class="n">connect</span>
</span></pre></div>
@@ -12069,8 +12112,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.prior_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.prior_sql-1756"><a href="#Generator.prior_sql-1756"><span class="linenos">1756</span></a> <span class="k">def</span> <span class="nf">prior_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">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.prior_sql-1757"><a href="#Generator.prior_sql-1757"><span class="linenos">1757</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIOR </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="Generator.prior_sql-1760"><a href="#Generator.prior_sql-1760"><span class="linenos">1760</span></a> <span class="k">def</span> <span class="nf">prior_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">Prior</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.prior_sql-1761"><a href="#Generator.prior_sql-1761"><span class="linenos">1761</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIOR </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>
@@ -12088,47 +12131,47 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.join_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.join_sql-1759"><a href="#Generator.join_sql-1759"><span class="linenos">1759</span></a> <span class="k">def</span> <span class="nf">join_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">Join</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1760"><a href="#Generator.join_sql-1760"><span class="linenos">1760</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SEMI_ANTI_JOIN_WITH_SIDE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SEMI&quot;</span><span class="p">,</span> <span class="s2">&quot;ANTI&quot;</span><span class="p">):</span>
-</span><span id="Generator.join_sql-1761"><a href="#Generator.join_sql-1761"><span class="linenos">1761</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Generator.join_sql-1762"><a href="#Generator.join_sql-1762"><span class="linenos">1762</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1763"><a href="#Generator.join_sql-1763"><span class="linenos">1763</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">side</span>
-</span><span id="Generator.join_sql-1764"><a href="#Generator.join_sql-1764"><span class="linenos">1764</span></a>
-</span><span id="Generator.join_sql-1765"><a href="#Generator.join_sql-1765"><span class="linenos">1765</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.join_sql-1766"><a href="#Generator.join_sql-1766"><span class="linenos">1766</span></a> <span class="n">op</span>
-</span><span id="Generator.join_sql-1767"><a href="#Generator.join_sql-1767"><span class="linenos">1767</span></a> <span class="k">for</span> <span class="n">op</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Generator.join_sql-1768"><a href="#Generator.join_sql-1768"><span class="linenos">1768</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1769"><a href="#Generator.join_sql-1769"><span class="linenos">1769</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1770"><a href="#Generator.join_sql-1770"><span class="linenos">1770</span></a> <span class="n">side</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1771"><a href="#Generator.join_sql-1771"><span class="linenos">1771</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1772"><a href="#Generator.join_sql-1772"><span class="linenos">1772</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">hint</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1773"><a href="#Generator.join_sql-1773"><span class="linenos">1773</span></a> <span class="p">)</span>
-</span><span id="Generator.join_sql-1774"><a href="#Generator.join_sql-1774"><span class="linenos">1774</span></a> <span class="k">if</span> <span class="n">op</span>
-</span><span id="Generator.join_sql-1775"><a href="#Generator.join_sql-1775"><span class="linenos">1775</span></a> <span class="p">)</span>
-</span><span id="Generator.join_sql-1776"><a href="#Generator.join_sql-1776"><span class="linenos">1776</span></a> <span class="n">on_sql</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;on&quot;</span><span class="p">)</span>
-</span><span id="Generator.join_sql-1777"><a href="#Generator.join_sql-1777"><span class="linenos">1777</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.join_sql-1778"><a href="#Generator.join_sql-1778"><span class="linenos">1778</span></a>
-</span><span id="Generator.join_sql-1779"><a href="#Generator.join_sql-1779"><span class="linenos">1779</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">on_sql</span> <span class="ow">and</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1780"><a href="#Generator.join_sql-1780"><span class="linenos">1780</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">column</span><span class="p">)</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">using</span><span class="p">))</span>
-</span><span id="Generator.join_sql-1781"><a href="#Generator.join_sql-1781"><span class="linenos">1781</span></a>
-</span><span id="Generator.join_sql-1782"><a href="#Generator.join_sql-1782"><span class="linenos">1782</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.join_sql-1783"><a href="#Generator.join_sql-1783"><span class="linenos">1783</span></a> <span class="n">this_sql</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">this</span><span class="p">)</span>
-</span><span id="Generator.join_sql-1784"><a href="#Generator.join_sql-1784"><span class="linenos">1784</span></a>
-</span><span id="Generator.join_sql-1785"><a href="#Generator.join_sql-1785"><span class="linenos">1785</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1786"><a href="#Generator.join_sql-1786"><span class="linenos">1786</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">on_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.join_sql-1787"><a href="#Generator.join_sql-1787"><span class="linenos">1787</span></a> <span class="n">space</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator.join_sql-1788"><a href="#Generator.join_sql-1788"><span class="linenos">1788</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1789"><a href="#Generator.join_sql-1789"><span class="linenos">1789</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">USING (</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.join_sql-1790"><a href="#Generator.join_sql-1790"><span class="linenos">1790</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1791"><a href="#Generator.join_sql-1791"><span class="linenos">1791</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.join_sql-1792"><a href="#Generator.join_sql-1792"><span class="linenos">1792</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1793"><a href="#Generator.join_sql-1793"><span class="linenos">1793</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</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;cross_apply&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1794"><a href="#Generator.join_sql-1794"><span class="linenos">1794</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.join_sql-1795"><a href="#Generator.join_sql-1795"><span class="linenos">1795</span></a>
-</span><span id="Generator.join_sql-1796"><a href="#Generator.join_sql-1796"><span class="linenos">1796</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.join_sql-1797"><a href="#Generator.join_sql-1797"><span class="linenos">1797</span></a>
-</span><span id="Generator.join_sql-1798"><a href="#Generator.join_sql-1798"><span class="linenos">1798</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
-</span><span id="Generator.join_sql-1799"><a href="#Generator.join_sql-1799"><span class="linenos">1799</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.join_sql-1763"><a href="#Generator.join_sql-1763"><span class="linenos">1763</span></a> <span class="k">def</span> <span class="nf">join_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">Join</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1764"><a href="#Generator.join_sql-1764"><span class="linenos">1764</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SEMI_ANTI_JOIN_WITH_SIDE</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SEMI&quot;</span><span class="p">,</span> <span class="s2">&quot;ANTI&quot;</span><span class="p">):</span>
+</span><span id="Generator.join_sql-1765"><a href="#Generator.join_sql-1765"><span class="linenos">1765</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Generator.join_sql-1766"><a href="#Generator.join_sql-1766"><span class="linenos">1766</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1767"><a href="#Generator.join_sql-1767"><span class="linenos">1767</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">side</span>
+</span><span id="Generator.join_sql-1768"><a href="#Generator.join_sql-1768"><span class="linenos">1768</span></a>
+</span><span id="Generator.join_sql-1769"><a href="#Generator.join_sql-1769"><span class="linenos">1769</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.join_sql-1770"><a href="#Generator.join_sql-1770"><span class="linenos">1770</span></a> <span class="n">op</span>
+</span><span id="Generator.join_sql-1771"><a href="#Generator.join_sql-1771"><span class="linenos">1771</span></a> <span class="k">for</span> <span class="n">op</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Generator.join_sql-1772"><a href="#Generator.join_sql-1772"><span class="linenos">1772</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1773"><a href="#Generator.join_sql-1773"><span class="linenos">1773</span></a> <span class="s2">&quot;GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1774"><a href="#Generator.join_sql-1774"><span class="linenos">1774</span></a> <span class="n">side</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1775"><a href="#Generator.join_sql-1775"><span class="linenos">1775</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1776"><a href="#Generator.join_sql-1776"><span class="linenos">1776</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">hint</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1777"><a href="#Generator.join_sql-1777"><span class="linenos">1777</span></a> <span class="p">)</span>
+</span><span id="Generator.join_sql-1778"><a href="#Generator.join_sql-1778"><span class="linenos">1778</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="Generator.join_sql-1779"><a href="#Generator.join_sql-1779"><span class="linenos">1779</span></a> <span class="p">)</span>
+</span><span id="Generator.join_sql-1780"><a href="#Generator.join_sql-1780"><span class="linenos">1780</span></a> <span class="n">on_sql</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;on&quot;</span><span class="p">)</span>
+</span><span id="Generator.join_sql-1781"><a href="#Generator.join_sql-1781"><span class="linenos">1781</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.join_sql-1782"><a href="#Generator.join_sql-1782"><span class="linenos">1782</span></a>
+</span><span id="Generator.join_sql-1783"><a href="#Generator.join_sql-1783"><span class="linenos">1783</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">on_sql</span> <span class="ow">and</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1784"><a href="#Generator.join_sql-1784"><span class="linenos">1784</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">column</span><span class="p">)</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">using</span><span class="p">))</span>
+</span><span id="Generator.join_sql-1785"><a href="#Generator.join_sql-1785"><span class="linenos">1785</span></a>
+</span><span id="Generator.join_sql-1786"><a href="#Generator.join_sql-1786"><span class="linenos">1786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.join_sql-1787"><a href="#Generator.join_sql-1787"><span class="linenos">1787</span></a> <span class="n">this_sql</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">this</span><span class="p">)</span>
+</span><span id="Generator.join_sql-1788"><a href="#Generator.join_sql-1788"><span class="linenos">1788</span></a>
+</span><span id="Generator.join_sql-1789"><a href="#Generator.join_sql-1789"><span class="linenos">1789</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1790"><a href="#Generator.join_sql-1790"><span class="linenos">1790</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">on_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.join_sql-1791"><a href="#Generator.join_sql-1791"><span class="linenos">1791</span></a> <span class="n">space</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator.join_sql-1792"><a href="#Generator.join_sql-1792"><span class="linenos">1792</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1793"><a href="#Generator.join_sql-1793"><span class="linenos">1793</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">USING (</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.join_sql-1794"><a href="#Generator.join_sql-1794"><span class="linenos">1794</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1795"><a href="#Generator.join_sql-1795"><span class="linenos">1795</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">space</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.join_sql-1796"><a href="#Generator.join_sql-1796"><span class="linenos">1796</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">op_sql</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1797"><a href="#Generator.join_sql-1797"><span class="linenos">1797</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</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;cross_apply&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1798"><a href="#Generator.join_sql-1798"><span class="linenos">1798</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.join_sql-1799"><a href="#Generator.join_sql-1799"><span class="linenos">1799</span></a>
+</span><span id="Generator.join_sql-1800"><a href="#Generator.join_sql-1800"><span class="linenos">1800</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.join_sql-1801"><a href="#Generator.join_sql-1801"><span class="linenos">1801</span></a>
+</span><span id="Generator.join_sql-1802"><a href="#Generator.join_sql-1802"><span class="linenos">1802</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}</span><span class="s2"> JOIN&quot;</span> <span class="k">if</span> <span class="n">op_sql</span> <span class="k">else</span> <span class="s2">&quot;JOIN&quot;</span>
+</span><span id="Generator.join_sql-1803"><a href="#Generator.join_sql-1803"><span class="linenos">1803</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op_sql</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this_sql</span><span class="si">}{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12146,10 +12189,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lambda_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lambda_sql-1801"><a href="#Generator.lambda_sql-1801"><span class="linenos">1801</span></a> <span class="k">def</span> <span class="nf">lambda_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">Lambda</span><span class="p">,</span> <span class="n">arrow_sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lambda_sql-1802"><a href="#Generator.lambda_sql-1802"><span class="linenos">1802</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.lambda_sql-1803"><a href="#Generator.lambda_sql-1803"><span class="linenos">1803</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">args</span>
-</span><span id="Generator.lambda_sql-1804"><a href="#Generator.lambda_sql-1804"><span class="linenos">1804</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">arrow_sep</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator.lambda_sql-1805"><a href="#Generator.lambda_sql-1805"><span class="linenos">1805</span></a> <span class="k">def</span> <span class="nf">lambda_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">Lambda</span><span class="p">,</span> <span class="n">arrow_sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lambda_sql-1806"><a href="#Generator.lambda_sql-1806"><span class="linenos">1806</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.lambda_sql-1807"><a href="#Generator.lambda_sql-1807"><span class="linenos">1807</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">args</span>
+</span><span id="Generator.lambda_sql-1808"><a href="#Generator.lambda_sql-1808"><span class="linenos">1808</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">arrow_sep</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -12167,18 +12210,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lateral_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lateral_op-1806"><a href="#Generator.lateral_op-1806"><span class="linenos">1806</span></a> <span class="k">def</span> <span class="nf">lateral_op</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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lateral_op-1807"><a href="#Generator.lateral_op-1807"><span class="linenos">1807</span></a> <span class="n">cross_apply</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;cross_apply&quot;</span><span class="p">)</span>
-</span><span id="Generator.lateral_op-1808"><a href="#Generator.lateral_op-1808"><span class="linenos">1808</span></a>
-</span><span id="Generator.lateral_op-1809"><a href="#Generator.lateral_op-1809"><span class="linenos">1809</span></a> <span class="c1"># https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/</span>
-</span><span id="Generator.lateral_op-1810"><a href="#Generator.lateral_op-1810"><span class="linenos">1810</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Generator.lateral_op-1811"><a href="#Generator.lateral_op-1811"><span class="linenos">1811</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;INNER JOIN &quot;</span>
-</span><span id="Generator.lateral_op-1812"><a href="#Generator.lateral_op-1812"><span class="linenos">1812</span></a> <span class="k">elif</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
-</span><span id="Generator.lateral_op-1813"><a href="#Generator.lateral_op-1813"><span class="linenos">1813</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;LEFT JOIN &quot;</span>
-</span><span id="Generator.lateral_op-1814"><a href="#Generator.lateral_op-1814"><span class="linenos">1814</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.lateral_op-1815"><a href="#Generator.lateral_op-1815"><span class="linenos">1815</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lateral_op-1816"><a href="#Generator.lateral_op-1816"><span class="linenos">1816</span></a>
-</span><span id="Generator.lateral_op-1817"><a href="#Generator.lateral_op-1817"><span class="linenos">1817</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2">LATERAL&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lateral_op-1810"><a href="#Generator.lateral_op-1810"><span class="linenos">1810</span></a> <span class="k">def</span> <span class="nf">lateral_op</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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lateral_op-1811"><a href="#Generator.lateral_op-1811"><span class="linenos">1811</span></a> <span class="n">cross_apply</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;cross_apply&quot;</span><span class="p">)</span>
+</span><span id="Generator.lateral_op-1812"><a href="#Generator.lateral_op-1812"><span class="linenos">1812</span></a>
+</span><span id="Generator.lateral_op-1813"><a href="#Generator.lateral_op-1813"><span class="linenos">1813</span></a> <span class="c1"># https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/</span>
+</span><span id="Generator.lateral_op-1814"><a href="#Generator.lateral_op-1814"><span class="linenos">1814</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Generator.lateral_op-1815"><a href="#Generator.lateral_op-1815"><span class="linenos">1815</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;INNER JOIN &quot;</span>
+</span><span id="Generator.lateral_op-1816"><a href="#Generator.lateral_op-1816"><span class="linenos">1816</span></a> <span class="k">elif</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
+</span><span id="Generator.lateral_op-1817"><a href="#Generator.lateral_op-1817"><span class="linenos">1817</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;LEFT JOIN &quot;</span>
+</span><span id="Generator.lateral_op-1818"><a href="#Generator.lateral_op-1818"><span class="linenos">1818</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.lateral_op-1819"><a href="#Generator.lateral_op-1819"><span class="linenos">1819</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lateral_op-1820"><a href="#Generator.lateral_op-1820"><span class="linenos">1820</span></a>
+</span><span id="Generator.lateral_op-1821"><a href="#Generator.lateral_op-1821"><span class="linenos">1821</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2">LATERAL&quot;</span>
</span></pre></div>
@@ -12196,20 +12239,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lateral_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lateral_sql-1819"><a href="#Generator.lateral_sql-1819"><span class="linenos">1819</span></a> <span class="k">def</span> <span class="nf">lateral_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lateral_sql-1820"><a href="#Generator.lateral_sql-1820"><span class="linenos">1820</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.lateral_sql-1821"><a href="#Generator.lateral_sql-1821"><span class="linenos">1821</span></a>
-</span><span id="Generator.lateral_sql-1822"><a href="#Generator.lateral_sql-1822"><span class="linenos">1822</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;view&quot;</span><span class="p">):</span>
-</span><span id="Generator.lateral_sql-1823"><a href="#Generator.lateral_sql-1823"><span class="linenos">1823</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
-</span><span id="Generator.lateral_sql-1824"><a href="#Generator.lateral_sql-1824"><span class="linenos">1824</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.lateral_sql-1825"><a href="#Generator.lateral_sql-1825"><span class="linenos">1825</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">alias</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lateral_sql-1826"><a href="#Generator.lateral_sql-1826"><span class="linenos">1826</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lateral_sql-1827"><a href="#Generator.lateral_sql-1827"><span class="linenos">1827</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;LATERAL VIEW</span><span class="si">{</span><span class="s1">&#39; OUTER&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;outer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.lateral_sql-1828"><a href="#Generator.lateral_sql-1828"><span class="linenos">1828</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.lateral_sql-1829"><a href="#Generator.lateral_sql-1829"><span class="linenos">1829</span></a>
-</span><span id="Generator.lateral_sql-1830"><a href="#Generator.lateral_sql-1830"><span class="linenos">1830</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.lateral_sql-1831"><a href="#Generator.lateral_sql-1831"><span class="linenos">1831</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lateral_sql-1832"><a href="#Generator.lateral_sql-1832"><span class="linenos">1832</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lateral_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lateral_sql-1823"><a href="#Generator.lateral_sql-1823"><span class="linenos">1823</span></a> <span class="k">def</span> <span class="nf">lateral_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">Lateral</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lateral_sql-1824"><a href="#Generator.lateral_sql-1824"><span class="linenos">1824</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.lateral_sql-1825"><a href="#Generator.lateral_sql-1825"><span class="linenos">1825</span></a>
+</span><span id="Generator.lateral_sql-1826"><a href="#Generator.lateral_sql-1826"><span class="linenos">1826</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;view&quot;</span><span class="p">):</span>
+</span><span id="Generator.lateral_sql-1827"><a href="#Generator.lateral_sql-1827"><span class="linenos">1827</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
+</span><span id="Generator.lateral_sql-1828"><a href="#Generator.lateral_sql-1828"><span class="linenos">1828</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.lateral_sql-1829"><a href="#Generator.lateral_sql-1829"><span class="linenos">1829</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">alias</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lateral_sql-1830"><a href="#Generator.lateral_sql-1830"><span class="linenos">1830</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lateral_sql-1831"><a href="#Generator.lateral_sql-1831"><span class="linenos">1831</span></a> <span class="n">op_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;LATERAL VIEW</span><span class="si">{</span><span class="s1">&#39; OUTER&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;outer&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.lateral_sql-1832"><a href="#Generator.lateral_sql-1832"><span class="linenos">1832</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">table</span><span class="si">}{</span><span class="n">columns</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.lateral_sql-1833"><a href="#Generator.lateral_sql-1833"><span class="linenos">1833</span></a>
+</span><span id="Generator.lateral_sql-1834"><a href="#Generator.lateral_sql-1834"><span class="linenos">1834</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.lateral_sql-1835"><a href="#Generator.lateral_sql-1835"><span class="linenos">1835</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lateral_sql-1836"><a href="#Generator.lateral_sql-1836"><span class="linenos">1836</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lateral_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12227,18 +12270,21 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.limit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.limit_sql-1834"><a href="#Generator.limit_sql-1834"><span class="linenos">1834</span></a> <span class="k">def</span> <span class="nf">limit_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">Limit</span><span class="p">,</span> <span class="n">top</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator.limit_sql-1835"><a href="#Generator.limit_sql-1835"><span class="linenos">1835</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.limit_sql-1836"><a href="#Generator.limit_sql-1836"><span class="linenos">1836</span></a>
-</span><span id="Generator.limit_sql-1837"><a href="#Generator.limit_sql-1837"><span class="linenos">1837</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator.limit_sql-1838"><a href="#Generator.limit_sql-1838"><span class="linenos">1838</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="Generator.limit_sql-1839"><a href="#Generator.limit_sql-1839"><span class="linenos">1839</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">))</span>
-</span><span id="Generator.limit_sql-1840"><a href="#Generator.limit_sql-1840"><span class="linenos">1840</span></a> <span class="k">if</span> <span class="n">e</span>
-</span><span id="Generator.limit_sql-1841"><a href="#Generator.limit_sql-1841"><span class="linenos">1841</span></a> <span class="p">]</span>
-</span><span id="Generator.limit_sql-1842"><a href="#Generator.limit_sql-1842"><span class="linenos">1842</span></a>
-</span><span id="Generator.limit_sql-1843"><a href="#Generator.limit_sql-1843"><span class="linenos">1843</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Generator.limit_sql-1844"><a href="#Generator.limit_sql-1844"><span class="linenos">1844</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">top</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">is_number</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span> <span class="k">else</span> <span class="n">args_sql</span>
-</span><span id="Generator.limit_sql-1845"><a href="#Generator.limit_sql-1845"><span class="linenos">1845</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.limit_sql-1838"><a href="#Generator.limit_sql-1838"><span class="linenos">1838</span></a> <span class="k">def</span> <span class="nf">limit_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">Limit</span><span class="p">,</span> <span class="n">top</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator.limit_sql-1839"><a href="#Generator.limit_sql-1839"><span class="linenos">1839</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.limit_sql-1840"><a href="#Generator.limit_sql-1840"><span class="linenos">1840</span></a>
+</span><span id="Generator.limit_sql-1841"><a href="#Generator.limit_sql-1841"><span class="linenos">1841</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator.limit_sql-1842"><a href="#Generator.limit_sql-1842"><span class="linenos">1842</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="Generator.limit_sql-1843"><a href="#Generator.limit_sql-1843"><span class="linenos">1843</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">))</span>
+</span><span id="Generator.limit_sql-1844"><a href="#Generator.limit_sql-1844"><span class="linenos">1844</span></a> <span class="k">if</span> <span class="n">e</span>
+</span><span id="Generator.limit_sql-1845"><a href="#Generator.limit_sql-1845"><span class="linenos">1845</span></a> <span class="p">]</span>
+</span><span id="Generator.limit_sql-1846"><a href="#Generator.limit_sql-1846"><span class="linenos">1846</span></a>
+</span><span id="Generator.limit_sql-1847"><a href="#Generator.limit_sql-1847"><span class="linenos">1847</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Generator.limit_sql-1848"><a href="#Generator.limit_sql-1848"><span class="linenos">1848</span></a> <span class="n">args_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">args_sql</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">top</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">e</span><span class="o">.</span><span class="n">is_number</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span> <span class="k">else</span> <span class="n">args_sql</span>
+</span><span id="Generator.limit_sql-1849"><a href="#Generator.limit_sql-1849"><span class="linenos">1849</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.limit_sql-1850"><a href="#Generator.limit_sql-1850"><span class="linenos">1850</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; BY </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.limit_sql-1851"><a href="#Generator.limit_sql-1851"><span class="linenos">1851</span></a>
+</span><span id="Generator.limit_sql-1852"><a href="#Generator.limit_sql-1852"><span class="linenos">1852</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;TOP&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">top</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;LIMIT&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">args_sql</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12256,13 +12302,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.offset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_sql-1847"><a href="#Generator.offset_sql-1847"><span class="linenos">1847</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="Generator.offset_sql-1848"><a href="#Generator.offset_sql-1848"><span class="linenos">1848</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.offset_sql-1849"><a href="#Generator.offset_sql-1849"><span class="linenos">1849</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Generator.offset_sql-1850"><a href="#Generator.offset_sql-1850"><span class="linenos">1850</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.offset_sql-1851"><a href="#Generator.offset_sql-1851"><span class="linenos">1851</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">expression</span>
-</span><span id="Generator.offset_sql-1852"><a href="#Generator.offset_sql-1852"><span class="linenos">1852</span></a> <span class="p">)</span>
-</span><span id="Generator.offset_sql-1853"><a href="#Generator.offset_sql-1853"><span class="linenos">1853</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OFFSET&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_sql-1854"><a href="#Generator.offset_sql-1854"><span class="linenos">1854</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="Generator.offset_sql-1855"><a href="#Generator.offset_sql-1855"><span class="linenos">1855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.offset_sql-1856"><a href="#Generator.offset_sql-1856"><span class="linenos">1856</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Generator.offset_sql-1857"><a href="#Generator.offset_sql-1857"><span class="linenos">1857</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simplify_unless_literal</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_ONLY_LITERALS</span> <span class="k">else</span> <span class="n">value</span>
+</span><span id="Generator.offset_sql-1858"><a href="#Generator.offset_sql-1858"><span class="linenos">1858</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.offset_sql-1859"><a href="#Generator.offset_sql-1859"><span class="linenos">1859</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; BY </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.offset_sql-1860"><a href="#Generator.offset_sql-1860"><span class="linenos">1860</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;OFFSET&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12280,15 +12326,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.setitem_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.setitem_sql-1855"><a href="#Generator.setitem_sql-1855"><span class="linenos">1855</span></a> <span class="k">def</span> <span class="nf">setitem_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">SetItem</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.setitem_sql-1856"><a href="#Generator.setitem_sql-1856"><span class="linenos">1856</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.setitem_sql-1857"><a href="#Generator.setitem_sql-1857"><span class="linenos">1857</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.setitem_sql-1858"><a href="#Generator.setitem_sql-1858"><span class="linenos">1858</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.setitem_sql-1859"><a href="#Generator.setitem_sql-1859"><span class="linenos">1859</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.setitem_sql-1860"><a href="#Generator.setitem_sql-1860"><span class="linenos">1860</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
-</span><span id="Generator.setitem_sql-1861"><a href="#Generator.setitem_sql-1861"><span class="linenos">1861</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.setitem_sql-1862"><a href="#Generator.setitem_sql-1862"><span class="linenos">1862</span></a> <span class="n">global_</span> <span class="o">=</span> <span class="s2">&quot;GLOBAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.setitem_sql-1863"><a href="#Generator.setitem_sql-1863"><span class="linenos">1863</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">global_</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.setitem_sql-1862"><a href="#Generator.setitem_sql-1862"><span class="linenos">1862</span></a> <span class="k">def</span> <span class="nf">setitem_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">SetItem</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.setitem_sql-1863"><a href="#Generator.setitem_sql-1863"><span class="linenos">1863</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.setitem_sql-1864"><a href="#Generator.setitem_sql-1864"><span class="linenos">1864</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.setitem_sql-1865"><a href="#Generator.setitem_sql-1865"><span class="linenos">1865</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.setitem_sql-1866"><a href="#Generator.setitem_sql-1866"><span class="linenos">1866</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.setitem_sql-1867"><a href="#Generator.setitem_sql-1867"><span class="linenos">1867</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
+</span><span id="Generator.setitem_sql-1868"><a href="#Generator.setitem_sql-1868"><span class="linenos">1868</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.setitem_sql-1869"><a href="#Generator.setitem_sql-1869"><span class="linenos">1869</span></a> <span class="n">global_</span> <span class="o">=</span> <span class="s2">&quot;GLOBAL &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.setitem_sql-1870"><a href="#Generator.setitem_sql-1870"><span class="linenos">1870</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">global_</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12306,12 +12352,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.set_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_sql-1865"><a href="#Generator.set_sql-1865"><span class="linenos">1865</span></a> <span class="k">def</span> <span class="nf">set_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">Set</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.set_sql-1866"><a href="#Generator.set_sql-1866"><span class="linenos">1866</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.set_sql-1867"><a href="#Generator.set_sql-1867"><span class="linenos">1867</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.set_sql-1868"><a href="#Generator.set_sql-1868"><span class="linenos">1868</span></a> <span class="p">)</span>
-</span><span id="Generator.set_sql-1869"><a href="#Generator.set_sql-1869"><span class="linenos">1869</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.set_sql-1870"><a href="#Generator.set_sql-1870"><span class="linenos">1870</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_sql-1872"><a href="#Generator.set_sql-1872"><span class="linenos">1872</span></a> <span class="k">def</span> <span class="nf">set_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">Set</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.set_sql-1873"><a href="#Generator.set_sql-1873"><span class="linenos">1873</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.set_sql-1874"><a href="#Generator.set_sql-1874"><span class="linenos">1874</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.set_sql-1875"><a href="#Generator.set_sql-1875"><span class="linenos">1875</span></a> <span class="p">)</span>
+</span><span id="Generator.set_sql-1876"><a href="#Generator.set_sql-1876"><span class="linenos">1876</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot; TAG&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.set_sql-1877"><a href="#Generator.set_sql-1877"><span class="linenos">1877</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;UNSET&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;unset&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;SET&#39;</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12329,8 +12375,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.pragma_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pragma_sql-1872"><a href="#Generator.pragma_sql-1872"><span class="linenos">1872</span></a> <span class="k">def</span> <span class="nf">pragma_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">Pragma</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.pragma_sql-1873"><a href="#Generator.pragma_sql-1873"><span class="linenos">1873</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRAGMA </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="Generator.pragma_sql-1879"><a href="#Generator.pragma_sql-1879"><span class="linenos">1879</span></a> <span class="k">def</span> <span class="nf">pragma_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">Pragma</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.pragma_sql-1880"><a href="#Generator.pragma_sql-1880"><span class="linenos">1880</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRAGMA </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>
@@ -12348,23 +12394,23 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lock_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lock_sql-1875"><a href="#Generator.lock_sql-1875"><span class="linenos">1875</span></a> <span class="k">def</span> <span class="nf">lock_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">Lock</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lock_sql-1876"><a href="#Generator.lock_sql-1876"><span class="linenos">1876</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.lock_sql-1877"><a href="#Generator.lock_sql-1877"><span class="linenos">1877</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Locking reads using &#39;FOR UPDATE/SHARE&#39; are not supported&quot;</span><span class="p">)</span>
-</span><span id="Generator.lock_sql-1878"><a href="#Generator.lock_sql-1878"><span class="linenos">1878</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lock_sql-1879"><a href="#Generator.lock_sql-1879"><span class="linenos">1879</span></a>
-</span><span id="Generator.lock_sql-1880"><a href="#Generator.lock_sql-1880"><span class="linenos">1880</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
-</span><span id="Generator.lock_sql-1881"><a href="#Generator.lock_sql-1881"><span class="linenos">1881</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.lock_sql-1882"><a href="#Generator.lock_sql-1882"><span class="linenos">1882</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.lock_sql-1883"><a href="#Generator.lock_sql-1883"><span class="linenos">1883</span></a> <span class="n">wait</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;wait&quot;</span><span class="p">)</span>
-</span><span id="Generator.lock_sql-1884"><a href="#Generator.lock_sql-1884"><span class="linenos">1884</span></a>
-</span><span id="Generator.lock_sql-1885"><a href="#Generator.lock_sql-1885"><span class="linenos">1885</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.lock_sql-1886"><a href="#Generator.lock_sql-1886"><span class="linenos">1886</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Generator.lock_sql-1887"><a href="#Generator.lock_sql-1887"><span class="linenos">1887</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </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">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.lock_sql-1888"><a href="#Generator.lock_sql-1888"><span class="linenos">1888</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.lock_sql-1889"><a href="#Generator.lock_sql-1889"><span class="linenos">1889</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
-</span><span id="Generator.lock_sql-1890"><a href="#Generator.lock_sql-1890"><span class="linenos">1890</span></a>
-</span><span id="Generator.lock_sql-1891"><a href="#Generator.lock_sql-1891"><span class="linenos">1891</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lock_sql-1882"><a href="#Generator.lock_sql-1882"><span class="linenos">1882</span></a> <span class="k">def</span> <span class="nf">lock_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">Lock</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lock_sql-1883"><a href="#Generator.lock_sql-1883"><span class="linenos">1883</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOCKING_READS_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.lock_sql-1884"><a href="#Generator.lock_sql-1884"><span class="linenos">1884</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Locking reads using &#39;FOR UPDATE/SHARE&#39; are not supported&quot;</span><span class="p">)</span>
+</span><span id="Generator.lock_sql-1885"><a href="#Generator.lock_sql-1885"><span class="linenos">1885</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lock_sql-1886"><a href="#Generator.lock_sql-1886"><span class="linenos">1886</span></a>
+</span><span id="Generator.lock_sql-1887"><a href="#Generator.lock_sql-1887"><span class="linenos">1887</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;FOR UPDATE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;update&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;FOR SHARE&quot;</span>
+</span><span id="Generator.lock_sql-1888"><a href="#Generator.lock_sql-1888"><span class="linenos">1888</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.lock_sql-1889"><a href="#Generator.lock_sql-1889"><span class="linenos">1889</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OF </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.lock_sql-1890"><a href="#Generator.lock_sql-1890"><span class="linenos">1890</span></a> <span class="n">wait</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;wait&quot;</span><span class="p">)</span>
+</span><span id="Generator.lock_sql-1891"><a href="#Generator.lock_sql-1891"><span class="linenos">1891</span></a>
+</span><span id="Generator.lock_sql-1892"><a href="#Generator.lock_sql-1892"><span class="linenos">1892</span></a> <span class="k">if</span> <span class="n">wait</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.lock_sql-1893"><a href="#Generator.lock_sql-1893"><span class="linenos">1893</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">wait</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Generator.lock_sql-1894"><a href="#Generator.lock_sql-1894"><span class="linenos">1894</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WAIT </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">wait</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.lock_sql-1895"><a href="#Generator.lock_sql-1895"><span class="linenos">1895</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.lock_sql-1896"><a href="#Generator.lock_sql-1896"><span class="linenos">1896</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="s2">&quot; NOWAIT&quot;</span> <span class="k">if</span> <span class="n">wait</span> <span class="k">else</span> <span class="s2">&quot; SKIP LOCKED&quot;</span>
+</span><span id="Generator.lock_sql-1897"><a href="#Generator.lock_sql-1897"><span class="linenos">1897</span></a>
+</span><span id="Generator.lock_sql-1898"><a href="#Generator.lock_sql-1898"><span class="linenos">1898</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">lock_type</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">wait</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12382,11 +12428,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.literal_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.literal_sql-1893"><a href="#Generator.literal_sql-1893"><span class="linenos">1893</span></a> <span class="k">def</span> <span class="nf">literal_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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.literal_sql-1894"><a href="#Generator.literal_sql-1894"><span class="linenos">1894</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.literal_sql-1895"><a href="#Generator.literal_sql-1895"><span class="linenos">1895</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Generator.literal_sql-1896"><a href="#Generator.literal_sql-1896"><span class="linenos">1896</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.literal_sql-1897"><a href="#Generator.literal_sql-1897"><span class="linenos">1897</span></a> <span class="k">return</span> <span class="n">text</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.literal_sql-1900"><a href="#Generator.literal_sql-1900"><span class="linenos">1900</span></a> <span class="k">def</span> <span class="nf">literal_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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.literal_sql-1901"><a href="#Generator.literal_sql-1901"><span class="linenos">1901</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.literal_sql-1902"><a href="#Generator.literal_sql-1902"><span class="linenos">1902</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Generator.literal_sql-1903"><a href="#Generator.literal_sql-1903"><span class="linenos">1903</span></a> <span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">escape_str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.literal_sql-1904"><a href="#Generator.literal_sql-1904"><span class="linenos">1904</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -12404,13 +12450,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.escape_str"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_str-1899"><a href="#Generator.escape_str-1899"><span class="linenos">1899</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.escape_str-1900"><a href="#Generator.escape_str-1900"><span class="linenos">1900</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">)</span>
-</span><span id="Generator.escape_str-1901"><a href="#Generator.escape_str-1901"><span class="linenos">1901</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span>
-</span><span id="Generator.escape_str-1902"><a href="#Generator.escape_str-1902"><span class="linenos">1902</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span> <span class="n">ch</span><span class="p">)</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="Generator.escape_str-1903"><a href="#Generator.escape_str-1903"><span class="linenos">1903</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.escape_str-1904"><a href="#Generator.escape_str-1904"><span class="linenos">1904</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
-</span><span id="Generator.escape_str-1905"><a href="#Generator.escape_str-1905"><span class="linenos">1905</span></a> <span class="k">return</span> <span class="n">text</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_str-1906"><a href="#Generator.escape_str-1906"><span class="linenos">1906</span></a> <span class="k">def</span> <span class="nf">escape_str</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.escape_str-1907"><a href="#Generator.escape_str-1907"><span class="linenos">1907</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_escaped_quote_end</span><span class="p">)</span>
+</span><span id="Generator.escape_str-1908"><a href="#Generator.escape_str-1908"><span class="linenos">1908</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="p">:</span>
+</span><span id="Generator.escape_str-1909"><a href="#Generator.escape_str-1909"><span class="linenos">1909</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span> <span class="n">ch</span><span class="p">)</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Generator.escape_str-1910"><a href="#Generator.escape_str-1910"><span class="linenos">1910</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.escape_str-1911"><a href="#Generator.escape_str-1911"><span class="linenos">1911</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SENTINEL_LINE_BREAK</span><span class="p">)</span>
+</span><span id="Generator.escape_str-1912"><a href="#Generator.escape_str-1912"><span class="linenos">1912</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -12428,18 +12474,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.loaddata_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.loaddata_sql-1907"><a href="#Generator.loaddata_sql-1907"><span class="linenos">1907</span></a> <span class="k">def</span> <span class="nf">loaddata_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">LoadData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.loaddata_sql-1908"><a href="#Generator.loaddata_sql-1908"><span class="linenos">1908</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot; LOCAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.loaddata_sql-1909"><a href="#Generator.loaddata_sql-1909"><span class="linenos">1909</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPATH </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;inpath&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.loaddata_sql-1910"><a href="#Generator.loaddata_sql-1910"><span class="linenos">1910</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.loaddata_sql-1911"><a href="#Generator.loaddata_sql-1911"><span class="linenos">1911</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INTO 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="Generator.loaddata_sql-1912"><a href="#Generator.loaddata_sql-1912"><span class="linenos">1912</span></a> <span class="n">partition</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;partition&quot;</span><span class="p">)</span>
-</span><span id="Generator.loaddata_sql-1913"><a href="#Generator.loaddata_sql-1913"><span class="linenos">1913</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.loaddata_sql-1914"><a href="#Generator.loaddata_sql-1914"><span class="linenos">1914</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
-</span><span id="Generator.loaddata_sql-1915"><a href="#Generator.loaddata_sql-1915"><span class="linenos">1915</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.loaddata_sql-1916"><a href="#Generator.loaddata_sql-1916"><span class="linenos">1916</span></a> <span class="n">serde</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;serde&quot;</span><span class="p">)</span>
-</span><span id="Generator.loaddata_sql-1917"><a href="#Generator.loaddata_sql-1917"><span class="linenos">1917</span></a> <span class="n">serde</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SERDE </span><span class="si">{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.loaddata_sql-1918"><a href="#Generator.loaddata_sql-1918"><span class="linenos">1918</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOAD DATA</span><span class="si">{</span><span class="n">local</span><span class="si">}{</span><span class="n">inpath</span><span class="si">}{</span><span class="n">overwrite</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">partition</span><span class="si">}{</span><span class="n">input_format</span><span class="si">}{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.loaddata_sql-1914"><a href="#Generator.loaddata_sql-1914"><span class="linenos">1914</span></a> <span class="k">def</span> <span class="nf">loaddata_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">LoadData</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.loaddata_sql-1915"><a href="#Generator.loaddata_sql-1915"><span class="linenos">1915</span></a> <span class="n">local</span> <span class="o">=</span> <span class="s2">&quot; LOCAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;local&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.loaddata_sql-1916"><a href="#Generator.loaddata_sql-1916"><span class="linenos">1916</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPATH </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;inpath&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.loaddata_sql-1917"><a href="#Generator.loaddata_sql-1917"><span class="linenos">1917</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="s2">&quot; OVERWRITE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;overwrite&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.loaddata_sql-1918"><a href="#Generator.loaddata_sql-1918"><span class="linenos">1918</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INTO 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="Generator.loaddata_sql-1919"><a href="#Generator.loaddata_sql-1919"><span class="linenos">1919</span></a> <span class="n">partition</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;partition&quot;</span><span class="p">)</span>
+</span><span id="Generator.loaddata_sql-1920"><a href="#Generator.loaddata_sql-1920"><span class="linenos">1920</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.loaddata_sql-1921"><a href="#Generator.loaddata_sql-1921"><span class="linenos">1921</span></a> <span class="n">input_format</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;input_format&quot;</span><span class="p">)</span>
+</span><span id="Generator.loaddata_sql-1922"><a href="#Generator.loaddata_sql-1922"><span class="linenos">1922</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INPUTFORMAT </span><span class="si">{</span><span class="n">input_format</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">input_format</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.loaddata_sql-1923"><a href="#Generator.loaddata_sql-1923"><span class="linenos">1923</span></a> <span class="n">serde</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;serde&quot;</span><span class="p">)</span>
+</span><span id="Generator.loaddata_sql-1924"><a href="#Generator.loaddata_sql-1924"><span class="linenos">1924</span></a> <span class="n">serde</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SERDE </span><span class="si">{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">serde</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.loaddata_sql-1925"><a href="#Generator.loaddata_sql-1925"><span class="linenos">1925</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LOAD DATA</span><span class="si">{</span><span class="n">local</span><span class="si">}{</span><span class="n">inpath</span><span class="si">}{</span><span class="n">overwrite</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">partition</span><span class="si">}{</span><span class="n">input_format</span><span class="si">}{</span><span class="n">serde</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12457,8 +12503,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.null_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.null_sql-1920"><a href="#Generator.null_sql-1920"><span class="linenos">1920</span></a> <span class="k">def</span> <span class="nf">null_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.null_sql-1921"><a href="#Generator.null_sql-1921"><span class="linenos">1921</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.null_sql-1927"><a href="#Generator.null_sql-1927"><span class="linenos">1927</span></a> <span class="k">def</span> <span class="nf">null_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.null_sql-1928"><a href="#Generator.null_sql-1928"><span class="linenos">1928</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
</span></pre></div>
@@ -12476,8 +12522,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.boolean_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.boolean_sql-1923"><a href="#Generator.boolean_sql-1923"><span class="linenos">1923</span></a> <span class="k">def</span> <span class="nf">boolean_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">Boolean</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.boolean_sql-1924"><a href="#Generator.boolean_sql-1924"><span class="linenos">1924</span></a> <span class="k">return</span> <span class="s2">&quot;TRUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;FALSE&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.boolean_sql-1930"><a href="#Generator.boolean_sql-1930"><span class="linenos">1930</span></a> <span class="k">def</span> <span class="nf">boolean_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">Boolean</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.boolean_sql-1931"><a href="#Generator.boolean_sql-1931"><span class="linenos">1931</span></a> <span class="k">return</span> <span class="s2">&quot;TRUE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;FALSE&quot;</span>
</span></pre></div>
@@ -12495,19 +12541,19 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.order_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.order_sql-1926"><a href="#Generator.order_sql-1926"><span class="linenos">1926</span></a> <span class="k">def</span> <span class="nf">order_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">Order</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator.order_sql-1927"><a href="#Generator.order_sql-1927"><span class="linenos">1927</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.order_sql-1928"><a href="#Generator.order_sql-1928"><span class="linenos">1928</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="Generator.order_sql-1929"><a href="#Generator.order_sql-1929"><span class="linenos">1929</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="s2">&quot;SIBLINGS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;siblings&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.order_sql-1930"><a href="#Generator.order_sql-1930"><span class="linenos">1930</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">ORDER </span><span class="si">{</span><span class="n">siblings</span><span class="si">}</span><span class="s2">BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">this</span> <span class="ow">or</span> <span class="n">flat</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Generator.order_sql-1931"><a href="#Generator.order_sql-1931"><span class="linenos">1931</span></a> <span class="n">interpolated_values</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator.order_sql-1932"><a href="#Generator.order_sql-1932"><span class="linenos">1932</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">named_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">named_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="Generator.order_sql-1933"><a href="#Generator.order_sql-1933"><span class="linenos">1933</span></a> <span class="k">for</span> <span class="n">named_expression</span> <span class="ow">in</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;interpolate&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="Generator.order_sql-1934"><a href="#Generator.order_sql-1934"><span class="linenos">1934</span></a> <span class="p">]</span>
-</span><span id="Generator.order_sql-1935"><a href="#Generator.order_sql-1935"><span class="linenos">1935</span></a> <span class="n">interpolate</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.order_sql-1936"><a href="#Generator.order_sql-1936"><span class="linenos">1936</span></a> <span class="sa">f</span><span class="s2">&quot; INTERPOLATE (</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">interpolated_values</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">interpolated_values</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.order_sql-1937"><a href="#Generator.order_sql-1937"><span class="linenos">1937</span></a> <span class="p">)</span>
-</span><span id="Generator.order_sql-1938"><a href="#Generator.order_sql-1938"><span class="linenos">1938</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">interpolate</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.order_sql-1933"><a href="#Generator.order_sql-1933"><span class="linenos">1933</span></a> <span class="k">def</span> <span class="nf">order_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">Order</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator.order_sql-1934"><a href="#Generator.order_sql-1934"><span class="linenos">1934</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.order_sql-1935"><a href="#Generator.order_sql-1935"><span class="linenos">1935</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Generator.order_sql-1936"><a href="#Generator.order_sql-1936"><span class="linenos">1936</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="s2">&quot;SIBLINGS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;siblings&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.order_sql-1937"><a href="#Generator.order_sql-1937"><span class="linenos">1937</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">ORDER </span><span class="si">{</span><span class="n">siblings</span><span class="si">}</span><span class="s2">BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">this</span> <span class="ow">or</span> <span class="n">flat</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Generator.order_sql-1938"><a href="#Generator.order_sql-1938"><span class="linenos">1938</span></a> <span class="n">interpolated_values</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator.order_sql-1939"><a href="#Generator.order_sql-1939"><span class="linenos">1939</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">named_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">named_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="Generator.order_sql-1940"><a href="#Generator.order_sql-1940"><span class="linenos">1940</span></a> <span class="k">for</span> <span class="n">named_expression</span> <span class="ow">in</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;interpolate&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="Generator.order_sql-1941"><a href="#Generator.order_sql-1941"><span class="linenos">1941</span></a> <span class="p">]</span>
+</span><span id="Generator.order_sql-1942"><a href="#Generator.order_sql-1942"><span class="linenos">1942</span></a> <span class="n">interpolate</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.order_sql-1943"><a href="#Generator.order_sql-1943"><span class="linenos">1943</span></a> <span class="sa">f</span><span class="s2">&quot; INTERPOLATE (</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">interpolated_values</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">interpolated_values</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.order_sql-1944"><a href="#Generator.order_sql-1944"><span class="linenos">1944</span></a> <span class="p">)</span>
+</span><span id="Generator.order_sql-1945"><a href="#Generator.order_sql-1945"><span class="linenos">1945</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">interpolate</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12525,14 +12571,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.withfill_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withfill_sql-1940"><a href="#Generator.withfill_sql-1940"><span class="linenos">1940</span></a> <span class="k">def</span> <span class="nf">withfill_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">WithFill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.withfill_sql-1941"><a href="#Generator.withfill_sql-1941"><span class="linenos">1941</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
-</span><span id="Generator.withfill_sql-1942"><a href="#Generator.withfill_sql-1942"><span class="linenos">1942</span></a> <span class="n">from_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">from_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">from_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.withfill_sql-1943"><a href="#Generator.withfill_sql-1943"><span class="linenos">1943</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
-</span><span id="Generator.withfill_sql-1944"><a href="#Generator.withfill_sql-1944"><span class="linenos">1944</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.withfill_sql-1945"><a href="#Generator.withfill_sql-1945"><span class="linenos">1945</span></a> <span class="n">step_sql</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;step&quot;</span><span class="p">)</span>
-</span><span id="Generator.withfill_sql-1946"><a href="#Generator.withfill_sql-1946"><span class="linenos">1946</span></a> <span class="n">step_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; STEP </span><span class="si">{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">step_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.withfill_sql-1947"><a href="#Generator.withfill_sql-1947"><span class="linenos">1947</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH FILL</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withfill_sql-1947"><a href="#Generator.withfill_sql-1947"><span class="linenos">1947</span></a> <span class="k">def</span> <span class="nf">withfill_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">WithFill</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.withfill_sql-1948"><a href="#Generator.withfill_sql-1948"><span class="linenos">1948</span></a> <span class="n">from_sql</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;from&quot;</span><span class="p">)</span>
+</span><span id="Generator.withfill_sql-1949"><a href="#Generator.withfill_sql-1949"><span class="linenos">1949</span></a> <span class="n">from_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM </span><span class="si">{</span><span class="n">from_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">from_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.withfill_sql-1950"><a href="#Generator.withfill_sql-1950"><span class="linenos">1950</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
+</span><span id="Generator.withfill_sql-1951"><a href="#Generator.withfill_sql-1951"><span class="linenos">1951</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.withfill_sql-1952"><a href="#Generator.withfill_sql-1952"><span class="linenos">1952</span></a> <span class="n">step_sql</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;step&quot;</span><span class="p">)</span>
+</span><span id="Generator.withfill_sql-1953"><a href="#Generator.withfill_sql-1953"><span class="linenos">1953</span></a> <span class="n">step_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; STEP </span><span class="si">{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">step_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.withfill_sql-1954"><a href="#Generator.withfill_sql-1954"><span class="linenos">1954</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH FILL</span><span class="si">{</span><span class="n">from_sql</span><span class="si">}{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">step_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12550,8 +12596,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.cluster_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cluster_sql-1949"><a href="#Generator.cluster_sql-1949"><span class="linenos">1949</span></a> <span class="k">def</span> <span class="nf">cluster_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">Cluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cluster_sql-1950"><a href="#Generator.cluster_sql-1950"><span class="linenos">1950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cluster_sql-1956"><a href="#Generator.cluster_sql-1956"><span class="linenos">1956</span></a> <span class="k">def</span> <span class="nf">cluster_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">Cluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cluster_sql-1957"><a href="#Generator.cluster_sql-1957"><span class="linenos">1957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -12569,8 +12615,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.distribute_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distribute_sql-1952"><a href="#Generator.distribute_sql-1952"><span class="linenos">1952</span></a> <span class="k">def</span> <span class="nf">distribute_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">Distribute</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.distribute_sql-1953"><a href="#Generator.distribute_sql-1953"><span class="linenos">1953</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distribute_sql-1959"><a href="#Generator.distribute_sql-1959"><span class="linenos">1959</span></a> <span class="k">def</span> <span class="nf">distribute_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">Distribute</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.distribute_sql-1960"><a href="#Generator.distribute_sql-1960"><span class="linenos">1960</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -12588,8 +12634,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.sort_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sort_sql-1955"><a href="#Generator.sort_sql-1955"><span class="linenos">1955</span></a> <span class="k">def</span> <span class="nf">sort_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">Sort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.sort_sql-1956"><a href="#Generator.sort_sql-1956"><span class="linenos">1956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sort_sql-1962"><a href="#Generator.sort_sql-1962"><span class="linenos">1962</span></a> <span class="k">def</span> <span class="nf">sort_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">Sort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.sort_sql-1963"><a href="#Generator.sort_sql-1963"><span class="linenos">1963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_expressions</span><span class="p">(</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -12607,53 +12653,53 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.ordered_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ordered_sql-1958"><a href="#Generator.ordered_sql-1958"><span class="linenos">1958</span></a> <span class="k">def</span> <span class="nf">ordered_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">Ordered</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.ordered_sql-1959"><a href="#Generator.ordered_sql-1959"><span class="linenos">1959</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
-</span><span id="Generator.ordered_sql-1960"><a href="#Generator.ordered_sql-1960"><span class="linenos">1960</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
-</span><span id="Generator.ordered_sql-1961"><a href="#Generator.ordered_sql-1961"><span class="linenos">1961</span></a>
-</span><span id="Generator.ordered_sql-1962"><a href="#Generator.ordered_sql-1962"><span class="linenos">1962</span></a> <span class="n">nulls_first</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;nulls_first&quot;</span><span class="p">)</span>
-</span><span id="Generator.ordered_sql-1963"><a href="#Generator.ordered_sql-1963"><span class="linenos">1963</span></a> <span class="n">nulls_last</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">nulls_first</span>
-</span><span id="Generator.ordered_sql-1964"><a href="#Generator.ordered_sql-1964"><span class="linenos">1964</span></a> <span class="n">nulls_are_large</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="Generator.ordered_sql-1965"><a href="#Generator.ordered_sql-1965"><span class="linenos">1965</span></a> <span class="n">nulls_are_small</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="Generator.ordered_sql-1966"><a href="#Generator.ordered_sql-1966"><span class="linenos">1966</span></a> <span class="n">nulls_are_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="Generator.ordered_sql-1967"><a href="#Generator.ordered_sql-1967"><span class="linenos">1967</span></a>
-</span><span id="Generator.ordered_sql-1968"><a href="#Generator.ordered_sql-1968"><span class="linenos">1968</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.ordered_sql-1969"><a href="#Generator.ordered_sql-1969"><span class="linenos">1969</span></a>
-</span><span id="Generator.ordered_sql-1970"><a href="#Generator.ordered_sql-1970"><span class="linenos">1970</span></a> <span class="n">sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot; ASC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator.ordered_sql-1971"><a href="#Generator.ordered_sql-1971"><span class="linenos">1971</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.ordered_sql-1972"><a href="#Generator.ordered_sql-1972"><span class="linenos">1972</span></a> <span class="k">if</span> <span class="n">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Generator.ordered_sql-1973"><a href="#Generator.ordered_sql-1973"><span class="linenos">1973</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="n">nulls_are_last</span>
-</span><span id="Generator.ordered_sql-1974"><a href="#Generator.ordered_sql-1974"><span class="linenos">1974</span></a> <span class="p">):</span>
-</span><span id="Generator.ordered_sql-1975"><a href="#Generator.ordered_sql-1975"><span class="linenos">1975</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
-</span><span id="Generator.ordered_sql-1976"><a href="#Generator.ordered_sql-1976"><span class="linenos">1976</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="Generator.ordered_sql-1977"><a href="#Generator.ordered_sql-1977"><span class="linenos">1977</span></a> <span class="n">nulls_last</span>
-</span><span id="Generator.ordered_sql-1978"><a href="#Generator.ordered_sql-1978"><span class="linenos">1978</span></a> <span class="ow">and</span> <span class="p">((</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">))</span>
-</span><span id="Generator.ordered_sql-1979"><a href="#Generator.ordered_sql-1979"><span class="linenos">1979</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
-</span><span id="Generator.ordered_sql-1980"><a href="#Generator.ordered_sql-1980"><span class="linenos">1980</span></a> <span class="p">):</span>
-</span><span id="Generator.ordered_sql-1981"><a href="#Generator.ordered_sql-1981"><span class="linenos">1981</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS LAST&quot;</span>
-</span><span id="Generator.ordered_sql-1982"><a href="#Generator.ordered_sql-1982"><span class="linenos">1982</span></a>
-</span><span id="Generator.ordered_sql-1983"><a href="#Generator.ordered_sql-1983"><span class="linenos">1983</span></a> <span class="c1"># If the NULLS FIRST/LAST clause is unsupported, we add another sort key to simulate it</span>
-</span><span id="Generator.ordered_sql-1984"><a href="#Generator.ordered_sql-1984"><span class="linenos">1984</span></a> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.ordered_sql-1985"><a href="#Generator.ordered_sql-1985"><span class="linenos">1985</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
-</span><span id="Generator.ordered_sql-1986"><a href="#Generator.ordered_sql-1986"><span class="linenos">1986</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">)</span> <span class="ow">and</span> <span class="n">window</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;spec&quot;</span><span class="p">):</span>
-</span><span id="Generator.ordered_sql-1987"><a href="#Generator.ordered_sql-1987"><span class="linenos">1987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="Generator.ordered_sql-1988"><a href="#Generator.ordered_sql-1988"><span class="linenos">1988</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported in window functions&quot;</span>
-</span><span id="Generator.ordered_sql-1989"><a href="#Generator.ordered_sql-1989"><span class="linenos">1989</span></a> <span class="p">)</span>
-</span><span id="Generator.ordered_sql-1990"><a href="#Generator.ordered_sql-1990"><span class="linenos">1990</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.ordered_sql-1991"><a href="#Generator.ordered_sql-1991"><span class="linenos">1991</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.ordered_sql-1992"><a href="#Generator.ordered_sql-1992"><span class="linenos">1992</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="Generator.ordered_sql-1993"><a href="#Generator.ordered_sql-1993"><span class="linenos">1993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="Generator.ordered_sql-1994"><a href="#Generator.ordered_sql-1994"><span class="linenos">1994</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported with positional ordering&quot;</span>
-</span><span id="Generator.ordered_sql-1995"><a href="#Generator.ordered_sql-1995"><span class="linenos">1995</span></a> <span class="p">)</span>
-</span><span id="Generator.ordered_sql-1996"><a href="#Generator.ordered_sql-1996"><span class="linenos">1996</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.ordered_sql-1997"><a href="#Generator.ordered_sql-1997"><span class="linenos">1997</span></a> <span class="n">null_sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="o">==</span> <span class="s2">&quot; NULLS FIRST&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.ordered_sql-1998"><a href="#Generator.ordered_sql-1998"><span class="linenos">1998</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASE WHEN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS NULL THEN 1 ELSE 0 END</span><span class="si">{</span><span class="n">null_sort_order</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.ordered_sql-1999"><a href="#Generator.ordered_sql-1999"><span class="linenos">1999</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.ordered_sql-2000"><a href="#Generator.ordered_sql-2000"><span class="linenos">2000</span></a>
-</span><span id="Generator.ordered_sql-2001"><a href="#Generator.ordered_sql-2001"><span class="linenos">2001</span></a> <span class="n">with_fill</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;with_fill&quot;</span><span class="p">)</span>
-</span><span id="Generator.ordered_sql-2002"><a href="#Generator.ordered_sql-2002"><span class="linenos">2002</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">with_fill</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.ordered_sql-2003"><a href="#Generator.ordered_sql-2003"><span class="linenos">2003</span></a>
-</span><span id="Generator.ordered_sql-2004"><a href="#Generator.ordered_sql-2004"><span class="linenos">2004</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ordered_sql-1965"><a href="#Generator.ordered_sql-1965"><span class="linenos">1965</span></a> <span class="k">def</span> <span class="nf">ordered_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">Ordered</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.ordered_sql-1966"><a href="#Generator.ordered_sql-1966"><span class="linenos">1966</span></a> <span class="n">desc</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;desc&quot;</span><span class="p">)</span>
+</span><span id="Generator.ordered_sql-1967"><a href="#Generator.ordered_sql-1967"><span class="linenos">1967</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
+</span><span id="Generator.ordered_sql-1968"><a href="#Generator.ordered_sql-1968"><span class="linenos">1968</span></a>
+</span><span id="Generator.ordered_sql-1969"><a href="#Generator.ordered_sql-1969"><span class="linenos">1969</span></a> <span class="n">nulls_first</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;nulls_first&quot;</span><span class="p">)</span>
+</span><span id="Generator.ordered_sql-1970"><a href="#Generator.ordered_sql-1970"><span class="linenos">1970</span></a> <span class="n">nulls_last</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">nulls_first</span>
+</span><span id="Generator.ordered_sql-1971"><a href="#Generator.ordered_sql-1971"><span class="linenos">1971</span></a> <span class="n">nulls_are_large</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="Generator.ordered_sql-1972"><a href="#Generator.ordered_sql-1972"><span class="linenos">1972</span></a> <span class="n">nulls_are_small</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="Generator.ordered_sql-1973"><a href="#Generator.ordered_sql-1973"><span class="linenos">1973</span></a> <span class="n">nulls_are_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="Generator.ordered_sql-1974"><a href="#Generator.ordered_sql-1974"><span class="linenos">1974</span></a>
+</span><span id="Generator.ordered_sql-1975"><a href="#Generator.ordered_sql-1975"><span class="linenos">1975</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.ordered_sql-1976"><a href="#Generator.ordered_sql-1976"><span class="linenos">1976</span></a>
+</span><span id="Generator.ordered_sql-1977"><a href="#Generator.ordered_sql-1977"><span class="linenos">1977</span></a> <span class="n">sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot; ASC&quot;</span> <span class="k">if</span> <span class="n">desc</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator.ordered_sql-1978"><a href="#Generator.ordered_sql-1978"><span class="linenos">1978</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.ordered_sql-1979"><a href="#Generator.ordered_sql-1979"><span class="linenos">1979</span></a> <span class="k">if</span> <span class="n">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Generator.ordered_sql-1980"><a href="#Generator.ordered_sql-1980"><span class="linenos">1980</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="n">nulls_are_last</span>
+</span><span id="Generator.ordered_sql-1981"><a href="#Generator.ordered_sql-1981"><span class="linenos">1981</span></a> <span class="p">):</span>
+</span><span id="Generator.ordered_sql-1982"><a href="#Generator.ordered_sql-1982"><span class="linenos">1982</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS FIRST&quot;</span>
+</span><span id="Generator.ordered_sql-1983"><a href="#Generator.ordered_sql-1983"><span class="linenos">1983</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="Generator.ordered_sql-1984"><a href="#Generator.ordered_sql-1984"><span class="linenos">1984</span></a> <span class="n">nulls_last</span>
+</span><span id="Generator.ordered_sql-1985"><a href="#Generator.ordered_sql-1985"><span class="linenos">1985</span></a> <span class="ow">and</span> <span class="p">((</span><span class="n">asc</span> <span class="ow">and</span> <span class="n">nulls_are_small</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="n">nulls_are_large</span><span class="p">))</span>
+</span><span id="Generator.ordered_sql-1986"><a href="#Generator.ordered_sql-1986"><span class="linenos">1986</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
+</span><span id="Generator.ordered_sql-1987"><a href="#Generator.ordered_sql-1987"><span class="linenos">1987</span></a> <span class="p">):</span>
+</span><span id="Generator.ordered_sql-1988"><a href="#Generator.ordered_sql-1988"><span class="linenos">1988</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot; NULLS LAST&quot;</span>
+</span><span id="Generator.ordered_sql-1989"><a href="#Generator.ordered_sql-1989"><span class="linenos">1989</span></a>
+</span><span id="Generator.ordered_sql-1990"><a href="#Generator.ordered_sql-1990"><span class="linenos">1990</span></a> <span class="c1"># If the NULLS FIRST/LAST clause is unsupported, we add another sort key to simulate it</span>
+</span><span id="Generator.ordered_sql-1991"><a href="#Generator.ordered_sql-1991"><span class="linenos">1991</span></a> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.ordered_sql-1992"><a href="#Generator.ordered_sql-1992"><span class="linenos">1992</span></a> <span class="n">window</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
+</span><span id="Generator.ordered_sql-1993"><a href="#Generator.ordered_sql-1993"><span class="linenos">1993</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">)</span> <span class="ow">and</span> <span class="n">window</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;spec&quot;</span><span class="p">):</span>
+</span><span id="Generator.ordered_sql-1994"><a href="#Generator.ordered_sql-1994"><span class="linenos">1994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="Generator.ordered_sql-1995"><a href="#Generator.ordered_sql-1995"><span class="linenos">1995</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported in window functions&quot;</span>
+</span><span id="Generator.ordered_sql-1996"><a href="#Generator.ordered_sql-1996"><span class="linenos">1996</span></a> <span class="p">)</span>
+</span><span id="Generator.ordered_sql-1997"><a href="#Generator.ordered_sql-1997"><span class="linenos">1997</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.ordered_sql-1998"><a href="#Generator.ordered_sql-1998"><span class="linenos">1998</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">NULL_ORDERING_SUPPORTED</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.ordered_sql-1999"><a href="#Generator.ordered_sql-1999"><span class="linenos">1999</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="Generator.ordered_sql-2000"><a href="#Generator.ordered_sql-2000"><span class="linenos">2000</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="Generator.ordered_sql-2001"><a href="#Generator.ordered_sql-2001"><span class="linenos">2001</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">nulls_sort_change</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39; translation not supported with positional ordering&quot;</span>
+</span><span id="Generator.ordered_sql-2002"><a href="#Generator.ordered_sql-2002"><span class="linenos">2002</span></a> <span class="p">)</span>
+</span><span id="Generator.ordered_sql-2003"><a href="#Generator.ordered_sql-2003"><span class="linenos">2003</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.ordered_sql-2004"><a href="#Generator.ordered_sql-2004"><span class="linenos">2004</span></a> <span class="n">null_sort_order</span> <span class="o">=</span> <span class="s2">&quot; DESC&quot;</span> <span class="k">if</span> <span class="n">nulls_sort_change</span> <span class="o">==</span> <span class="s2">&quot; NULLS FIRST&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.ordered_sql-2005"><a href="#Generator.ordered_sql-2005"><span class="linenos">2005</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASE WHEN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS NULL THEN 1 ELSE 0 END</span><span class="si">{</span><span class="n">null_sort_order</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.ordered_sql-2006"><a href="#Generator.ordered_sql-2006"><span class="linenos">2006</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.ordered_sql-2007"><a href="#Generator.ordered_sql-2007"><span class="linenos">2007</span></a>
+</span><span id="Generator.ordered_sql-2008"><a href="#Generator.ordered_sql-2008"><span class="linenos">2008</span></a> <span class="n">with_fill</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;with_fill&quot;</span><span class="p">)</span>
+</span><span id="Generator.ordered_sql-2009"><a href="#Generator.ordered_sql-2009"><span class="linenos">2009</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">with_fill</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.ordered_sql-2010"><a href="#Generator.ordered_sql-2010"><span class="linenos">2010</span></a>
+</span><span id="Generator.ordered_sql-2011"><a href="#Generator.ordered_sql-2011"><span class="linenos">2011</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}{</span><span class="n">with_fill</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12671,37 +12717,37 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.matchrecognize_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchrecognize_sql-2006"><a href="#Generator.matchrecognize_sql-2006"><span class="linenos">2006</span></a> <span class="k">def</span> <span class="nf">matchrecognize_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">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.matchrecognize_sql-2007"><a href="#Generator.matchrecognize_sql-2007"><span class="linenos">2007</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2008"><a href="#Generator.matchrecognize_sql-2008"><span class="linenos">2008</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2009"><a href="#Generator.matchrecognize_sql-2009"><span class="linenos">2009</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;measures&quot;</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2010"><a href="#Generator.matchrecognize_sql-2010"><span class="linenos">2010</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;MEASURES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">measures</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">measures</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.matchrecognize_sql-2011"><a href="#Generator.matchrecognize_sql-2011"><span class="linenos">2011</span></a> <span class="n">rows</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;rows&quot;</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2012"><a href="#Generator.matchrecognize_sql-2012"><span class="linenos">2012</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.matchrecognize_sql-2013"><a href="#Generator.matchrecognize_sql-2013"><span class="linenos">2013</span></a> <span class="n">after</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;after&quot;</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2014"><a href="#Generator.matchrecognize_sql-2014"><span class="linenos">2014</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">after</span><span class="p">)</span> <span class="k">if</span> <span class="n">after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.matchrecognize_sql-2015"><a href="#Generator.matchrecognize_sql-2015"><span class="linenos">2015</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2016"><a href="#Generator.matchrecognize_sql-2016"><span class="linenos">2016</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;PATTERN (</span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.matchrecognize_sql-2017"><a href="#Generator.matchrecognize_sql-2017"><span class="linenos">2017</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator.matchrecognize_sql-2018"><a href="#Generator.matchrecognize_sql-2018"><span class="linenos">2018</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">definition</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="Generator.matchrecognize_sql-2019"><a href="#Generator.matchrecognize_sql-2019"><span class="linenos">2019</span></a> <span class="k">for</span> <span class="n">definition</span> <span class="ow">in</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;define&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="Generator.matchrecognize_sql-2020"><a href="#Generator.matchrecognize_sql-2020"><span class="linenos">2020</span></a> <span class="p">]</span>
-</span><span id="Generator.matchrecognize_sql-2021"><a href="#Generator.matchrecognize_sql-2021"><span class="linenos">2021</span></a> <span class="n">definitions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">sqls</span><span class="o">=</span><span class="n">definition_sqls</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2022"><a href="#Generator.matchrecognize_sql-2022"><span class="linenos">2022</span></a> <span class="n">define</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;DEFINE</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">definitions</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">definitions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.matchrecognize_sql-2023"><a href="#Generator.matchrecognize_sql-2023"><span class="linenos">2023</span></a> <span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator.matchrecognize_sql-2024"><a href="#Generator.matchrecognize_sql-2024"><span class="linenos">2024</span></a> <span class="p">(</span>
-</span><span id="Generator.matchrecognize_sql-2025"><a href="#Generator.matchrecognize_sql-2025"><span class="linenos">2025</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-2026"><a href="#Generator.matchrecognize_sql-2026"><span class="linenos">2026</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-2027"><a href="#Generator.matchrecognize_sql-2027"><span class="linenos">2027</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-2028"><a href="#Generator.matchrecognize_sql-2028"><span class="linenos">2028</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-2029"><a href="#Generator.matchrecognize_sql-2029"><span class="linenos">2029</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-2030"><a href="#Generator.matchrecognize_sql-2030"><span class="linenos">2030</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-2031"><a href="#Generator.matchrecognize_sql-2031"><span class="linenos">2031</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-2032"><a href="#Generator.matchrecognize_sql-2032"><span class="linenos">2032</span></a> <span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2033"><a href="#Generator.matchrecognize_sql-2033"><span class="linenos">2033</span></a> <span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2034"><a href="#Generator.matchrecognize_sql-2034"><span class="linenos">2034</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-2035"><a href="#Generator.matchrecognize_sql-2035"><span class="linenos">2035</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.matchrecognize_sql-2036"><a href="#Generator.matchrecognize_sql-2036"><span class="linenos">2036</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;MATCH_RECOGNIZE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">body</span><span class="p">)</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchrecognize_sql-2013"><a href="#Generator.matchrecognize_sql-2013"><span class="linenos">2013</span></a> <span class="k">def</span> <span class="nf">matchrecognize_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">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.matchrecognize_sql-2014"><a href="#Generator.matchrecognize_sql-2014"><span class="linenos">2014</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2015"><a href="#Generator.matchrecognize_sql-2015"><span class="linenos">2015</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2016"><a href="#Generator.matchrecognize_sql-2016"><span class="linenos">2016</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;measures&quot;</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2017"><a href="#Generator.matchrecognize_sql-2017"><span class="linenos">2017</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;MEASURES</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">measures</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">measures</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.matchrecognize_sql-2018"><a href="#Generator.matchrecognize_sql-2018"><span class="linenos">2018</span></a> <span class="n">rows</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;rows&quot;</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2019"><a href="#Generator.matchrecognize_sql-2019"><span class="linenos">2019</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.matchrecognize_sql-2020"><a href="#Generator.matchrecognize_sql-2020"><span class="linenos">2020</span></a> <span class="n">after</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;after&quot;</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2021"><a href="#Generator.matchrecognize_sql-2021"><span class="linenos">2021</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">after</span><span class="p">)</span> <span class="k">if</span> <span class="n">after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.matchrecognize_sql-2022"><a href="#Generator.matchrecognize_sql-2022"><span class="linenos">2022</span></a> <span class="n">pattern</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;pattern&quot;</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2023"><a href="#Generator.matchrecognize_sql-2023"><span class="linenos">2023</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;PATTERN (</span><span class="si">{</span><span class="n">pattern</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">pattern</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.matchrecognize_sql-2024"><a href="#Generator.matchrecognize_sql-2024"><span class="linenos">2024</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator.matchrecognize_sql-2025"><a href="#Generator.matchrecognize_sql-2025"><span class="linenos">2025</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;alias&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </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">definition</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="Generator.matchrecognize_sql-2026"><a href="#Generator.matchrecognize_sql-2026"><span class="linenos">2026</span></a> <span class="k">for</span> <span class="n">definition</span> <span class="ow">in</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;define&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="Generator.matchrecognize_sql-2027"><a href="#Generator.matchrecognize_sql-2027"><span class="linenos">2027</span></a> <span class="p">]</span>
+</span><span id="Generator.matchrecognize_sql-2028"><a href="#Generator.matchrecognize_sql-2028"><span class="linenos">2028</span></a> <span class="n">definitions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">sqls</span><span class="o">=</span><span class="n">definition_sqls</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2029"><a href="#Generator.matchrecognize_sql-2029"><span class="linenos">2029</span></a> <span class="n">define</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;DEFINE</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">definitions</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">definitions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.matchrecognize_sql-2030"><a href="#Generator.matchrecognize_sql-2030"><span class="linenos">2030</span></a> <span class="n">body</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator.matchrecognize_sql-2031"><a href="#Generator.matchrecognize_sql-2031"><span class="linenos">2031</span></a> <span class="p">(</span>
+</span><span id="Generator.matchrecognize_sql-2032"><a href="#Generator.matchrecognize_sql-2032"><span class="linenos">2032</span></a> <span class="n">partition</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-2033"><a href="#Generator.matchrecognize_sql-2033"><span class="linenos">2033</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-2034"><a href="#Generator.matchrecognize_sql-2034"><span class="linenos">2034</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-2035"><a href="#Generator.matchrecognize_sql-2035"><span class="linenos">2035</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-2036"><a href="#Generator.matchrecognize_sql-2036"><span class="linenos">2036</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-2037"><a href="#Generator.matchrecognize_sql-2037"><span class="linenos">2037</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-2038"><a href="#Generator.matchrecognize_sql-2038"><span class="linenos">2038</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-2039"><a href="#Generator.matchrecognize_sql-2039"><span class="linenos">2039</span></a> <span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2040"><a href="#Generator.matchrecognize_sql-2040"><span class="linenos">2040</span></a> <span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2041"><a href="#Generator.matchrecognize_sql-2041"><span class="linenos">2041</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-2042"><a href="#Generator.matchrecognize_sql-2042"><span class="linenos">2042</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.matchrecognize_sql-2043"><a href="#Generator.matchrecognize_sql-2043"><span class="linenos">2043</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;MATCH_RECOGNIZE&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">body</span><span class="p">)</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12719,40 +12765,40 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.query_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.query_modifiers-2038"><a href="#Generator.query_modifiers-2038"><span class="linenos">2038</span></a> <span class="k">def</span> <span class="nf">query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="o">*</span><span class="n">sqls</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.query_modifiers-2039"><a href="#Generator.query_modifiers-2039"><span class="linenos">2039</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.query_modifiers-2040"><a href="#Generator.query_modifiers-2040"><span class="linenos">2040</span></a>
-</span><span id="Generator.query_modifiers-2041"><a href="#Generator.query_modifiers-2041"><span class="linenos">2041</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
-</span><span id="Generator.query_modifiers-2042"><a href="#Generator.query_modifiers-2042"><span class="linenos">2042</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="Generator.query_modifiers-2043"><a href="#Generator.query_modifiers-2043"><span class="linenos">2043</span></a>
-</span><span id="Generator.query_modifiers-2044"><a href="#Generator.query_modifiers-2044"><span class="linenos">2044</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;LIMIT&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">):</span>
-</span><span id="Generator.query_modifiers-2045"><a href="#Generator.query_modifiers-2045"><span class="linenos">2045</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">maybe_copy</span><span class="p">(</span><span class="n">limit</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;count&quot;</span><span class="p">)))</span>
-</span><span id="Generator.query_modifiers-2046"><a href="#Generator.query_modifiers-2046"><span class="linenos">2046</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;FETCH&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">):</span>
-</span><span id="Generator.query_modifiers-2047"><a href="#Generator.query_modifiers-2047"><span class="linenos">2047</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Generator.query_modifiers-2048"><a href="#Generator.query_modifiers-2048"><span class="linenos">2048</span></a>
-</span><span id="Generator.query_modifiers-2049"><a href="#Generator.query_modifiers-2049"><span class="linenos">2049</span></a> <span class="n">fetch</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.query_modifiers-2045"><a href="#Generator.query_modifiers-2045"><span class="linenos">2045</span></a> <span class="k">def</span> <span class="nf">query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="o">*</span><span class="n">sqls</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.query_modifiers-2046"><a href="#Generator.query_modifiers-2046"><span class="linenos">2046</span></a> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.query_modifiers-2047"><a href="#Generator.query_modifiers-2047"><span class="linenos">2047</span></a>
+</span><span id="Generator.query_modifiers-2048"><a href="#Generator.query_modifiers-2048"><span class="linenos">2048</span></a> <span class="c1"># If the limit is generated as TOP, we need to ensure it&#39;s not generated twice</span>
+</span><span id="Generator.query_modifiers-2049"><a href="#Generator.query_modifiers-2049"><span class="linenos">2049</span></a> <span class="n">with_offset_limit_modifiers</span> <span class="o">=</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
</span><span id="Generator.query_modifiers-2050"><a href="#Generator.query_modifiers-2050"><span class="linenos">2050</span></a>
-</span><span id="Generator.query_modifiers-2051"><a href="#Generator.query_modifiers-2051"><span class="linenos">2051</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.query_modifiers-2052"><a href="#Generator.query_modifiers-2052"><span class="linenos">2052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
-</span><span id="Generator.query_modifiers-2053"><a href="#Generator.query_modifiers-2053"><span class="linenos">2053</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
-</span><span id="Generator.query_modifiers-2054"><a href="#Generator.query_modifiers-2054"><span class="linenos">2054</span></a> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Generator.query_modifiers-2055"><a href="#Generator.query_modifiers-2055"><span class="linenos">2055</span></a> <span class="p">)</span>
-</span><span id="Generator.query_modifiers-2056"><a href="#Generator.query_modifiers-2056"><span class="linenos">2056</span></a>
-</span><span id="Generator.query_modifiers-2057"><a href="#Generator.query_modifiers-2057"><span class="linenos">2057</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator.query_modifiers-2058"><a href="#Generator.query_modifiers-2058"><span class="linenos">2058</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="Generator.query_modifiers-2059"><a href="#Generator.query_modifiers-2059"><span class="linenos">2059</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator.query_modifiers-2060"><a href="#Generator.query_modifiers-2060"><span class="linenos">2060</span></a> <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;connect&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2061"><a href="#Generator.query_modifiers-2061"><span class="linenos">2061</span></a> <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;match&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2062"><a href="#Generator.query_modifiers-2062"><span class="linenos">2062</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</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;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
-</span><span id="Generator.query_modifiers-2063"><a href="#Generator.query_modifiers-2063"><span class="linenos">2063</span></a> <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;where&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2064"><a href="#Generator.query_modifiers-2064"><span class="linenos">2064</span></a> <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;group&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2065"><a href="#Generator.query_modifiers-2065"><span class="linenos">2065</span></a> <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;having&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2066"><a href="#Generator.query_modifiers-2066"><span class="linenos">2066</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2067"><a href="#Generator.query_modifiers-2067"><span class="linenos">2067</span></a> <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;order&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2068"><a href="#Generator.query_modifiers-2068"><span class="linenos">2068</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
-</span><span id="Generator.query_modifiers-2069"><a href="#Generator.query_modifiers-2069"><span class="linenos">2069</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-2070"><a href="#Generator.query_modifiers-2070"><span class="linenos">2070</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.query_modifiers-2071"><a href="#Generator.query_modifiers-2071"><span class="linenos">2071</span></a> <span class="p">)</span>
+</span><span id="Generator.query_modifiers-2051"><a href="#Generator.query_modifiers-2051"><span class="linenos">2051</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;LIMIT&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">):</span>
+</span><span id="Generator.query_modifiers-2052"><a href="#Generator.query_modifiers-2052"><span class="linenos">2052</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">maybe_copy</span><span class="p">(</span><span class="n">limit</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;count&quot;</span><span class="p">)))</span>
+</span><span id="Generator.query_modifiers-2053"><a href="#Generator.query_modifiers-2053"><span class="linenos">2053</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_FETCH</span> <span class="o">==</span> <span class="s2">&quot;FETCH&quot;</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">):</span>
+</span><span id="Generator.query_modifiers-2054"><a href="#Generator.query_modifiers-2054"><span class="linenos">2054</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">(</span><span class="n">direction</span><span class="o">=</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">maybe_copy</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Generator.query_modifiers-2055"><a href="#Generator.query_modifiers-2055"><span class="linenos">2055</span></a>
+</span><span id="Generator.query_modifiers-2056"><a href="#Generator.query_modifiers-2056"><span class="linenos">2056</span></a> <span class="n">fetch</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">)</span>
+</span><span id="Generator.query_modifiers-2057"><a href="#Generator.query_modifiers-2057"><span class="linenos">2057</span></a>
+</span><span id="Generator.query_modifiers-2058"><a href="#Generator.query_modifiers-2058"><span class="linenos">2058</span></a> <span class="n">offset_limit_modifiers</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.query_modifiers-2059"><a href="#Generator.query_modifiers-2059"><span class="linenos">2059</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">offset_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
+</span><span id="Generator.query_modifiers-2060"><a href="#Generator.query_modifiers-2060"><span class="linenos">2060</span></a> <span class="k">if</span> <span class="n">with_offset_limit_modifiers</span>
+</span><span id="Generator.query_modifiers-2061"><a href="#Generator.query_modifiers-2061"><span class="linenos">2061</span></a> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="Generator.query_modifiers-2062"><a href="#Generator.query_modifiers-2062"><span class="linenos">2062</span></a> <span class="p">)</span>
+</span><span id="Generator.query_modifiers-2063"><a href="#Generator.query_modifiers-2063"><span class="linenos">2063</span></a>
+</span><span id="Generator.query_modifiers-2064"><a href="#Generator.query_modifiers-2064"><span class="linenos">2064</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator.query_modifiers-2065"><a href="#Generator.query_modifiers-2065"><span class="linenos">2065</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="Generator.query_modifiers-2066"><a href="#Generator.query_modifiers-2066"><span class="linenos">2066</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">join</span><span class="p">)</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator.query_modifiers-2067"><a href="#Generator.query_modifiers-2067"><span class="linenos">2067</span></a> <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;connect&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2068"><a href="#Generator.query_modifiers-2068"><span class="linenos">2068</span></a> <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;match&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2069"><a href="#Generator.query_modifiers-2069"><span class="linenos">2069</span></a> <span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">lateral</span><span class="p">)</span> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</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;laterals&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]],</span>
+</span><span id="Generator.query_modifiers-2070"><a href="#Generator.query_modifiers-2070"><span class="linenos">2070</span></a> <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;where&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2071"><a href="#Generator.query_modifiers-2071"><span class="linenos">2071</span></a> <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;group&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2072"><a href="#Generator.query_modifiers-2072"><span class="linenos">2072</span></a> <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;having&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2073"><a href="#Generator.query_modifiers-2073"><span class="linenos">2073</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_having_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2074"><a href="#Generator.query_modifiers-2074"><span class="linenos">2074</span></a> <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;order&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2075"><a href="#Generator.query_modifiers-2075"><span class="linenos">2075</span></a> <span class="o">*</span><span class="n">offset_limit_modifiers</span><span class="p">,</span>
+</span><span id="Generator.query_modifiers-2076"><a href="#Generator.query_modifiers-2076"><span class="linenos">2076</span></a> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">after_limit_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-2077"><a href="#Generator.query_modifiers-2077"><span class="linenos">2077</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.query_modifiers-2078"><a href="#Generator.query_modifiers-2078"><span class="linenos">2078</span></a> <span class="p">)</span>
</span></pre></div>
@@ -12770,13 +12816,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.offset_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_limit_modifiers-2073"><a href="#Generator.offset_limit_modifiers-2073"><span class="linenos">2073</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
-</span><span id="Generator.offset_limit_modifiers-2074"><a href="#Generator.offset_limit_modifiers-2074"><span class="linenos">2074</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
-</span><span id="Generator.offset_limit_modifiers-2075"><a href="#Generator.offset_limit_modifiers-2075"><span class="linenos">2075</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator.offset_limit_modifiers-2076"><a href="#Generator.offset_limit_modifiers-2076"><span class="linenos">2076</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator.offset_limit_modifiers-2077"><a href="#Generator.offset_limit_modifiers-2077"><span class="linenos">2077</span></a> <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;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
-</span><span id="Generator.offset_limit_modifiers-2078"><a href="#Generator.offset_limit_modifiers-2078"><span class="linenos">2078</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
-</span><span id="Generator.offset_limit_modifiers-2079"><a href="#Generator.offset_limit_modifiers-2079"><span class="linenos">2079</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_limit_modifiers-2080"><a href="#Generator.offset_limit_modifiers-2080"><span class="linenos">2080</span></a> <span class="k">def</span> <span class="nf">offset_limit_modifiers</span><span class="p">(</span>
+</span><span id="Generator.offset_limit_modifiers-2081"><a href="#Generator.offset_limit_modifiers-2081"><span class="linenos">2081</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">fetch</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">]</span>
+</span><span id="Generator.offset_limit_modifiers-2082"><a href="#Generator.offset_limit_modifiers-2082"><span class="linenos">2082</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator.offset_limit_modifiers-2083"><a href="#Generator.offset_limit_modifiers-2083"><span class="linenos">2083</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator.offset_limit_modifiers-2084"><a href="#Generator.offset_limit_modifiers-2084"><span class="linenos">2084</span></a> <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;offset&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">),</span>
+</span><span id="Generator.offset_limit_modifiers-2085"><a href="#Generator.offset_limit_modifiers-2085"><span class="linenos">2085</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="k">if</span> <span class="n">fetch</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">),</span>
+</span><span id="Generator.offset_limit_modifiers-2086"><a href="#Generator.offset_limit_modifiers-2086"><span class="linenos">2086</span></a> <span class="p">]</span>
</span></pre></div>
@@ -12794,18 +12840,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.after_having_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_having_modifiers-2081"><a href="#Generator.after_having_modifiers-2081"><span class="linenos">2081</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator.after_having_modifiers-2082"><a href="#Generator.after_having_modifiers-2082"><span class="linenos">2082</span></a> <span class="k">return</span> <span class="p">[</span>
-</span><span id="Generator.after_having_modifiers-2083"><a href="#Generator.after_having_modifiers-2083"><span class="linenos">2083</span></a> <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;qualify&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-2084"><a href="#Generator.after_having_modifiers-2084"><span class="linenos">2084</span></a> <span class="p">(</span>
-</span><span id="Generator.after_having_modifiers-2085"><a href="#Generator.after_having_modifiers-2085"><span class="linenos">2085</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.after_having_modifiers-2086"><a href="#Generator.after_having_modifiers-2086"><span class="linenos">2086</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
-</span><span id="Generator.after_having_modifiers-2087"><a href="#Generator.after_having_modifiers-2087"><span class="linenos">2087</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.after_having_modifiers-2088"><a href="#Generator.after_having_modifiers-2088"><span class="linenos">2088</span></a> <span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-2089"><a href="#Generator.after_having_modifiers-2089"><span class="linenos">2089</span></a> <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;distribute&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-2090"><a href="#Generator.after_having_modifiers-2090"><span class="linenos">2090</span></a> <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;sort&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-2091"><a href="#Generator.after_having_modifiers-2091"><span class="linenos">2091</span></a> <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;cluster&quot;</span><span class="p">),</span>
-</span><span id="Generator.after_having_modifiers-2092"><a href="#Generator.after_having_modifiers-2092"><span class="linenos">2092</span></a> <span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_having_modifiers-2088"><a href="#Generator.after_having_modifiers-2088"><span class="linenos">2088</span></a> <span class="k">def</span> <span class="nf">after_having_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator.after_having_modifiers-2089"><a href="#Generator.after_having_modifiers-2089"><span class="linenos">2089</span></a> <span class="k">return</span> <span class="p">[</span>
+</span><span id="Generator.after_having_modifiers-2090"><a href="#Generator.after_having_modifiers-2090"><span class="linenos">2090</span></a> <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;qualify&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-2091"><a href="#Generator.after_having_modifiers-2091"><span class="linenos">2091</span></a> <span class="p">(</span>
+</span><span id="Generator.after_having_modifiers-2092"><a href="#Generator.after_having_modifiers-2092"><span class="linenos">2092</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;WINDOW &quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.after_having_modifiers-2093"><a href="#Generator.after_having_modifiers-2093"><span class="linenos">2093</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">)</span>
+</span><span id="Generator.after_having_modifiers-2094"><a href="#Generator.after_having_modifiers-2094"><span class="linenos">2094</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.after_having_modifiers-2095"><a href="#Generator.after_having_modifiers-2095"><span class="linenos">2095</span></a> <span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-2096"><a href="#Generator.after_having_modifiers-2096"><span class="linenos">2096</span></a> <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;distribute&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-2097"><a href="#Generator.after_having_modifiers-2097"><span class="linenos">2097</span></a> <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;sort&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-2098"><a href="#Generator.after_having_modifiers-2098"><span class="linenos">2098</span></a> <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;cluster&quot;</span><span class="p">),</span>
+</span><span id="Generator.after_having_modifiers-2099"><a href="#Generator.after_having_modifiers-2099"><span class="linenos">2099</span></a> <span class="p">]</span>
</span></pre></div>
@@ -12823,10 +12869,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.after_limit_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_limit_modifiers-2094"><a href="#Generator.after_limit_modifiers-2094"><span class="linenos">2094</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator.after_limit_modifiers-2095"><a href="#Generator.after_limit_modifiers-2095"><span class="linenos">2095</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.after_limit_modifiers-2096"><a href="#Generator.after_limit_modifiers-2096"><span class="linenos">2096</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.after_limit_modifiers-2097"><a href="#Generator.after_limit_modifiers-2097"><span class="linenos">2097</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.after_limit_modifiers-2101"><a href="#Generator.after_limit_modifiers-2101"><span class="linenos">2101</span></a> <span class="k">def</span> <span class="nf">after_limit_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator.after_limit_modifiers-2102"><a href="#Generator.after_limit_modifiers-2102"><span class="linenos">2102</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.after_limit_modifiers-2103"><a href="#Generator.after_limit_modifiers-2103"><span class="linenos">2103</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">locks</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">locks</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.after_limit_modifiers-2104"><a href="#Generator.after_limit_modifiers-2104"><span class="linenos">2104</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">locks</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;sample&quot;</span><span class="p">)]</span>
</span></pre></div>
@@ -12844,68 +12890,68 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.select_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.select_sql-2099"><a href="#Generator.select_sql-2099"><span class="linenos">2099</span></a> <span class="k">def</span> <span class="nf">select_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">Select</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2100"><a href="#Generator.select_sql-2100"><span class="linenos">2100</span></a> <span class="n">into</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;into&quot;</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2101"><a href="#Generator.select_sql-2101"><span class="linenos">2101</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2102"><a href="#Generator.select_sql-2102"><span class="linenos">2102</span></a> <span class="n">into</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="Generator.select_sql-2103"><a href="#Generator.select_sql-2103"><span class="linenos">2103</span></a>
-</span><span id="Generator.select_sql-2104"><a href="#Generator.select_sql-2104"><span class="linenos">2104</span></a> <span class="n">hint</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;hint&quot;</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2105"><a href="#Generator.select_sql-2105"><span class="linenos">2105</span></a> <span class="n">distinct</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;distinct&quot;</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2106"><a href="#Generator.select_sql-2106"><span class="linenos">2106</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.select_sql-2107"><a href="#Generator.select_sql-2107"><span class="linenos">2107</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2108"><a href="#Generator.select_sql-2108"><span class="linenos">2108</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2109"><a href="#Generator.select_sql-2109"><span class="linenos">2109</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.select_sql-2110"><a href="#Generator.select_sql-2110"><span class="linenos">2110</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2111"><a href="#Generator.select_sql-2111"><span class="linenos">2111</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
-</span><span id="Generator.select_sql-2112"><a href="#Generator.select_sql-2112"><span class="linenos">2112</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.select_sql-2113"><a href="#Generator.select_sql-2113"><span class="linenos">2113</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-2114"><a href="#Generator.select_sql-2114"><span class="linenos">2114</span></a>
-</span><span id="Generator.select_sql-2115"><a href="#Generator.select_sql-2115"><span class="linenos">2115</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2116"><a href="#Generator.select_sql-2116"><span class="linenos">2116</span></a>
-</span><span id="Generator.select_sql-2117"><a href="#Generator.select_sql-2117"><span class="linenos">2117</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2118"><a href="#Generator.select_sql-2118"><span class="linenos">2118</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2119"><a href="#Generator.select_sql-2119"><span class="linenos">2119</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.select_sql-2120"><a href="#Generator.select_sql-2120"><span class="linenos">2120</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2121"><a href="#Generator.select_sql-2121"><span class="linenos">2121</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2122"><a href="#Generator.select_sql-2122"><span class="linenos">2122</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="Generator.select_sql-2123"><a href="#Generator.select_sql-2123"><span class="linenos">2123</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator.select_sql-2124"><a href="#Generator.select_sql-2124"><span class="linenos">2124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.select_sql-2125"><a href="#Generator.select_sql-2125"><span class="linenos">2125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
-</span><span id="Generator.select_sql-2126"><a href="#Generator.select_sql-2126"><span class="linenos">2126</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="Generator.select_sql-2127"><a href="#Generator.select_sql-2127"><span class="linenos">2127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
-</span><span id="Generator.select_sql-2128"><a href="#Generator.select_sql-2128"><span class="linenos">2128</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
-</span><span id="Generator.select_sql-2129"><a href="#Generator.select_sql-2129"><span class="linenos">2129</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-2130"><a href="#Generator.select_sql-2130"><span class="linenos">2130</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator.select_sql-2131"><a href="#Generator.select_sql-2131"><span class="linenos">2131</span></a> <span class="p">]</span>
-</span><span id="Generator.select_sql-2132"><a href="#Generator.select_sql-2132"><span class="linenos">2132</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-2133"><a href="#Generator.select_sql-2133"><span class="linenos">2133</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-2134"><a href="#Generator.select_sql-2134"><span class="linenos">2134</span></a> <span class="p">]</span>
-</span><span id="Generator.select_sql-2135"><a href="#Generator.select_sql-2135"><span class="linenos">2135</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-2136"><a href="#Generator.select_sql-2136"><span class="linenos">2136</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.select_sql-2137"><a href="#Generator.select_sql-2137"><span class="linenos">2137</span></a>
-</span><span id="Generator.select_sql-2138"><a href="#Generator.select_sql-2138"><span class="linenos">2138</span></a> <span class="c1"># We use LIMIT_IS_TOP as a proxy for whether DISTINCT should go first because tsql and Teradata</span>
-</span><span id="Generator.select_sql-2139"><a href="#Generator.select_sql-2139"><span class="linenos">2139</span></a> <span class="c1"># are the only dialects that use LIMIT_IS_TOP and both place DISTINCT first.</span>
-</span><span id="Generator.select_sql-2140"><a href="#Generator.select_sql-2140"><span class="linenos">2140</span></a> <span class="n">top_distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">top</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.select_sql-2141"><a href="#Generator.select_sql-2141"><span class="linenos">2141</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="n">expressions</span>
-</span><span id="Generator.select_sql-2142"><a href="#Generator.select_sql-2142"><span class="linenos">2142</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
-</span><span id="Generator.select_sql-2143"><a href="#Generator.select_sql-2143"><span class="linenos">2143</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.select_sql-2144"><a href="#Generator.select_sql-2144"><span class="linenos">2144</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top_distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator.select_sql-2145"><a href="#Generator.select_sql-2145"><span class="linenos">2145</span></a> <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;into&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Generator.select_sql-2146"><a href="#Generator.select_sql-2146"><span class="linenos">2146</span></a> <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;from&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Generator.select_sql-2147"><a href="#Generator.select_sql-2147"><span class="linenos">2147</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-2148"><a href="#Generator.select_sql-2148"><span class="linenos">2148</span></a>
-</span><span id="Generator.select_sql-2149"><a href="#Generator.select_sql-2149"><span class="linenos">2149</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator.select_sql-2150"><a href="#Generator.select_sql-2150"><span class="linenos">2150</span></a>
-</span><span id="Generator.select_sql-2151"><a href="#Generator.select_sql-2151"><span class="linenos">2151</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2152"><a href="#Generator.select_sql-2152"><span class="linenos">2152</span></a> <span class="k">if</span> <span class="n">into</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;temporary&quot;</span><span class="p">):</span>
-</span><span id="Generator.select_sql-2153"><a href="#Generator.select_sql-2153"><span class="linenos">2153</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span>
-</span><span id="Generator.select_sql-2154"><a href="#Generator.select_sql-2154"><span class="linenos">2154</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="ow">and</span> <span class="n">into</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;unlogged&quot;</span><span class="p">):</span>
-</span><span id="Generator.select_sql-2155"><a href="#Generator.select_sql-2155"><span class="linenos">2155</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span>
-</span><span id="Generator.select_sql-2156"><a href="#Generator.select_sql-2156"><span class="linenos">2156</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.select_sql-2157"><a href="#Generator.select_sql-2157"><span class="linenos">2157</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.select_sql-2158"><a href="#Generator.select_sql-2158"><span class="linenos">2158</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">table_kind</span><span class="si">}</span><span class="s2"> 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">into</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.select_sql-2159"><a href="#Generator.select_sql-2159"><span class="linenos">2159</span></a>
-</span><span id="Generator.select_sql-2160"><a href="#Generator.select_sql-2160"><span class="linenos">2160</span></a> <span class="k">return</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.select_sql-2106"><a href="#Generator.select_sql-2106"><span class="linenos">2106</span></a> <span class="k">def</span> <span class="nf">select_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">Select</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2107"><a href="#Generator.select_sql-2107"><span class="linenos">2107</span></a> <span class="n">into</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;into&quot;</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2108"><a href="#Generator.select_sql-2108"><span class="linenos">2108</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2109"><a href="#Generator.select_sql-2109"><span class="linenos">2109</span></a> <span class="n">into</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="Generator.select_sql-2110"><a href="#Generator.select_sql-2110"><span class="linenos">2110</span></a>
+</span><span id="Generator.select_sql-2111"><a href="#Generator.select_sql-2111"><span class="linenos">2111</span></a> <span class="n">hint</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;hint&quot;</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2112"><a href="#Generator.select_sql-2112"><span class="linenos">2112</span></a> <span class="n">distinct</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;distinct&quot;</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2113"><a href="#Generator.select_sql-2113"><span class="linenos">2113</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.select_sql-2114"><a href="#Generator.select_sql-2114"><span class="linenos">2114</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2115"><a href="#Generator.select_sql-2115"><span class="linenos">2115</span></a> <span class="n">limit</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;limit&quot;</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2116"><a href="#Generator.select_sql-2116"><span class="linenos">2116</span></a> <span class="n">top</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.select_sql-2117"><a href="#Generator.select_sql-2117"><span class="linenos">2117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">limit_sql</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2118"><a href="#Generator.select_sql-2118"><span class="linenos">2118</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">limit</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span>
+</span><span id="Generator.select_sql-2119"><a href="#Generator.select_sql-2119"><span class="linenos">2119</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.select_sql-2120"><a href="#Generator.select_sql-2120"><span class="linenos">2120</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-2121"><a href="#Generator.select_sql-2121"><span class="linenos">2121</span></a>
+</span><span id="Generator.select_sql-2122"><a href="#Generator.select_sql-2122"><span class="linenos">2122</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2123"><a href="#Generator.select_sql-2123"><span class="linenos">2123</span></a>
+</span><span id="Generator.select_sql-2124"><a href="#Generator.select_sql-2124"><span class="linenos">2124</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2125"><a href="#Generator.select_sql-2125"><span class="linenos">2125</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SELECT_KINDS</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2126"><a href="#Generator.select_sql-2126"><span class="linenos">2126</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.select_sql-2127"><a href="#Generator.select_sql-2127"><span class="linenos">2127</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2128"><a href="#Generator.select_sql-2128"><span class="linenos">2128</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2129"><a href="#Generator.select_sql-2129"><span class="linenos">2129</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
+</span><span id="Generator.select_sql-2130"><a href="#Generator.select_sql-2130"><span class="linenos">2130</span></a> <span class="n">sqls</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator.select_sql-2131"><a href="#Generator.select_sql-2131"><span class="linenos">2131</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.select_sql-2132"><a href="#Generator.select_sql-2132"><span class="linenos">2132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="Generator.select_sql-2133"><a href="#Generator.select_sql-2133"><span class="linenos">2133</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="Generator.select_sql-2134"><a href="#Generator.select_sql-2134"><span class="linenos">2134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span><span class="o">.</span><span class="n">eq</span><span class="p">(</span>
+</span><span id="Generator.select_sql-2135"><a href="#Generator.select_sql-2135"><span class="linenos">2135</span></a> <span class="n">e</span><span class="o">.</span><span class="n">this</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">Alias</span><span class="p">)</span> <span class="k">else</span> <span class="n">e</span>
+</span><span id="Generator.select_sql-2136"><a href="#Generator.select_sql-2136"><span class="linenos">2136</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-2137"><a href="#Generator.select_sql-2137"><span class="linenos">2137</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator.select_sql-2138"><a href="#Generator.select_sql-2138"><span class="linenos">2138</span></a> <span class="p">]</span>
+</span><span id="Generator.select_sql-2139"><a href="#Generator.select_sql-2139"><span class="linenos">2139</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-2140"><a href="#Generator.select_sql-2140"><span class="linenos">2140</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-2141"><a href="#Generator.select_sql-2141"><span class="linenos">2141</span></a> <span class="p">]</span>
+</span><span id="Generator.select_sql-2142"><a href="#Generator.select_sql-2142"><span class="linenos">2142</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-2143"><a href="#Generator.select_sql-2143"><span class="linenos">2143</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.select_sql-2144"><a href="#Generator.select_sql-2144"><span class="linenos">2144</span></a>
+</span><span id="Generator.select_sql-2145"><a href="#Generator.select_sql-2145"><span class="linenos">2145</span></a> <span class="c1"># We use LIMIT_IS_TOP as a proxy for whether DISTINCT should go first because tsql and Teradata</span>
+</span><span id="Generator.select_sql-2146"><a href="#Generator.select_sql-2146"><span class="linenos">2146</span></a> <span class="c1"># are the only dialects that use LIMIT_IS_TOP and both place DISTINCT first.</span>
+</span><span id="Generator.select_sql-2147"><a href="#Generator.select_sql-2147"><span class="linenos">2147</span></a> <span class="n">top_distinct</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">distinct</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">top</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LIMIT_IS_TOP</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">top</span><span class="si">}{</span><span class="n">hint</span><span class="si">}{</span><span class="n">distinct</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.select_sql-2148"><a href="#Generator.select_sql-2148"><span class="linenos">2148</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="n">expressions</span>
+</span><span id="Generator.select_sql-2149"><a href="#Generator.select_sql-2149"><span class="linenos">2149</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
+</span><span id="Generator.select_sql-2150"><a href="#Generator.select_sql-2150"><span class="linenos">2150</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.select_sql-2151"><a href="#Generator.select_sql-2151"><span class="linenos">2151</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">top_distinct</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator.select_sql-2152"><a href="#Generator.select_sql-2152"><span class="linenos">2152</span></a> <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;into&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator.select_sql-2153"><a href="#Generator.select_sql-2153"><span class="linenos">2153</span></a> <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;from&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator.select_sql-2154"><a href="#Generator.select_sql-2154"><span class="linenos">2154</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-2155"><a href="#Generator.select_sql-2155"><span class="linenos">2155</span></a>
+</span><span id="Generator.select_sql-2156"><a href="#Generator.select_sql-2156"><span class="linenos">2156</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Generator.select_sql-2157"><a href="#Generator.select_sql-2157"><span class="linenos">2157</span></a>
+</span><span id="Generator.select_sql-2158"><a href="#Generator.select_sql-2158"><span class="linenos">2158</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SELECT_INTO</span> <span class="ow">and</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2159"><a href="#Generator.select_sql-2159"><span class="linenos">2159</span></a> <span class="k">if</span> <span class="n">into</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;temporary&quot;</span><span class="p">):</span>
+</span><span id="Generator.select_sql-2160"><a href="#Generator.select_sql-2160"><span class="linenos">2160</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; TEMPORARY&quot;</span>
+</span><span id="Generator.select_sql-2161"><a href="#Generator.select_sql-2161"><span class="linenos">2161</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_UNLOGGED_TABLES</span> <span class="ow">and</span> <span class="n">into</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;unlogged&quot;</span><span class="p">):</span>
+</span><span id="Generator.select_sql-2162"><a href="#Generator.select_sql-2162"><span class="linenos">2162</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot; UNLOGGED&quot;</span>
+</span><span id="Generator.select_sql-2163"><a href="#Generator.select_sql-2163"><span class="linenos">2163</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.select_sql-2164"><a href="#Generator.select_sql-2164"><span class="linenos">2164</span></a> <span class="n">table_kind</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.select_sql-2165"><a href="#Generator.select_sql-2165"><span class="linenos">2165</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CREATE</span><span class="si">{</span><span class="n">table_kind</span><span class="si">}</span><span class="s2"> 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">into</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.select_sql-2166"><a href="#Generator.select_sql-2166"><span class="linenos">2166</span></a>
+</span><span id="Generator.select_sql-2167"><a href="#Generator.select_sql-2167"><span class="linenos">2167</span></a> <span class="k">return</span> <span class="n">sql</span>
</span></pre></div>
@@ -12923,10 +12969,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.schema_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_sql-2162"><a href="#Generator.schema_sql-2162"><span class="linenos">2162</span></a> <span class="k">def</span> <span class="nf">schema_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.schema_sql-2163"><a href="#Generator.schema_sql-2163"><span class="linenos">2163</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.schema_sql-2164"><a href="#Generator.schema_sql-2164"><span class="linenos">2164</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.schema_sql-2165"><a href="#Generator.schema_sql-2165"><span class="linenos">2165</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">sql</span> <span class="k">else</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_sql-2169"><a href="#Generator.schema_sql-2169"><span class="linenos">2169</span></a> <span class="k">def</span> <span class="nf">schema_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.schema_sql-2170"><a href="#Generator.schema_sql-2170"><span class="linenos">2170</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.schema_sql-2171"><a href="#Generator.schema_sql-2171"><span class="linenos">2171</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema_columns_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.schema_sql-2172"><a href="#Generator.schema_sql-2172"><span class="linenos">2172</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">sql</span> <span class="k">else</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">sql</span>
</span></pre></div>
@@ -12944,10 +12990,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.schema_columns_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_columns_sql-2167"><a href="#Generator.schema_columns_sql-2167"><span class="linenos">2167</span></a> <span class="k">def</span> <span class="nf">schema_columns_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.schema_columns_sql-2168"><a href="#Generator.schema_columns_sql-2168"><span class="linenos">2168</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.schema_columns_sql-2169"><a href="#Generator.schema_columns_sql-2169"><span class="linenos">2169</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.schema_columns_sql-2170"><a href="#Generator.schema_columns_sql-2170"><span class="linenos">2170</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_columns_sql-2174"><a href="#Generator.schema_columns_sql-2174"><span class="linenos">2174</span></a> <span class="k">def</span> <span class="nf">schema_columns_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">Schema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.schema_columns_sql-2175"><a href="#Generator.schema_columns_sql-2175"><span class="linenos">2175</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.schema_columns_sql-2176"><a href="#Generator.schema_columns_sql-2176"><span class="linenos">2176</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.schema_columns_sql-2177"><a href="#Generator.schema_columns_sql-2177"><span class="linenos">2177</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -12965,12 +13011,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.star_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.star_sql-2172"><a href="#Generator.star_sql-2172"><span class="linenos">2172</span></a> <span class="k">def</span> <span class="nf">star_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">Star</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.star_sql-2173"><a href="#Generator.star_sql-2173"><span class="linenos">2173</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;except&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.star_sql-2174"><a href="#Generator.star_sql-2174"><span class="linenos">2174</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;except&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">except_</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">except_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.star_sql-2175"><a href="#Generator.star_sql-2175"><span class="linenos">2175</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.star_sql-2176"><a href="#Generator.star_sql-2176"><span class="linenos">2176</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;replace&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">replace</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.star_sql-2177"><a href="#Generator.star_sql-2177"><span class="linenos">2177</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;*</span><span class="si">{</span><span class="n">except_</span><span class="si">}{</span><span class="n">replace</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.star_sql-2179"><a href="#Generator.star_sql-2179"><span class="linenos">2179</span></a> <span class="k">def</span> <span class="nf">star_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">Star</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.star_sql-2180"><a href="#Generator.star_sql-2180"><span class="linenos">2180</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;except&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.star_sql-2181"><a href="#Generator.star_sql-2181"><span class="linenos">2181</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;except&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">except_</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">except_</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.star_sql-2182"><a href="#Generator.star_sql-2182"><span class="linenos">2182</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.star_sql-2183"><a href="#Generator.star_sql-2183"><span class="linenos">2183</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STAR_MAPPING</span><span class="p">[</span><span class="s1">&#39;replace&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">replace</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.star_sql-2184"><a href="#Generator.star_sql-2184"><span class="linenos">2184</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;*</span><span class="si">{</span><span class="n">except_</span><span class="si">}{</span><span class="n">replace</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -12988,9 +13034,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.parameter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.parameter_sql-2179"><a href="#Generator.parameter_sql-2179"><span class="linenos">2179</span></a> <span class="k">def</span> <span class="nf">parameter_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">Parameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.parameter_sql-2180"><a href="#Generator.parameter_sql-2180"><span class="linenos">2180</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.parameter_sql-2181"><a href="#Generator.parameter_sql-2181"><span class="linenos">2181</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">PARAMETER_TOKEN</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.parameter_sql-2186"><a href="#Generator.parameter_sql-2186"><span class="linenos">2186</span></a> <span class="k">def</span> <span class="nf">parameter_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">Parameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.parameter_sql-2187"><a href="#Generator.parameter_sql-2187"><span class="linenos">2187</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.parameter_sql-2188"><a href="#Generator.parameter_sql-2188"><span class="linenos">2188</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">PARAMETER_TOKEN</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13008,12 +13054,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.sessionparameter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sessionparameter_sql-2183"><a href="#Generator.sessionparameter_sql-2183"><span class="linenos">2183</span></a> <span class="k">def</span> <span class="nf">sessionparameter_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">SessionParameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.sessionparameter_sql-2184"><a href="#Generator.sessionparameter_sql-2184"><span class="linenos">2184</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.sessionparameter_sql-2185"><a href="#Generator.sessionparameter_sql-2185"><span class="linenos">2185</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.sessionparameter_sql-2186"><a href="#Generator.sessionparameter_sql-2186"><span class="linenos">2186</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator.sessionparameter_sql-2187"><a href="#Generator.sessionparameter_sql-2187"><span class="linenos">2187</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="Generator.sessionparameter_sql-2188"><a href="#Generator.sessionparameter_sql-2188"><span class="linenos">2188</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;@@</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sessionparameter_sql-2190"><a href="#Generator.sessionparameter_sql-2190"><span class="linenos">2190</span></a> <span class="k">def</span> <span class="nf">sessionparameter_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">SessionParameter</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.sessionparameter_sql-2191"><a href="#Generator.sessionparameter_sql-2191"><span class="linenos">2191</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.sessionparameter_sql-2192"><a href="#Generator.sessionparameter_sql-2192"><span class="linenos">2192</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.sessionparameter_sql-2193"><a href="#Generator.sessionparameter_sql-2193"><span class="linenos">2193</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator.sessionparameter_sql-2194"><a href="#Generator.sessionparameter_sql-2194"><span class="linenos">2194</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="Generator.sessionparameter_sql-2195"><a href="#Generator.sessionparameter_sql-2195"><span class="linenos">2195</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;@@</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13031,8 +13077,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.placeholder_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.placeholder_sql-2190"><a href="#Generator.placeholder_sql-2190"><span class="linenos">2190</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.placeholder_sql-2191"><a href="#Generator.placeholder_sql-2191"><span class="linenos">2191</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;:</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.placeholder_sql-2197"><a href="#Generator.placeholder_sql-2197"><span class="linenos">2197</span></a> <span class="k">def</span> <span class="nf">placeholder_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">Placeholder</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.placeholder_sql-2198"><a href="#Generator.placeholder_sql-2198"><span class="linenos">2198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;:</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">else</span> <span class="s2">&quot;?&quot;</span>
</span></pre></div>
@@ -13050,15 +13096,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.subquery_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.subquery_sql-2193"><a href="#Generator.subquery_sql-2193"><span class="linenos">2193</span></a> <span class="k">def</span> <span class="nf">subquery_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">Subquery</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.subquery_sql-2194"><a href="#Generator.subquery_sql-2194"><span class="linenos">2194</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.subquery_sql-2195"><a href="#Generator.subquery_sql-2195"><span class="linenos">2195</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.subquery_sql-2196"><a href="#Generator.subquery_sql-2196"><span class="linenos">2196</span></a>
-</span><span id="Generator.subquery_sql-2197"><a href="#Generator.subquery_sql-2197"><span class="linenos">2197</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.subquery_sql-2198"><a href="#Generator.subquery_sql-2198"><span class="linenos">2198</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.subquery_sql-2199"><a href="#Generator.subquery_sql-2199"><span class="linenos">2199</span></a>
-</span><span id="Generator.subquery_sql-2200"><a href="#Generator.subquery_sql-2200"><span class="linenos">2200</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
-</span><span id="Generator.subquery_sql-2201"><a href="#Generator.subquery_sql-2201"><span class="linenos">2201</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.subquery_sql-2200"><a href="#Generator.subquery_sql-2200"><span class="linenos">2200</span></a> <span class="k">def</span> <span class="nf">subquery_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">Subquery</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.subquery_sql-2201"><a href="#Generator.subquery_sql-2201"><span class="linenos">2201</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.subquery_sql-2202"><a href="#Generator.subquery_sql-2202"><span class="linenos">2202</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.subquery_sql-2203"><a href="#Generator.subquery_sql-2203"><span class="linenos">2203</span></a>
+</span><span id="Generator.subquery_sql-2204"><a href="#Generator.subquery_sql-2204"><span class="linenos">2204</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.subquery_sql-2205"><a href="#Generator.subquery_sql-2205"><span class="linenos">2205</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">pivots</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.subquery_sql-2206"><a href="#Generator.subquery_sql-2206"><span class="linenos">2206</span></a>
+</span><span id="Generator.subquery_sql-2207"><a href="#Generator.subquery_sql-2207"><span class="linenos">2207</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">),</span> <span class="n">alias</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
+</span><span id="Generator.subquery_sql-2208"><a href="#Generator.subquery_sql-2208"><span class="linenos">2208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -13076,9 +13122,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.qualify_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.qualify_sql-2203"><a href="#Generator.qualify_sql-2203"><span class="linenos">2203</span></a> <span class="k">def</span> <span class="nf">qualify_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">Qualify</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.qualify_sql-2204"><a href="#Generator.qualify_sql-2204"><span class="linenos">2204</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="Generator.qualify_sql-2205"><a href="#Generator.qualify_sql-2205"><span class="linenos">2205</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;QUALIFY&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.qualify_sql-2210"><a href="#Generator.qualify_sql-2210"><span class="linenos">2210</span></a> <span class="k">def</span> <span class="nf">qualify_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">Qualify</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.qualify_sql-2211"><a href="#Generator.qualify_sql-2211"><span class="linenos">2211</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="Generator.qualify_sql-2212"><a href="#Generator.qualify_sql-2212"><span class="linenos">2212</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;QUALIFY&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13096,11 +13142,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.union_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_sql-2207"><a href="#Generator.union_sql-2207"><span class="linenos">2207</span></a> <span class="k">def</span> <span class="nf">union_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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.union_sql-2208"><a href="#Generator.union_sql-2208"><span class="linenos">2208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator.union_sql-2209"><a href="#Generator.union_sql-2209"><span class="linenos">2209</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.union_sql-2210"><a href="#Generator.union_sql-2210"><span class="linenos">2210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
-</span><span id="Generator.union_sql-2211"><a href="#Generator.union_sql-2211"><span class="linenos">2211</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_sql-2214"><a href="#Generator.union_sql-2214"><span class="linenos">2214</span></a> <span class="k">def</span> <span class="nf">union_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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.union_sql-2215"><a href="#Generator.union_sql-2215"><span class="linenos">2215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator.union_sql-2216"><a href="#Generator.union_sql-2216"><span class="linenos">2216</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.union_sql-2217"><a href="#Generator.union_sql-2217"><span class="linenos">2217</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_operation</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)),</span>
+</span><span id="Generator.union_sql-2218"><a href="#Generator.union_sql-2218"><span class="linenos">2218</span></a> <span class="p">)</span>
</span></pre></div>
@@ -13118,11 +13164,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.union_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_op-2213"><a href="#Generator.union_op-2213"><span class="linenos">2213</span></a> <span class="k">def</span> <span class="nf">union_op</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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.union_op-2214"><a href="#Generator.union_op-2214"><span class="linenos">2214</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot; DISTINCT&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPLICIT_UNION</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.union_op-2215"><a href="#Generator.union_op-2215"><span class="linenos">2215</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; ALL&quot;</span>
-</span><span id="Generator.union_op-2216"><a href="#Generator.union_op-2216"><span class="linenos">2216</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.union_op-2217"><a href="#Generator.union_op-2217"><span class="linenos">2217</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_op-2220"><a href="#Generator.union_op-2220"><span class="linenos">2220</span></a> <span class="k">def</span> <span class="nf">union_op</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">Union</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.union_op-2221"><a href="#Generator.union_op-2221"><span class="linenos">2221</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot; DISTINCT&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPLICIT_UNION</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.union_op-2222"><a href="#Generator.union_op-2222"><span class="linenos">2222</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; ALL&quot;</span>
+</span><span id="Generator.union_op-2223"><a href="#Generator.union_op-2223"><span class="linenos">2223</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="s2">&quot; BY NAME&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.union_op-2224"><a href="#Generator.union_op-2224"><span class="linenos">2224</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNION</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">by_name</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13140,34 +13186,34 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.unnest_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unnest_sql-2219"><a href="#Generator.unnest_sql-2219"><span class="linenos">2219</span></a> <span class="k">def</span> <span class="nf">unnest_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">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2220"><a href="#Generator.unnest_sql-2220"><span class="linenos">2220</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.unnest_sql-2221"><a href="#Generator.unnest_sql-2221"><span class="linenos">2221</span></a>
-</span><span id="Generator.unnest_sql-2222"><a href="#Generator.unnest_sql-2222"><span class="linenos">2222</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.unnest_sql-2223"><a href="#Generator.unnest_sql-2223"><span class="linenos">2223</span></a> <span class="n">offset</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;offset&quot;</span><span class="p">)</span>
-</span><span id="Generator.unnest_sql-2224"><a href="#Generator.unnest_sql-2224"><span class="linenos">2224</span></a>
-</span><span id="Generator.unnest_sql-2225"><a href="#Generator.unnest_sql-2225"><span class="linenos">2225</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2226"><a href="#Generator.unnest_sql-2226"><span class="linenos">2226</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator.unnest_sql-2227"><a href="#Generator.unnest_sql-2227"><span class="linenos">2227</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unnest_sql-2226"><a href="#Generator.unnest_sql-2226"><span class="linenos">2226</span></a> <span class="k">def</span> <span class="nf">unnest_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">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2227"><a href="#Generator.unnest_sql-2227"><span class="linenos">2227</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Generator.unnest_sql-2228"><a href="#Generator.unnest_sql-2228"><span class="linenos">2228</span></a>
-</span><span id="Generator.unnest_sql-2229"><a href="#Generator.unnest_sql-2229"><span class="linenos">2229</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2230"><a href="#Generator.unnest_sql-2230"><span class="linenos">2230</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="Generator.unnest_sql-2231"><a href="#Generator.unnest_sql-2231"><span class="linenos">2231</span></a> <span class="n">alias</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">columns</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.unnest_sql-2232"><a href="#Generator.unnest_sql-2232"><span class="linenos">2232</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2233"><a href="#Generator.unnest_sql-2233"><span class="linenos">2233</span></a> <span class="n">alias</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">alias</span><span class="p">)</span>
-</span><span id="Generator.unnest_sql-2234"><a href="#Generator.unnest_sql-2234"><span class="linenos">2234</span></a>
-</span><span id="Generator.unnest_sql-2235"><a href="#Generator.unnest_sql-2235"><span class="linenos">2235</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">alias</span>
-</span><span id="Generator.unnest_sql-2236"><a href="#Generator.unnest_sql-2236"><span class="linenos">2236</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2237"><a href="#Generator.unnest_sql-2237"><span class="linenos">2237</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="n">alias</span>
-</span><span id="Generator.unnest_sql-2238"><a href="#Generator.unnest_sql-2238"><span class="linenos">2238</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2239"><a href="#Generator.unnest_sql-2239"><span class="linenos">2239</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator.unnest_sql-2240"><a href="#Generator.unnest_sql-2240"><span class="linenos">2240</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET AS </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">offset</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.unnest_sql-2241"><a href="#Generator.unnest_sql-2241"><span class="linenos">2241</span></a> <span class="k">elif</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2242"><a href="#Generator.unnest_sql-2242"><span class="linenos">2242</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET&quot;</span>
-</span><span id="Generator.unnest_sql-2243"><a href="#Generator.unnest_sql-2243"><span class="linenos">2243</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-2244"><a href="#Generator.unnest_sql-2244"><span class="linenos">2244</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">alias</span>
-</span><span id="Generator.unnest_sql-2245"><a href="#Generator.unnest_sql-2245"><span class="linenos">2245</span></a>
-</span><span id="Generator.unnest_sql-2246"><a href="#Generator.unnest_sql-2246"><span class="linenos">2246</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNNEST(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.unnest_sql-2229"><a href="#Generator.unnest_sql-2229"><span class="linenos">2229</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.unnest_sql-2230"><a href="#Generator.unnest_sql-2230"><span class="linenos">2230</span></a> <span class="n">offset</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;offset&quot;</span><span class="p">)</span>
+</span><span id="Generator.unnest_sql-2231"><a href="#Generator.unnest_sql-2231"><span class="linenos">2231</span></a>
+</span><span id="Generator.unnest_sql-2232"><a href="#Generator.unnest_sql-2232"><span class="linenos">2232</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2233"><a href="#Generator.unnest_sql-2233"><span class="linenos">2233</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator.unnest_sql-2234"><a href="#Generator.unnest_sql-2234"><span class="linenos">2234</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="Generator.unnest_sql-2235"><a href="#Generator.unnest_sql-2235"><span class="linenos">2235</span></a>
+</span><span id="Generator.unnest_sql-2236"><a href="#Generator.unnest_sql-2236"><span class="linenos">2236</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2237"><a href="#Generator.unnest_sql-2237"><span class="linenos">2237</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="Generator.unnest_sql-2238"><a href="#Generator.unnest_sql-2238"><span class="linenos">2238</span></a> <span class="n">alias</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">columns</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.unnest_sql-2239"><a href="#Generator.unnest_sql-2239"><span class="linenos">2239</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2240"><a href="#Generator.unnest_sql-2240"><span class="linenos">2240</span></a> <span class="n">alias</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">alias</span><span class="p">)</span>
+</span><span id="Generator.unnest_sql-2241"><a href="#Generator.unnest_sql-2241"><span class="linenos">2241</span></a>
+</span><span id="Generator.unnest_sql-2242"><a href="#Generator.unnest_sql-2242"><span class="linenos">2242</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="n">alias</span>
+</span><span id="Generator.unnest_sql-2243"><a href="#Generator.unnest_sql-2243"><span class="linenos">2243</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_WITH_ORDINALITY</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2244"><a href="#Generator.unnest_sql-2244"><span class="linenos">2244</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITH ORDINALITY</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="n">alias</span>
+</span><span id="Generator.unnest_sql-2245"><a href="#Generator.unnest_sql-2245"><span class="linenos">2245</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2246"><a href="#Generator.unnest_sql-2246"><span class="linenos">2246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">offset</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="Generator.unnest_sql-2247"><a href="#Generator.unnest_sql-2247"><span class="linenos">2247</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET AS </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">offset</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.unnest_sql-2248"><a href="#Generator.unnest_sql-2248"><span class="linenos">2248</span></a> <span class="k">elif</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2249"><a href="#Generator.unnest_sql-2249"><span class="linenos">2249</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2"> WITH OFFSET&quot;</span>
+</span><span id="Generator.unnest_sql-2250"><a href="#Generator.unnest_sql-2250"><span class="linenos">2250</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-2251"><a href="#Generator.unnest_sql-2251"><span class="linenos">2251</span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">alias</span>
+</span><span id="Generator.unnest_sql-2252"><a href="#Generator.unnest_sql-2252"><span class="linenos">2252</span></a>
+</span><span id="Generator.unnest_sql-2253"><a href="#Generator.unnest_sql-2253"><span class="linenos">2253</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;UNNEST(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13185,9 +13231,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.where_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.where_sql-2248"><a href="#Generator.where_sql-2248"><span class="linenos">2248</span></a> <span class="k">def</span> <span class="nf">where_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">Where</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.where_sql-2249"><a href="#Generator.where_sql-2249"><span class="linenos">2249</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
-</span><span id="Generator.where_sql-2250"><a href="#Generator.where_sql-2250"><span class="linenos">2250</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WHERE&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.where_sql-2255"><a href="#Generator.where_sql-2255"><span class="linenos">2255</span></a> <span class="k">def</span> <span class="nf">where_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">Where</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.where_sql-2256"><a href="#Generator.where_sql-2256"><span class="linenos">2256</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">))</span>
+</span><span id="Generator.where_sql-2257"><a href="#Generator.where_sql-2257"><span class="linenos">2257</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;WHERE&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13205,28 +13251,28 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.window_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.window_sql-2252"><a href="#Generator.window_sql-2252"><span class="linenos">2252</span></a> <span class="k">def</span> <span class="nf">window_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">Window</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.window_sql-2253"><a href="#Generator.window_sql-2253"><span class="linenos">2253</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.window_sql-2254"><a href="#Generator.window_sql-2254"><span class="linenos">2254</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.window_sql-2255"><a href="#Generator.window_sql-2255"><span class="linenos">2255</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator.window_sql-2256"><a href="#Generator.window_sql-2256"><span class="linenos">2256</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.window_sql-2257"><a href="#Generator.window_sql-2257"><span class="linenos">2257</span></a> <span class="n">spec</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;spec&quot;</span><span class="p">)</span>
-</span><span id="Generator.window_sql-2258"><a href="#Generator.window_sql-2258"><span class="linenos">2258</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.window_sql-2259"><a href="#Generator.window_sql-2259"><span class="linenos">2259</span></a> <span class="n">over</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;over&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;OVER&quot;</span>
-</span><span id="Generator.window_sql-2260"><a href="#Generator.window_sql-2260"><span class="linenos">2260</span></a>
-</span><span id="Generator.window_sql-2261"><a href="#Generator.window_sql-2261"><span class="linenos">2261</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39;AS&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">arg_key</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">&#39;windows&#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">over</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.window_sql-2262"><a href="#Generator.window_sql-2262"><span class="linenos">2262</span></a>
-</span><span id="Generator.window_sql-2263"><a href="#Generator.window_sql-2263"><span class="linenos">2263</span></a> <span class="n">first</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;first&quot;</span><span class="p">)</span>
-</span><span id="Generator.window_sql-2264"><a href="#Generator.window_sql-2264"><span class="linenos">2264</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.window_sql-2265"><a href="#Generator.window_sql-2265"><span class="linenos">2265</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.window_sql-2266"><a href="#Generator.window_sql-2266"><span class="linenos">2266</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.window_sql-2267"><a href="#Generator.window_sql-2267"><span class="linenos">2267</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;FIRST&quot;</span> <span class="k">if</span> <span class="n">first</span> <span class="k">else</span> <span class="s2">&quot;LAST&quot;</span>
-</span><span id="Generator.window_sql-2268"><a href="#Generator.window_sql-2268"><span class="linenos">2268</span></a>
-</span><span id="Generator.window_sql-2269"><a href="#Generator.window_sql-2269"><span class="linenos">2269</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">order</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">spec</span> <span class="ow">and</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Generator.window_sql-2270"><a href="#Generator.window_sql-2270"><span class="linenos">2270</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.window_sql-2271"><a href="#Generator.window_sql-2271"><span class="linenos">2271</span></a>
-</span><span id="Generator.window_sql-2272"><a href="#Generator.window_sql-2272"><span class="linenos">2272</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator.window_sql-2273"><a href="#Generator.window_sql-2273"><span class="linenos">2273</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.window_sql-2259"><a href="#Generator.window_sql-2259"><span class="linenos">2259</span></a> <span class="k">def</span> <span class="nf">window_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">Window</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.window_sql-2260"><a href="#Generator.window_sql-2260"><span class="linenos">2260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.window_sql-2261"><a href="#Generator.window_sql-2261"><span class="linenos">2261</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">partition_by_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.window_sql-2262"><a href="#Generator.window_sql-2262"><span class="linenos">2262</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator.window_sql-2263"><a href="#Generator.window_sql-2263"><span class="linenos">2263</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.window_sql-2264"><a href="#Generator.window_sql-2264"><span class="linenos">2264</span></a> <span class="n">spec</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;spec&quot;</span><span class="p">)</span>
+</span><span id="Generator.window_sql-2265"><a href="#Generator.window_sql-2265"><span class="linenos">2265</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.window_sql-2266"><a href="#Generator.window_sql-2266"><span class="linenos">2266</span></a> <span class="n">over</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;over&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;OVER&quot;</span>
+</span><span id="Generator.window_sql-2267"><a href="#Generator.window_sql-2267"><span class="linenos">2267</span></a>
+</span><span id="Generator.window_sql-2268"><a href="#Generator.window_sql-2268"><span class="linenos">2268</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39;AS&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expression</span><span class="o">.</span><span class="n">arg_key</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">&#39;windows&#39;</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">over</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.window_sql-2269"><a href="#Generator.window_sql-2269"><span class="linenos">2269</span></a>
+</span><span id="Generator.window_sql-2270"><a href="#Generator.window_sql-2270"><span class="linenos">2270</span></a> <span class="n">first</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;first&quot;</span><span class="p">)</span>
+</span><span id="Generator.window_sql-2271"><a href="#Generator.window_sql-2271"><span class="linenos">2271</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.window_sql-2272"><a href="#Generator.window_sql-2272"><span class="linenos">2272</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.window_sql-2273"><a href="#Generator.window_sql-2273"><span class="linenos">2273</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.window_sql-2274"><a href="#Generator.window_sql-2274"><span class="linenos">2274</span></a> <span class="n">first</span> <span class="o">=</span> <span class="s2">&quot;FIRST&quot;</span> <span class="k">if</span> <span class="n">first</span> <span class="k">else</span> <span class="s2">&quot;LAST&quot;</span>
+</span><span id="Generator.window_sql-2275"><a href="#Generator.window_sql-2275"><span class="linenos">2275</span></a>
+</span><span id="Generator.window_sql-2276"><a href="#Generator.window_sql-2276"><span class="linenos">2276</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">order</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">spec</span> <span class="ow">and</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Generator.window_sql-2277"><a href="#Generator.window_sql-2277"><span class="linenos">2277</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.window_sql-2278"><a href="#Generator.window_sql-2278"><span class="linenos">2278</span></a>
+</span><span id="Generator.window_sql-2279"><a href="#Generator.window_sql-2279"><span class="linenos">2279</span></a> <span class="n">args</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span><span class="p">,</span> <span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="Generator.window_sql-2280"><a href="#Generator.window_sql-2280"><span class="linenos">2280</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -13244,9 +13290,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.partition_by_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partition_by_sql-2275"><a href="#Generator.partition_by_sql-2275"><span class="linenos">2275</span></a> <span class="k">def</span> <span class="nf">partition_by_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">Window</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.partition_by_sql-2276"><a href="#Generator.partition_by_sql-2276"><span class="linenos">2276</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.partition_by_sql-2277"><a href="#Generator.partition_by_sql-2277"><span class="linenos">2277</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.partition_by_sql-2282"><a href="#Generator.partition_by_sql-2282"><span class="linenos">2282</span></a> <span class="k">def</span> <span class="nf">partition_by_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">Window</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.partition_by_sql-2283"><a href="#Generator.partition_by_sql-2283"><span class="linenos">2283</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;partition_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.partition_by_sql-2284"><a href="#Generator.partition_by_sql-2284"><span class="linenos">2284</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="n">partition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -13264,14 +13310,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.windowspec_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.windowspec_sql-2279"><a href="#Generator.windowspec_sql-2279"><span class="linenos">2279</span></a> <span class="k">def</span> <span class="nf">windowspec_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">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.windowspec_sql-2280"><a href="#Generator.windowspec_sql-2280"><span class="linenos">2280</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.windowspec_sql-2281"><a href="#Generator.windowspec_sql-2281"><span class="linenos">2281</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.windowspec_sql-2282"><a href="#Generator.windowspec_sql-2282"><span class="linenos">2282</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.windowspec_sql-2283"><a href="#Generator.windowspec_sql-2283"><span class="linenos">2283</span></a> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.windowspec_sql-2284"><a href="#Generator.windowspec_sql-2284"><span class="linenos">2284</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="Generator.windowspec_sql-2285"><a href="#Generator.windowspec_sql-2285"><span class="linenos">2285</span></a> <span class="p">)</span>
-</span><span id="Generator.windowspec_sql-2286"><a href="#Generator.windowspec_sql-2286"><span class="linenos">2286</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> 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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.windowspec_sql-2286"><a href="#Generator.windowspec_sql-2286"><span class="linenos">2286</span></a> <span class="k">def</span> <span class="nf">windowspec_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">WindowSpec</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.windowspec_sql-2287"><a href="#Generator.windowspec_sql-2287"><span class="linenos">2287</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.windowspec_sql-2288"><a href="#Generator.windowspec_sql-2288"><span class="linenos">2288</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;start_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.windowspec_sql-2289"><a href="#Generator.windowspec_sql-2289"><span class="linenos">2289</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.windowspec_sql-2290"><a href="#Generator.windowspec_sql-2290"><span class="linenos">2290</span></a> <span class="n">csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;end_side&quot;</span><span class="p">),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.windowspec_sql-2291"><a href="#Generator.windowspec_sql-2291"><span class="linenos">2291</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="Generator.windowspec_sql-2292"><a href="#Generator.windowspec_sql-2292"><span class="linenos">2292</span></a> <span class="p">)</span>
+</span><span id="Generator.windowspec_sql-2293"><a href="#Generator.windowspec_sql-2293"><span class="linenos">2293</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> 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></pre></div>
@@ -13289,10 +13335,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.withingroup_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withingroup_sql-2288"><a href="#Generator.withingroup_sql-2288"><span class="linenos">2288</span></a> <span class="k">def</span> <span class="nf">withingroup_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">WithinGroup</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.withingroup_sql-2289"><a href="#Generator.withingroup_sql-2289"><span class="linenos">2289</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.withingroup_sql-2290"><a href="#Generator.withingroup_sql-2290"><span class="linenos">2290</span></a> <span class="n">expression_sql</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 class="mi">1</span><span class="p">:]</span> <span class="c1"># order has a leading space</span>
-</span><span id="Generator.withingroup_sql-2291"><a href="#Generator.withingroup_sql-2291"><span class="linenos">2291</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> WITHIN GROUP (</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withingroup_sql-2295"><a href="#Generator.withingroup_sql-2295"><span class="linenos">2295</span></a> <span class="k">def</span> <span class="nf">withingroup_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">WithinGroup</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.withingroup_sql-2296"><a href="#Generator.withingroup_sql-2296"><span class="linenos">2296</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.withingroup_sql-2297"><a href="#Generator.withingroup_sql-2297"><span class="linenos">2297</span></a> <span class="n">expression_sql</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 class="mi">1</span><span class="p">:]</span> <span class="c1"># order has a leading space</span>
+</span><span id="Generator.withingroup_sql-2298"><a href="#Generator.withingroup_sql-2298"><span class="linenos">2298</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> WITHIN GROUP (</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -13310,11 +13356,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.between_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.between_sql-2293"><a href="#Generator.between_sql-2293"><span class="linenos">2293</span></a> <span class="k">def</span> <span class="nf">between_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">Between</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.between_sql-2294"><a href="#Generator.between_sql-2294"><span class="linenos">2294</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.between_sql-2295"><a href="#Generator.between_sql-2295"><span class="linenos">2295</span></a> <span class="n">low</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;low&quot;</span><span class="p">)</span>
-</span><span id="Generator.between_sql-2296"><a href="#Generator.between_sql-2296"><span class="linenos">2296</span></a> <span class="n">high</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;high&quot;</span><span class="p">)</span>
-</span><span id="Generator.between_sql-2297"><a href="#Generator.between_sql-2297"><span class="linenos">2297</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> BETWEEN </span><span class="si">{</span><span class="n">low</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">high</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.between_sql-2300"><a href="#Generator.between_sql-2300"><span class="linenos">2300</span></a> <span class="k">def</span> <span class="nf">between_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">Between</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.between_sql-2301"><a href="#Generator.between_sql-2301"><span class="linenos">2301</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.between_sql-2302"><a href="#Generator.between_sql-2302"><span class="linenos">2302</span></a> <span class="n">low</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;low&quot;</span><span class="p">)</span>
+</span><span id="Generator.between_sql-2303"><a href="#Generator.between_sql-2303"><span class="linenos">2303</span></a> <span class="n">high</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;high&quot;</span><span class="p">)</span>
+</span><span id="Generator.between_sql-2304"><a href="#Generator.between_sql-2304"><span class="linenos">2304</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> BETWEEN </span><span class="si">{</span><span class="n">low</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">high</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13332,14 +13378,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bracket_sql-2299"><a href="#Generator.bracket_sql-2299"><span class="linenos">2299</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bracket_sql-2300"><a href="#Generator.bracket_sql-2300"><span class="linenos">2300</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span>
-</span><span id="Generator.bracket_sql-2301"><a href="#Generator.bracket_sql-2301"><span class="linenos">2301</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Generator.bracket_sql-2302"><a href="#Generator.bracket_sql-2302"><span class="linenos">2302</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Generator.bracket_sql-2303"><a href="#Generator.bracket_sql-2303"><span class="linenos">2303</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Generator.bracket_sql-2304"><a href="#Generator.bracket_sql-2304"><span class="linenos">2304</span></a> <span class="p">)</span>
-</span><span id="Generator.bracket_sql-2305"><a href="#Generator.bracket_sql-2305"><span class="linenos">2305</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator.bracket_sql-2306"><a href="#Generator.bracket_sql-2306"><span class="linenos">2306</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">[</span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">]&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bracket_sql-2306"><a href="#Generator.bracket_sql-2306"><span class="linenos">2306</span></a> <span class="k">def</span> <span class="nf">bracket_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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bracket_sql-2307"><a href="#Generator.bracket_sql-2307"><span class="linenos">2307</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span>
+</span><span id="Generator.bracket_sql-2308"><a href="#Generator.bracket_sql-2308"><span class="linenos">2308</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Generator.bracket_sql-2309"><a href="#Generator.bracket_sql-2309"><span class="linenos">2309</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Generator.bracket_sql-2310"><a href="#Generator.bracket_sql-2310"><span class="linenos">2310</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</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;offset&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Generator.bracket_sql-2311"><a href="#Generator.bracket_sql-2311"><span class="linenos">2311</span></a> <span class="p">)</span>
+</span><span id="Generator.bracket_sql-2312"><a href="#Generator.bracket_sql-2312"><span class="linenos">2312</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator.bracket_sql-2313"><a href="#Generator.bracket_sql-2313"><span class="linenos">2313</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">[</span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">]&quot;</span>
</span></pre></div>
@@ -13357,8 +13403,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.all_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.all_sql-2308"><a href="#Generator.all_sql-2308"><span class="linenos">2308</span></a> <span class="k">def</span> <span class="nf">all_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">All</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.all_sql-2309"><a href="#Generator.all_sql-2309"><span class="linenos">2309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.all_sql-2315"><a href="#Generator.all_sql-2315"><span class="linenos">2315</span></a> <span class="k">def</span> <span class="nf">all_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">All</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.all_sql-2316"><a href="#Generator.all_sql-2316"><span class="linenos">2316</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13376,11 +13422,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.any_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.any_sql-2311"><a href="#Generator.any_sql-2311"><span class="linenos">2311</span></a> <span class="k">def</span> <span class="nf">any_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">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.any_sql-2312"><a href="#Generator.any_sql-2312"><span class="linenos">2312</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.any_sql-2313"><a href="#Generator.any_sql-2313"><span class="linenos">2313</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Generator.any_sql-2314"><a href="#Generator.any_sql-2314"><span class="linenos">2314</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.any_sql-2315"><a href="#Generator.any_sql-2315"><span class="linenos">2315</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ANY </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.any_sql-2318"><a href="#Generator.any_sql-2318"><span class="linenos">2318</span></a> <span class="k">def</span> <span class="nf">any_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">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.any_sql-2319"><a href="#Generator.any_sql-2319"><span class="linenos">2319</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.any_sql-2320"><a href="#Generator.any_sql-2320"><span class="linenos">2320</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Generator.any_sql-2321"><a href="#Generator.any_sql-2321"><span class="linenos">2321</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.any_sql-2322"><a href="#Generator.any_sql-2322"><span class="linenos">2322</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ANY </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13398,8 +13444,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.exists_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.exists_sql-2317"><a href="#Generator.exists_sql-2317"><span class="linenos">2317</span></a> <span class="k">def</span> <span class="nf">exists_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">Exists</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.exists_sql-2318"><a href="#Generator.exists_sql-2318"><span class="linenos">2318</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXISTS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.exists_sql-2324"><a href="#Generator.exists_sql-2324"><span class="linenos">2324</span></a> <span class="k">def</span> <span class="nf">exists_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">Exists</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.exists_sql-2325"><a href="#Generator.exists_sql-2325"><span class="linenos">2325</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXISTS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13417,25 +13463,25 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.case_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.case_sql-2320"><a href="#Generator.case_sql-2320"><span class="linenos">2320</span></a> <span class="k">def</span> <span class="nf">case_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">Case</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.case_sql-2321"><a href="#Generator.case_sql-2321"><span class="linenos">2321</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.case_sql-2322"><a href="#Generator.case_sql-2322"><span class="linenos">2322</span></a> <span class="n">statements</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;CASE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;CASE&quot;</span><span class="p">]</span>
-</span><span id="Generator.case_sql-2323"><a href="#Generator.case_sql-2323"><span class="linenos">2323</span></a>
-</span><span id="Generator.case_sql-2324"><a href="#Generator.case_sql-2324"><span class="linenos">2324</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;ifs&quot;</span><span class="p">]:</span>
-</span><span id="Generator.case_sql-2325"><a href="#Generator.case_sql-2325"><span class="linenos">2325</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.case_sql-2326"><a href="#Generator.case_sql-2326"><span class="linenos">2326</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;THEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.case_sql-2327"><a href="#Generator.case_sql-2327"><span class="linenos">2327</span></a>
-</span><span id="Generator.case_sql-2328"><a href="#Generator.case_sql-2328"><span class="linenos">2328</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator.case_sql-2329"><a href="#Generator.case_sql-2329"><span class="linenos">2329</span></a>
-</span><span id="Generator.case_sql-2330"><a href="#Generator.case_sql-2330"><span class="linenos">2330</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.case_sql-2331"><a href="#Generator.case_sql-2331"><span class="linenos">2331</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ELSE </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.case_sql-2332"><a href="#Generator.case_sql-2332"><span class="linenos">2332</span></a>
-</span><span id="Generator.case_sql-2333"><a href="#Generator.case_sql-2333"><span class="linenos">2333</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.case_sql-2327"><a href="#Generator.case_sql-2327"><span class="linenos">2327</span></a> <span class="k">def</span> <span class="nf">case_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">Case</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.case_sql-2328"><a href="#Generator.case_sql-2328"><span class="linenos">2328</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.case_sql-2329"><a href="#Generator.case_sql-2329"><span class="linenos">2329</span></a> <span class="n">statements</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;CASE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;CASE&quot;</span><span class="p">]</span>
+</span><span id="Generator.case_sql-2330"><a href="#Generator.case_sql-2330"><span class="linenos">2330</span></a>
+</span><span id="Generator.case_sql-2331"><a href="#Generator.case_sql-2331"><span class="linenos">2331</span></a> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;ifs&quot;</span><span class="p">]:</span>
+</span><span id="Generator.case_sql-2332"><a href="#Generator.case_sql-2332"><span class="linenos">2332</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.case_sql-2333"><a href="#Generator.case_sql-2333"><span class="linenos">2333</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;THEN </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Generator.case_sql-2334"><a href="#Generator.case_sql-2334"><span class="linenos">2334</span></a>
-</span><span id="Generator.case_sql-2335"><a href="#Generator.case_sql-2335"><span class="linenos">2335</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
-</span><span id="Generator.case_sql-2336"><a href="#Generator.case_sql-2336"><span class="linenos">2336</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">),</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.case_sql-2337"><a href="#Generator.case_sql-2337"><span class="linenos">2337</span></a>
-</span><span id="Generator.case_sql-2338"><a href="#Generator.case_sql-2338"><span class="linenos">2338</span></a> <span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span>
+</span><span id="Generator.case_sql-2335"><a href="#Generator.case_sql-2335"><span class="linenos">2335</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator.case_sql-2336"><a href="#Generator.case_sql-2336"><span class="linenos">2336</span></a>
+</span><span id="Generator.case_sql-2337"><a href="#Generator.case_sql-2337"><span class="linenos">2337</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.case_sql-2338"><a href="#Generator.case_sql-2338"><span class="linenos">2338</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ELSE </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.case_sql-2339"><a href="#Generator.case_sql-2339"><span class="linenos">2339</span></a>
+</span><span id="Generator.case_sql-2340"><a href="#Generator.case_sql-2340"><span class="linenos">2340</span></a> <span class="n">statements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
+</span><span id="Generator.case_sql-2341"><a href="#Generator.case_sql-2341"><span class="linenos">2341</span></a>
+</span><span id="Generator.case_sql-2342"><a href="#Generator.case_sql-2342"><span class="linenos">2342</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
+</span><span id="Generator.case_sql-2343"><a href="#Generator.case_sql-2343"><span class="linenos">2343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">),</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.case_sql-2344"><a href="#Generator.case_sql-2344"><span class="linenos">2344</span></a>
+</span><span id="Generator.case_sql-2345"><a href="#Generator.case_sql-2345"><span class="linenos">2345</span></a> <span class="k">return</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">statements</span><span class="p">)</span>
</span></pre></div>
@@ -13453,10 +13499,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.constraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.constraint_sql-2340"><a href="#Generator.constraint_sql-2340"><span class="linenos">2340</span></a> <span class="k">def</span> <span class="nf">constraint_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">Constraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.constraint_sql-2341"><a href="#Generator.constraint_sql-2341"><span class="linenos">2341</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.constraint_sql-2342"><a href="#Generator.constraint_sql-2342"><span class="linenos">2342</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.constraint_sql-2343"><a href="#Generator.constraint_sql-2343"><span class="linenos">2343</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.constraint_sql-2347"><a href="#Generator.constraint_sql-2347"><span class="linenos">2347</span></a> <span class="k">def</span> <span class="nf">constraint_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">Constraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.constraint_sql-2348"><a href="#Generator.constraint_sql-2348"><span class="linenos">2348</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.constraint_sql-2349"><a href="#Generator.constraint_sql-2349"><span class="linenos">2349</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.constraint_sql-2350"><a href="#Generator.constraint_sql-2350"><span class="linenos">2350</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13474,10 +13520,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.nextvaluefor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nextvaluefor_sql-2345"><a href="#Generator.nextvaluefor_sql-2345"><span class="linenos">2345</span></a> <span class="k">def</span> <span class="nf">nextvaluefor_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">NextValueFor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.nextvaluefor_sql-2346"><a href="#Generator.nextvaluefor_sql-2346"><span class="linenos">2346</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator.nextvaluefor_sql-2347"><a href="#Generator.nextvaluefor_sql-2347"><span class="linenos">2347</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OVER (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.nextvaluefor_sql-2348"><a href="#Generator.nextvaluefor_sql-2348"><span class="linenos">2348</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NEXT VALUE FOR </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="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nextvaluefor_sql-2352"><a href="#Generator.nextvaluefor_sql-2352"><span class="linenos">2352</span></a> <span class="k">def</span> <span class="nf">nextvaluefor_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">NextValueFor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.nextvaluefor_sql-2353"><a href="#Generator.nextvaluefor_sql-2353"><span class="linenos">2353</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator.nextvaluefor_sql-2354"><a href="#Generator.nextvaluefor_sql-2354"><span class="linenos">2354</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; OVER (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">order_sql</span><span class="p">(</span><span class="n">order</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">order</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.nextvaluefor_sql-2355"><a href="#Generator.nextvaluefor_sql-2355"><span class="linenos">2355</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NEXT VALUE FOR </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="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13495,10 +13541,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.extract_sql-2350"><a href="#Generator.extract_sql-2350"><span class="linenos">2350</span></a> <span class="k">def</span> <span class="nf">extract_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">Extract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.extract_sql-2351"><a href="#Generator.extract_sql-2351"><span class="linenos">2351</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Generator.extract_sql-2352"><a href="#Generator.extract_sql-2352"><span class="linenos">2352</span></a> <span class="n">expression_sql</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="Generator.extract_sql-2353"><a href="#Generator.extract_sql-2353"><span class="linenos">2353</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.extract_sql-2357"><a href="#Generator.extract_sql-2357"><span class="linenos">2357</span></a> <span class="k">def</span> <span class="nf">extract_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">Extract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.extract_sql-2358"><a href="#Generator.extract_sql-2358"><span class="linenos">2358</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXTRACT_ALLOWS_QUOTES</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Generator.extract_sql-2359"><a href="#Generator.extract_sql-2359"><span class="linenos">2359</span></a> <span class="n">expression_sql</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="Generator.extract_sql-2360"><a href="#Generator.extract_sql-2360"><span class="linenos">2360</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXTRACT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -13516,15 +13562,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.trim_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trim_sql-2355"><a href="#Generator.trim_sql-2355"><span class="linenos">2355</span></a> <span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.trim_sql-2356"><a href="#Generator.trim_sql-2356"><span class="linenos">2356</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="Generator.trim_sql-2357"><a href="#Generator.trim_sql-2357"><span class="linenos">2357</span></a>
-</span><span id="Generator.trim_sql-2358"><a href="#Generator.trim_sql-2358"><span class="linenos">2358</span></a> <span class="k">if</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span>
-</span><span id="Generator.trim_sql-2359"><a href="#Generator.trim_sql-2359"><span class="linenos">2359</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;LTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.trim_sql-2360"><a href="#Generator.trim_sql-2360"><span class="linenos">2360</span></a> <span class="k">elif</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span>
-</span><span id="Generator.trim_sql-2361"><a href="#Generator.trim_sql-2361"><span class="linenos">2361</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;RTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.trim_sql-2362"><a href="#Generator.trim_sql-2362"><span class="linenos">2362</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.trim_sql-2363"><a href="#Generator.trim_sql-2363"><span class="linenos">2363</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;TRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trim_sql-2362"><a href="#Generator.trim_sql-2362"><span class="linenos">2362</span></a> <span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.trim_sql-2363"><a href="#Generator.trim_sql-2363"><span class="linenos">2363</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="Generator.trim_sql-2364"><a href="#Generator.trim_sql-2364"><span class="linenos">2364</span></a>
+</span><span id="Generator.trim_sql-2365"><a href="#Generator.trim_sql-2365"><span class="linenos">2365</span></a> <span class="k">if</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span>
+</span><span id="Generator.trim_sql-2366"><a href="#Generator.trim_sql-2366"><span class="linenos">2366</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;LTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.trim_sql-2367"><a href="#Generator.trim_sql-2367"><span class="linenos">2367</span></a> <span class="k">elif</span> <span class="n">trim_type</span> <span class="o">==</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span>
+</span><span id="Generator.trim_sql-2368"><a href="#Generator.trim_sql-2368"><span class="linenos">2368</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;RTRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.trim_sql-2369"><a href="#Generator.trim_sql-2369"><span class="linenos">2369</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.trim_sql-2370"><a href="#Generator.trim_sql-2370"><span class="linenos">2370</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;TRIM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -13542,18 +13588,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.convert_concat_args"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.convert_concat_args-2365"><a href="#Generator.convert_concat_args-2365"><span class="linenos">2365</span></a> <span class="k">def</span> <span class="nf">convert_concat_args</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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Generator.convert_concat_args-2366"><a href="#Generator.convert_concat_args-2366"><span class="linenos">2366</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Generator.convert_concat_args-2367"><a href="#Generator.convert_concat_args-2367"><span class="linenos">2367</span></a> <span class="k">if</span> <span class="nb">isinstance</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">ConcatWs</span><span class="p">):</span>
-</span><span id="Generator.convert_concat_args-2368"><a href="#Generator.convert_concat_args-2368"><span class="linenos">2368</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># Skip the delimiter</span>
-</span><span id="Generator.convert_concat_args-2369"><a href="#Generator.convert_concat_args-2369"><span class="linenos">2369</span></a>
-</span><span id="Generator.convert_concat_args-2370"><a href="#Generator.convert_concat_args-2370"><span class="linenos">2370</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="Generator.convert_concat_args-2371"><a href="#Generator.convert_concat_args-2371"><span class="linenos">2371</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
-</span><span id="Generator.convert_concat_args-2372"><a href="#Generator.convert_concat_args-2372"><span class="linenos">2372</span></a>
-</span><span id="Generator.convert_concat_args-2373"><a href="#Generator.convert_concat_args-2373"><span class="linenos">2373</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span> <span class="ow">and</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;coalesce&quot;</span><span class="p">):</span>
-</span><span id="Generator.convert_concat_args-2374"><a href="#Generator.convert_concat_args-2374"><span class="linenos">2374</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</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">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 class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
-</span><span id="Generator.convert_concat_args-2375"><a href="#Generator.convert_concat_args-2375"><span class="linenos">2375</span></a>
-</span><span id="Generator.convert_concat_args-2376"><a href="#Generator.convert_concat_args-2376"><span class="linenos">2376</span></a> <span class="k">return</span> <span class="n">args</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.convert_concat_args-2372"><a href="#Generator.convert_concat_args-2372"><span class="linenos">2372</span></a> <span class="k">def</span> <span class="nf">convert_concat_args</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">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Generator.convert_concat_args-2373"><a href="#Generator.convert_concat_args-2373"><span class="linenos">2373</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Generator.convert_concat_args-2374"><a href="#Generator.convert_concat_args-2374"><span class="linenos">2374</span></a> <span class="k">if</span> <span class="nb">isinstance</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">ConcatWs</span><span class="p">):</span>
+</span><span id="Generator.convert_concat_args-2375"><a href="#Generator.convert_concat_args-2375"><span class="linenos">2375</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="c1"># Skip the delimiter</span>
+</span><span id="Generator.convert_concat_args-2376"><a href="#Generator.convert_concat_args-2376"><span class="linenos">2376</span></a>
+</span><span id="Generator.convert_concat_args-2377"><a href="#Generator.convert_concat_args-2377"><span class="linenos">2377</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="Generator.convert_concat_args-2378"><a href="#Generator.convert_concat_args-2378"><span class="linenos">2378</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="Generator.convert_concat_args-2379"><a href="#Generator.convert_concat_args-2379"><span class="linenos">2379</span></a>
+</span><span id="Generator.convert_concat_args-2380"><a href="#Generator.convert_concat_args-2380"><span class="linenos">2380</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span> <span class="ow">and</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;coalesce&quot;</span><span class="p">):</span>
+</span><span id="Generator.convert_concat_args-2381"><a href="#Generator.convert_concat_args-2381"><span class="linenos">2381</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;coalesce&quot;</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">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 class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+</span><span id="Generator.convert_concat_args-2382"><a href="#Generator.convert_concat_args-2382"><span class="linenos">2382</span></a>
+</span><span id="Generator.convert_concat_args-2383"><a href="#Generator.convert_concat_args-2383"><span class="linenos">2383</span></a> <span class="k">return</span> <span class="n">args</span>
</span></pre></div>
@@ -13571,14 +13617,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.concat_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.concat_sql-2378"><a href="#Generator.concat_sql-2378"><span class="linenos">2378</span></a> <span class="k">def</span> <span class="nf">concat_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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.concat_sql-2379"><a href="#Generator.concat_sql-2379"><span class="linenos">2379</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.concat_sql-2380"><a href="#Generator.concat_sql-2380"><span class="linenos">2380</span></a>
-</span><span id="Generator.concat_sql-2381"><a href="#Generator.concat_sql-2381"><span class="linenos">2381</span></a> <span class="c1"># Some dialects don&#39;t allow a single-argument CONCAT call</span>
-</span><span id="Generator.concat_sql-2382"><a href="#Generator.concat_sql-2382"><span class="linenos">2382</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator.concat_sql-2383"><a href="#Generator.concat_sql-2383"><span class="linenos">2383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="Generator.concat_sql-2384"><a href="#Generator.concat_sql-2384"><span class="linenos">2384</span></a>
-</span><span id="Generator.concat_sql-2385"><a href="#Generator.concat_sql-2385"><span class="linenos">2385</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.concat_sql-2385"><a href="#Generator.concat_sql-2385"><span class="linenos">2385</span></a> <span class="k">def</span> <span class="nf">concat_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">Concat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.concat_sql-2386"><a href="#Generator.concat_sql-2386"><span class="linenos">2386</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.concat_sql-2387"><a href="#Generator.concat_sql-2387"><span class="linenos">2387</span></a>
+</span><span id="Generator.concat_sql-2388"><a href="#Generator.concat_sql-2388"><span class="linenos">2388</span></a> <span class="c1"># Some dialects don&#39;t allow a single-argument CONCAT call</span>
+</span><span id="Generator.concat_sql-2389"><a href="#Generator.concat_sql-2389"><span class="linenos">2389</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_SINGLE_ARG_CONCAT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator.concat_sql-2390"><a href="#Generator.concat_sql-2390"><span class="linenos">2390</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="Generator.concat_sql-2391"><a href="#Generator.concat_sql-2391"><span class="linenos">2391</span></a>
+</span><span id="Generator.concat_sql-2392"><a href="#Generator.concat_sql-2392"><span class="linenos">2392</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -13596,10 +13642,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.concatws_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.concatws_sql-2387"><a href="#Generator.concatws_sql-2387"><span class="linenos">2387</span></a> <span class="k">def</span> <span class="nf">concatws_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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.concatws_sql-2388"><a href="#Generator.concatws_sql-2388"><span class="linenos">2388</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator.concatws_sql-2389"><a href="#Generator.concatws_sql-2389"><span class="linenos">2389</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.concatws_sql-2390"><a href="#Generator.concatws_sql-2390"><span class="linenos">2390</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.concatws_sql-2394"><a href="#Generator.concatws_sql-2394"><span class="linenos">2394</span></a> <span class="k">def</span> <span class="nf">concatws_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">ConcatWs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.concatws_sql-2395"><a href="#Generator.concatws_sql-2395"><span class="linenos">2395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator.concatws_sql-2396"><a href="#Generator.concatws_sql-2396"><span class="linenos">2396</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">convert_concat_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.concatws_sql-2397"><a href="#Generator.concatws_sql-2397"><span class="linenos">2397</span></a> <span class="p">)</span>
</span></pre></div>
@@ -13617,9 +13663,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.check_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.check_sql-2392"><a href="#Generator.check_sql-2392"><span class="linenos">2392</span></a> <span class="k">def</span> <span class="nf">check_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">Check</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.check_sql-2393"><a href="#Generator.check_sql-2393"><span class="linenos">2393</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.check_sql-2394"><a href="#Generator.check_sql-2394"><span class="linenos">2394</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.check_sql-2399"><a href="#Generator.check_sql-2399"><span class="linenos">2399</span></a> <span class="k">def</span> <span class="nf">check_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">Check</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.check_sql-2400"><a href="#Generator.check_sql-2400"><span class="linenos">2400</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.check_sql-2401"><a href="#Generator.check_sql-2401"><span class="linenos">2401</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CHECK (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -13637,15 +13683,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.foreignkey_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.foreignkey_sql-2396"><a href="#Generator.foreignkey_sql-2396"><span class="linenos">2396</span></a> <span class="k">def</span> <span class="nf">foreignkey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.foreignkey_sql-2397"><a href="#Generator.foreignkey_sql-2397"><span class="linenos">2397</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.foreignkey_sql-2398"><a href="#Generator.foreignkey_sql-2398"><span class="linenos">2398</span></a> <span class="n">reference</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;reference&quot;</span><span class="p">)</span>
-</span><span id="Generator.foreignkey_sql-2399"><a href="#Generator.foreignkey_sql-2399"><span class="linenos">2399</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">reference</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">reference</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.foreignkey_sql-2400"><a href="#Generator.foreignkey_sql-2400"><span class="linenos">2400</span></a> <span class="n">delete</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;delete&quot;</span><span class="p">)</span>
-</span><span id="Generator.foreignkey_sql-2401"><a href="#Generator.foreignkey_sql-2401"><span class="linenos">2401</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON DELETE </span><span class="si">{</span><span class="n">delete</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">delete</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.foreignkey_sql-2402"><a href="#Generator.foreignkey_sql-2402"><span class="linenos">2402</span></a> <span class="n">update</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;update&quot;</span><span class="p">)</span>
-</span><span id="Generator.foreignkey_sql-2403"><a href="#Generator.foreignkey_sql-2403"><span class="linenos">2403</span></a> <span class="n">update</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON UPDATE </span><span class="si">{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">update</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.foreignkey_sql-2404"><a href="#Generator.foreignkey_sql-2404"><span class="linenos">2404</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOREIGN KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">reference</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.foreignkey_sql-2403"><a href="#Generator.foreignkey_sql-2403"><span class="linenos">2403</span></a> <span class="k">def</span> <span class="nf">foreignkey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.foreignkey_sql-2404"><a href="#Generator.foreignkey_sql-2404"><span class="linenos">2404</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.foreignkey_sql-2405"><a href="#Generator.foreignkey_sql-2405"><span class="linenos">2405</span></a> <span class="n">reference</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;reference&quot;</span><span class="p">)</span>
+</span><span id="Generator.foreignkey_sql-2406"><a href="#Generator.foreignkey_sql-2406"><span class="linenos">2406</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">reference</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">reference</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.foreignkey_sql-2407"><a href="#Generator.foreignkey_sql-2407"><span class="linenos">2407</span></a> <span class="n">delete</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;delete&quot;</span><span class="p">)</span>
+</span><span id="Generator.foreignkey_sql-2408"><a href="#Generator.foreignkey_sql-2408"><span class="linenos">2408</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON DELETE </span><span class="si">{</span><span class="n">delete</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">delete</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.foreignkey_sql-2409"><a href="#Generator.foreignkey_sql-2409"><span class="linenos">2409</span></a> <span class="n">update</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;update&quot;</span><span class="p">)</span>
+</span><span id="Generator.foreignkey_sql-2410"><a href="#Generator.foreignkey_sql-2410"><span class="linenos">2410</span></a> <span class="n">update</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON UPDATE </span><span class="si">{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">update</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.foreignkey_sql-2411"><a href="#Generator.foreignkey_sql-2411"><span class="linenos">2411</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOREIGN KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">reference</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">update</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13663,11 +13709,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.primarykey_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykey_sql-2406"><a href="#Generator.primarykey_sql-2406"><span class="linenos">2406</span></a> <span class="k">def</span> <span class="nf">primarykey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.primarykey_sql-2407"><a href="#Generator.primarykey_sql-2407"><span class="linenos">2407</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.primarykey_sql-2408"><a href="#Generator.primarykey_sql-2408"><span class="linenos">2408</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.primarykey_sql-2409"><a href="#Generator.primarykey_sql-2409"><span class="linenos">2409</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.primarykey_sql-2410"><a href="#Generator.primarykey_sql-2410"><span class="linenos">2410</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykey_sql-2413"><a href="#Generator.primarykey_sql-2413"><span class="linenos">2413</span></a> <span class="k">def</span> <span class="nf">primarykey_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">ForeignKey</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.primarykey_sql-2414"><a href="#Generator.primarykey_sql-2414"><span class="linenos">2414</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.primarykey_sql-2415"><a href="#Generator.primarykey_sql-2415"><span class="linenos">2415</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.primarykey_sql-2416"><a href="#Generator.primarykey_sql-2416"><span class="linenos">2416</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.primarykey_sql-2417"><a href="#Generator.primarykey_sql-2417"><span class="linenos">2417</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;PRIMARY KEY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13685,8 +13731,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.if_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.if_sql-2412"><a href="#Generator.if_sql-2412"><span class="linenos">2412</span></a> <span class="k">def</span> <span class="nf">if_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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.if_sql-2413"><a href="#Generator.if_sql-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</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;false&quot;</span><span class="p">)))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.if_sql-2419"><a href="#Generator.if_sql-2419"><span class="linenos">2419</span></a> <span class="k">def</span> <span class="nf">if_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">If</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.if_sql-2420"><a href="#Generator.if_sql-2420"><span class="linenos">2420</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">case_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">],</span> <span class="n">default</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;false&quot;</span><span class="p">)))</span>
</span></pre></div>
@@ -13704,10 +13750,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.matchagainst_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchagainst_sql-2415"><a href="#Generator.matchagainst_sql-2415"><span class="linenos">2415</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.matchagainst_sql-2416"><a href="#Generator.matchagainst_sql-2416"><span class="linenos">2416</span></a> <span class="n">modifier</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;modifier&quot;</span><span class="p">)</span>
-</span><span id="Generator.matchagainst_sql-2417"><a href="#Generator.matchagainst_sql-2417"><span class="linenos">2417</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.matchagainst_sql-2418"><a href="#Generator.matchagainst_sql-2418"><span class="linenos">2418</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s1">&#39;MATCH&#39;</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span><span class="si">}</span><span class="s2"> AGAINST(</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="n">modifier</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchagainst_sql-2422"><a href="#Generator.matchagainst_sql-2422"><span class="linenos">2422</span></a> <span class="k">def</span> <span class="nf">matchagainst_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">MatchAgainst</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.matchagainst_sql-2423"><a href="#Generator.matchagainst_sql-2423"><span class="linenos">2423</span></a> <span class="n">modifier</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;modifier&quot;</span><span class="p">)</span>
+</span><span id="Generator.matchagainst_sql-2424"><a href="#Generator.matchagainst_sql-2424"><span class="linenos">2424</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">modifier</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.matchagainst_sql-2425"><a href="#Generator.matchagainst_sql-2425"><span class="linenos">2425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s1">&#39;MATCH&#39;</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span><span class="si">}</span><span class="s2"> AGAINST(</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="n">modifier</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -13725,8 +13771,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsonkeyvalue_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonkeyvalue_sql-2420"><a href="#Generator.jsonkeyvalue_sql-2420"><span class="linenos">2420</span></a> <span class="k">def</span> <span class="nf">jsonkeyvalue_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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonkeyvalue_sql-2421"><a href="#Generator.jsonkeyvalue_sql-2421"><span class="linenos">2421</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_PAIR_SEP</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonkeyvalue_sql-2427"><a href="#Generator.jsonkeyvalue_sql-2427"><span class="linenos">2427</span></a> <span class="k">def</span> <span class="nf">jsonkeyvalue_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">JSONKeyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonkeyvalue_sql-2428"><a href="#Generator.jsonkeyvalue_sql-2428"><span class="linenos">2428</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_PAIR_SEP</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13744,9 +13790,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsonpath_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonpath_sql-2423"><a href="#Generator.jsonpath_sql-2423"><span class="linenos">2423</span></a> <span class="k">def</span> <span class="nf">jsonpath_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">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonpath_sql-2424"><a href="#Generator.jsonpath_sql-2424"><span class="linenos">2424</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonpath_sql-2425"><a href="#Generator.jsonpath_sql-2425"><span class="linenos">2425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonpath_sql-2430"><a href="#Generator.jsonpath_sql-2430"><span class="linenos">2430</span></a> <span class="k">def</span> <span class="nf">jsonpath_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">JSONPath</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonpath_sql-2431"><a href="#Generator.jsonpath_sql-2431"><span class="linenos">2431</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonpath_sql-2432"><a href="#Generator.jsonpath_sql-2432"><span class="linenos">2432</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_START</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">QUOTE_END</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13764,26 +13810,26 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.json_path_part"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.json_path_part-2427"><a href="#Generator.json_path_part-2427"><span class="linenos">2427</span></a> <span class="k">def</span> <span class="nf">json_path_part</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="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.json_path_part-2428"><a href="#Generator.json_path_part-2428"><span class="linenos">2428</span></a> <span class="k">if</span> <span class="nb">isinstance</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">JSONPathPart</span><span class="p">):</span>
-</span><span id="Generator.json_path_part-2429"><a href="#Generator.json_path_part-2429"><span class="linenos">2429</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator.json_path_part-2430"><a href="#Generator.json_path_part-2430"><span class="linenos">2430</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
-</span><span id="Generator.json_path_part-2431"><a href="#Generator.json_path_part-2431"><span class="linenos">2431</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported JSONPathPart type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.json_path_part-2432"><a href="#Generator.json_path_part-2432"><span class="linenos">2432</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.json_path_part-2433"><a href="#Generator.json_path_part-2433"><span class="linenos">2433</span></a>
-</span><span id="Generator.json_path_part-2434"><a href="#Generator.json_path_part-2434"><span class="linenos">2434</span></a> <span class="k">return</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.json_path_part-2435"><a href="#Generator.json_path_part-2435"><span class="linenos">2435</span></a>
-</span><span id="Generator.json_path_part-2436"><a href="#Generator.json_path_part-2436"><span class="linenos">2436</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
-</span><span id="Generator.json_path_part-2437"><a href="#Generator.json_path_part-2437"><span class="linenos">2437</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.json_path_part-2438"><a href="#Generator.json_path_part-2438"><span class="linenos">2438</span></a>
-</span><span id="Generator.json_path_part-2439"><a href="#Generator.json_path_part-2439"><span class="linenos">2439</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span><span class="p">:</span>
-</span><span id="Generator.json_path_part-2440"><a href="#Generator.json_path_part-2440"><span class="linenos">2440</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="Generator.json_path_part-2441"><a href="#Generator.json_path_part-2441"><span class="linenos">2441</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="se">\\</span><span class="s2">&#39;&quot;</span>
-</span><span id="Generator.json_path_part-2442"><a href="#Generator.json_path_part-2442"><span class="linenos">2442</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.json_path_part-2443"><a href="#Generator.json_path_part-2443"><span class="linenos">2443</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
-</span><span id="Generator.json_path_part-2444"><a href="#Generator.json_path_part-2444"><span class="linenos">2444</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s1">&quot;&#39;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.json_path_part-2434"><a href="#Generator.json_path_part-2434"><span class="linenos">2434</span></a> <span class="k">def</span> <span class="nf">json_path_part</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="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONPathPart</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.json_path_part-2435"><a href="#Generator.json_path_part-2435"><span class="linenos">2435</span></a> <span class="k">if</span> <span class="nb">isinstance</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">JSONPathPart</span><span class="p">):</span>
+</span><span id="Generator.json_path_part-2436"><a href="#Generator.json_path_part-2436"><span class="linenos">2436</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator.json_path_part-2437"><a href="#Generator.json_path_part-2437"><span class="linenos">2437</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+</span><span id="Generator.json_path_part-2438"><a href="#Generator.json_path_part-2438"><span class="linenos">2438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported JSONPathPart type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.json_path_part-2439"><a href="#Generator.json_path_part-2439"><span class="linenos">2439</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.json_path_part-2440"><a href="#Generator.json_path_part-2440"><span class="linenos">2440</span></a>
+</span><span id="Generator.json_path_part-2441"><a href="#Generator.json_path_part-2441"><span class="linenos">2441</span></a> <span class="k">return</span> <span class="n">transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.json_path_part-2442"><a href="#Generator.json_path_part-2442"><span class="linenos">2442</span></a>
+</span><span id="Generator.json_path_part-2443"><a href="#Generator.json_path_part-2443"><span class="linenos">2443</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+</span><span id="Generator.json_path_part-2444"><a href="#Generator.json_path_part-2444"><span class="linenos">2444</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Generator.json_path_part-2445"><a href="#Generator.json_path_part-2445"><span class="linenos">2445</span></a>
-</span><span id="Generator.json_path_part-2446"><a href="#Generator.json_path_part-2446"><span class="linenos">2446</span></a> <span class="k">return</span> <span class="n">escaped</span>
+</span><span id="Generator.json_path_part-2446"><a href="#Generator.json_path_part-2446"><span class="linenos">2446</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">JSON_PATH_SINGLE_QUOTE_ESCAPE</span><span class="p">:</span>
+</span><span id="Generator.json_path_part-2447"><a href="#Generator.json_path_part-2447"><span class="linenos">2447</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="Generator.json_path_part-2448"><a href="#Generator.json_path_part-2448"><span class="linenos">2448</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">expression</span><span class="si">}</span><span class="se">\\</span><span class="s2">&#39;&quot;</span>
+</span><span id="Generator.json_path_part-2449"><a href="#Generator.json_path_part-2449"><span class="linenos">2449</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.json_path_part-2450"><a href="#Generator.json_path_part-2450"><span class="linenos">2450</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
+</span><span id="Generator.json_path_part-2451"><a href="#Generator.json_path_part-2451"><span class="linenos">2451</span></a> <span class="n">escaped</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;&quot;</span><span class="si">{</span><span class="n">escaped</span><span class="si">}</span><span class="s1">&quot;&#39;</span>
+</span><span id="Generator.json_path_part-2452"><a href="#Generator.json_path_part-2452"><span class="linenos">2452</span></a>
+</span><span id="Generator.json_path_part-2453"><a href="#Generator.json_path_part-2453"><span class="linenos">2453</span></a> <span class="k">return</span> <span class="n">escaped</span>
</span></pre></div>
@@ -13801,8 +13847,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.formatjson_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.formatjson_sql-2448"><a href="#Generator.formatjson_sql-2448"><span class="linenos">2448</span></a> <span class="k">def</span> <span class="nf">formatjson_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">FormatJson</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.formatjson_sql-2449"><a href="#Generator.formatjson_sql-2449"><span class="linenos">2449</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> FORMAT JSON&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.formatjson_sql-2455"><a href="#Generator.formatjson_sql-2455"><span class="linenos">2455</span></a> <span class="k">def</span> <span class="nf">formatjson_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">FormatJson</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.formatjson_sql-2456"><a href="#Generator.formatjson_sql-2456"><span class="linenos">2456</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> FORMAT JSON&quot;</span>
</span></pre></div>
@@ -13820,26 +13866,26 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsonobject_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobject_sql-2451"><a href="#Generator.jsonobject_sql-2451"><span class="linenos">2451</span></a> <span class="k">def</span> <span class="nf">jsonobject_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">JSONObject</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonobject_sql-2452"><a href="#Generator.jsonobject_sql-2452"><span class="linenos">2452</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonobject_sql-2453"><a href="#Generator.jsonobject_sql-2453"><span class="linenos">2453</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonobject_sql-2454"><a href="#Generator.jsonobject_sql-2454"><span class="linenos">2454</span></a>
-</span><span id="Generator.jsonobject_sql-2455"><a href="#Generator.jsonobject_sql-2455"><span class="linenos">2455</span></a> <span class="n">unique_keys</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;unique_keys&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonobject_sql-2456"><a href="#Generator.jsonobject_sql-2456"><span class="linenos">2456</span></a> <span class="k">if</span> <span class="n">unique_keys</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.jsonobject_sql-2457"><a href="#Generator.jsonobject_sql-2457"><span class="linenos">2457</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;WITH&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">unique_keys</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;WITHOUT&#39;</span><span class="si">}</span><span class="s2"> UNIQUE KEYS&quot;</span>
-</span><span id="Generator.jsonobject_sql-2458"><a href="#Generator.jsonobject_sql-2458"><span class="linenos">2458</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.jsonobject_sql-2459"><a href="#Generator.jsonobject_sql-2459"><span class="linenos">2459</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonobject_sql-2460"><a href="#Generator.jsonobject_sql-2460"><span class="linenos">2460</span></a>
-</span><span id="Generator.jsonobject_sql-2461"><a href="#Generator.jsonobject_sql-2461"><span class="linenos">2461</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonobject_sql-2462"><a href="#Generator.jsonobject_sql-2462"><span class="linenos">2462</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonobject_sql-2463"><a href="#Generator.jsonobject_sql-2463"><span class="linenos">2463</span></a> <span class="n">encoding</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;encoding&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonobject_sql-2464"><a href="#Generator.jsonobject_sql-2464"><span class="linenos">2464</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ENCODING </span><span class="si">{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">encoding</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonobject_sql-2465"><a href="#Generator.jsonobject_sql-2465"><span class="linenos">2465</span></a>
-</span><span id="Generator.jsonobject_sql-2466"><a href="#Generator.jsonobject_sql-2466"><span class="linenos">2466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator.jsonobject_sql-2467"><a href="#Generator.jsonobject_sql-2467"><span class="linenos">2467</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span> <span class="k">if</span> <span class="nb">isinstance</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">JSONObject</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">,</span>
-</span><span id="Generator.jsonobject_sql-2468"><a href="#Generator.jsonobject_sql-2468"><span class="linenos">2468</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Generator.jsonobject_sql-2469"><a href="#Generator.jsonobject_sql-2469"><span class="linenos">2469</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Generator.jsonobject_sql-2470"><a href="#Generator.jsonobject_sql-2470"><span class="linenos">2470</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobject_sql-2458"><a href="#Generator.jsonobject_sql-2458"><span class="linenos">2458</span></a> <span class="k">def</span> <span class="nf">jsonobject_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">JSONObject</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonobject_sql-2459"><a href="#Generator.jsonobject_sql-2459"><span class="linenos">2459</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonobject_sql-2460"><a href="#Generator.jsonobject_sql-2460"><span class="linenos">2460</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonobject_sql-2461"><a href="#Generator.jsonobject_sql-2461"><span class="linenos">2461</span></a>
+</span><span id="Generator.jsonobject_sql-2462"><a href="#Generator.jsonobject_sql-2462"><span class="linenos">2462</span></a> <span class="n">unique_keys</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;unique_keys&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonobject_sql-2463"><a href="#Generator.jsonobject_sql-2463"><span class="linenos">2463</span></a> <span class="k">if</span> <span class="n">unique_keys</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.jsonobject_sql-2464"><a href="#Generator.jsonobject_sql-2464"><span class="linenos">2464</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="s1">&#39;WITH&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">unique_keys</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;WITHOUT&#39;</span><span class="si">}</span><span class="s2"> UNIQUE KEYS&quot;</span>
+</span><span id="Generator.jsonobject_sql-2465"><a href="#Generator.jsonobject_sql-2465"><span class="linenos">2465</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.jsonobject_sql-2466"><a href="#Generator.jsonobject_sql-2466"><span class="linenos">2466</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonobject_sql-2467"><a href="#Generator.jsonobject_sql-2467"><span class="linenos">2467</span></a>
+</span><span id="Generator.jsonobject_sql-2468"><a href="#Generator.jsonobject_sql-2468"><span class="linenos">2468</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonobject_sql-2469"><a href="#Generator.jsonobject_sql-2469"><span class="linenos">2469</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonobject_sql-2470"><a href="#Generator.jsonobject_sql-2470"><span class="linenos">2470</span></a> <span class="n">encoding</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;encoding&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonobject_sql-2471"><a href="#Generator.jsonobject_sql-2471"><span class="linenos">2471</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ENCODING </span><span class="si">{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">encoding</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonobject_sql-2472"><a href="#Generator.jsonobject_sql-2472"><span class="linenos">2472</span></a>
+</span><span id="Generator.jsonobject_sql-2473"><a href="#Generator.jsonobject_sql-2473"><span class="linenos">2473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator.jsonobject_sql-2474"><a href="#Generator.jsonobject_sql-2474"><span class="linenos">2474</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span> <span class="k">if</span> <span class="nb">isinstance</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">JSONObject</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">,</span>
+</span><span id="Generator.jsonobject_sql-2475"><a href="#Generator.jsonobject_sql-2475"><span class="linenos">2475</span></a> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Generator.jsonobject_sql-2476"><a href="#Generator.jsonobject_sql-2476"><span class="linenos">2476</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">unique_keys</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator.jsonobject_sql-2477"><a href="#Generator.jsonobject_sql-2477"><span class="linenos">2477</span></a> <span class="p">)</span>
</span></pre></div>
@@ -13857,8 +13903,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsonobjectagg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobjectagg_sql-2472"><a href="#Generator.jsonobjectagg_sql-2472"><span class="linenos">2472</span></a> <span class="k">def</span> <span class="nf">jsonobjectagg_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">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonobjectagg_sql-2473"><a href="#Generator.jsonobjectagg_sql-2473"><span class="linenos">2473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">jsonobject_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobjectagg_sql-2479"><a href="#Generator.jsonobjectagg_sql-2479"><span class="linenos">2479</span></a> <span class="k">def</span> <span class="nf">jsonobjectagg_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">JSONObjectAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonobjectagg_sql-2480"><a href="#Generator.jsonobjectagg_sql-2480"><span class="linenos">2480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">jsonobject_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -13876,15 +13922,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsonarray_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonarray_sql-2475"><a href="#Generator.jsonarray_sql-2475"><span class="linenos">2475</span></a> <span class="k">def</span> <span class="nf">jsonarray_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">JSONArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonarray_sql-2476"><a href="#Generator.jsonarray_sql-2476"><span class="linenos">2476</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonarray_sql-2477"><a href="#Generator.jsonarray_sql-2477"><span class="linenos">2477</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonarray_sql-2478"><a href="#Generator.jsonarray_sql-2478"><span class="linenos">2478</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonarray_sql-2479"><a href="#Generator.jsonarray_sql-2479"><span class="linenos">2479</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonarray_sql-2480"><a href="#Generator.jsonarray_sql-2480"><span class="linenos">2480</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonarray_sql-2481"><a href="#Generator.jsonarray_sql-2481"><span class="linenos">2481</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator.jsonarray_sql-2482"><a href="#Generator.jsonarray_sql-2482"><span class="linenos">2482</span></a> <span class="s2">&quot;JSON_ARRAY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.jsonarray_sql-2483"><a href="#Generator.jsonarray_sql-2483"><span class="linenos">2483</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonarray_sql-2482"><a href="#Generator.jsonarray_sql-2482"><span class="linenos">2482</span></a> <span class="k">def</span> <span class="nf">jsonarray_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">JSONArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonarray_sql-2483"><a href="#Generator.jsonarray_sql-2483"><span class="linenos">2483</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonarray_sql-2484"><a href="#Generator.jsonarray_sql-2484"><span class="linenos">2484</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonarray_sql-2485"><a href="#Generator.jsonarray_sql-2485"><span class="linenos">2485</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonarray_sql-2486"><a href="#Generator.jsonarray_sql-2486"><span class="linenos">2486</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonarray_sql-2487"><a href="#Generator.jsonarray_sql-2487"><span class="linenos">2487</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonarray_sql-2488"><a href="#Generator.jsonarray_sql-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator.jsonarray_sql-2489"><a href="#Generator.jsonarray_sql-2489"><span class="linenos">2489</span></a> <span class="s2">&quot;JSON_ARRAY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.jsonarray_sql-2490"><a href="#Generator.jsonarray_sql-2490"><span class="linenos">2490</span></a> <span class="p">)</span>
</span></pre></div>
@@ -13902,19 +13948,19 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsonarrayagg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonarrayagg_sql-2485"><a href="#Generator.jsonarrayagg_sql-2485"><span class="linenos">2485</span></a> <span class="k">def</span> <span class="nf">jsonarrayagg_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">JSONArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonarrayagg_sql-2486"><a href="#Generator.jsonarrayagg_sql-2486"><span class="linenos">2486</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonarrayagg_sql-2487"><a href="#Generator.jsonarrayagg_sql-2487"><span class="linenos">2487</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonarrayagg_sql-2488"><a href="#Generator.jsonarrayagg_sql-2488"><span class="linenos">2488</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonarrayagg_sql-2489"><a href="#Generator.jsonarrayagg_sql-2489"><span class="linenos">2489</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonarrayagg_sql-2490"><a href="#Generator.jsonarrayagg_sql-2490"><span class="linenos">2490</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsonarrayagg_sql-2491"><a href="#Generator.jsonarrayagg_sql-2491"><span class="linenos">2491</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonarrayagg_sql-2492"><a href="#Generator.jsonarrayagg_sql-2492"><span class="linenos">2492</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonarrayagg_sql-2493"><a href="#Generator.jsonarrayagg_sql-2493"><span class="linenos">2493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator.jsonarrayagg_sql-2494"><a href="#Generator.jsonarrayagg_sql-2494"><span class="linenos">2494</span></a> <span class="s2">&quot;JSON_ARRAYAGG&quot;</span><span class="p">,</span>
-</span><span id="Generator.jsonarrayagg_sql-2495"><a href="#Generator.jsonarrayagg_sql-2495"><span class="linenos">2495</span></a> <span class="n">this</span><span class="p">,</span>
-</span><span id="Generator.jsonarrayagg_sql-2496"><a href="#Generator.jsonarrayagg_sql-2496"><span class="linenos">2496</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Generator.jsonarrayagg_sql-2497"><a href="#Generator.jsonarrayagg_sql-2497"><span class="linenos">2497</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonarrayagg_sql-2492"><a href="#Generator.jsonarrayagg_sql-2492"><span class="linenos">2492</span></a> <span class="k">def</span> <span class="nf">jsonarrayagg_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">JSONArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonarrayagg_sql-2493"><a href="#Generator.jsonarrayagg_sql-2493"><span class="linenos">2493</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonarrayagg_sql-2494"><a href="#Generator.jsonarrayagg_sql-2494"><span class="linenos">2494</span></a> <span class="n">order</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;order&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonarrayagg_sql-2495"><a href="#Generator.jsonarrayagg_sql-2495"><span class="linenos">2495</span></a> <span class="n">null_handling</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;null_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonarrayagg_sql-2496"><a href="#Generator.jsonarrayagg_sql-2496"><span class="linenos">2496</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">null_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">null_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonarrayagg_sql-2497"><a href="#Generator.jsonarrayagg_sql-2497"><span class="linenos">2497</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;return_type&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsonarrayagg_sql-2498"><a href="#Generator.jsonarrayagg_sql-2498"><span class="linenos">2498</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RETURNING </span><span class="si">{</span><span class="n">return_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">return_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonarrayagg_sql-2499"><a href="#Generator.jsonarrayagg_sql-2499"><span class="linenos">2499</span></a> <span class="n">strict</span> <span class="o">=</span> <span class="s2">&quot; STRICT&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;strict&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonarrayagg_sql-2500"><a href="#Generator.jsonarrayagg_sql-2500"><span class="linenos">2500</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator.jsonarrayagg_sql-2501"><a href="#Generator.jsonarrayagg_sql-2501"><span class="linenos">2501</span></a> <span class="s2">&quot;JSON_ARRAYAGG&quot;</span><span class="p">,</span>
+</span><span id="Generator.jsonarrayagg_sql-2502"><a href="#Generator.jsonarrayagg_sql-2502"><span class="linenos">2502</span></a> <span class="n">this</span><span class="p">,</span>
+</span><span id="Generator.jsonarrayagg_sql-2503"><a href="#Generator.jsonarrayagg_sql-2503"><span class="linenos">2503</span></a> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">order</span><span class="si">}{</span><span class="n">null_handling</span><span class="si">}{</span><span class="n">return_type</span><span class="si">}{</span><span class="n">strict</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Generator.jsonarrayagg_sql-2504"><a href="#Generator.jsonarrayagg_sql-2504"><span class="linenos">2504</span></a> <span class="p">)</span>
</span></pre></div>
@@ -13932,18 +13978,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsoncolumndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsoncolumndef_sql-2499"><a href="#Generator.jsoncolumndef_sql-2499"><span class="linenos">2499</span></a> <span class="k">def</span> <span class="nf">jsoncolumndef_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">JSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsoncolumndef_sql-2500"><a href="#Generator.jsoncolumndef_sql-2500"><span class="linenos">2500</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsoncolumndef_sql-2501"><a href="#Generator.jsoncolumndef_sql-2501"><span class="linenos">2501</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PATH </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsoncolumndef_sql-2502"><a href="#Generator.jsoncolumndef_sql-2502"><span class="linenos">2502</span></a> <span class="n">nested_schema</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;nested_schema&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsoncolumndef_sql-2503"><a href="#Generator.jsoncolumndef_sql-2503"><span class="linenos">2503</span></a>
-</span><span id="Generator.jsoncolumndef_sql-2504"><a href="#Generator.jsoncolumndef_sql-2504"><span class="linenos">2504</span></a> <span class="k">if</span> <span class="n">nested_schema</span><span class="p">:</span>
-</span><span id="Generator.jsoncolumndef_sql-2505"><a href="#Generator.jsoncolumndef_sql-2505"><span class="linenos">2505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NESTED</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">nested_schema</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.jsoncolumndef_sql-2506"><a href="#Generator.jsoncolumndef_sql-2506"><span class="linenos">2506</span></a>
-</span><span id="Generator.jsoncolumndef_sql-2507"><a href="#Generator.jsoncolumndef_sql-2507"><span class="linenos">2507</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsoncolumndef_sql-2508"><a href="#Generator.jsoncolumndef_sql-2508"><span class="linenos">2508</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsoncolumndef_sql-2509"><a href="#Generator.jsoncolumndef_sql-2509"><span class="linenos">2509</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsoncolumndef_sql-2510"><a href="#Generator.jsoncolumndef_sql-2510"><span class="linenos">2510</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsoncolumndef_sql-2506"><a href="#Generator.jsoncolumndef_sql-2506"><span class="linenos">2506</span></a> <span class="k">def</span> <span class="nf">jsoncolumndef_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">JSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsoncolumndef_sql-2507"><a href="#Generator.jsoncolumndef_sql-2507"><span class="linenos">2507</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsoncolumndef_sql-2508"><a href="#Generator.jsoncolumndef_sql-2508"><span class="linenos">2508</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; PATH </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsoncolumndef_sql-2509"><a href="#Generator.jsoncolumndef_sql-2509"><span class="linenos">2509</span></a> <span class="n">nested_schema</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;nested_schema&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsoncolumndef_sql-2510"><a href="#Generator.jsoncolumndef_sql-2510"><span class="linenos">2510</span></a>
+</span><span id="Generator.jsoncolumndef_sql-2511"><a href="#Generator.jsoncolumndef_sql-2511"><span class="linenos">2511</span></a> <span class="k">if</span> <span class="n">nested_schema</span><span class="p">:</span>
+</span><span id="Generator.jsoncolumndef_sql-2512"><a href="#Generator.jsoncolumndef_sql-2512"><span class="linenos">2512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NESTED</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">nested_schema</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.jsoncolumndef_sql-2513"><a href="#Generator.jsoncolumndef_sql-2513"><span class="linenos">2513</span></a>
+</span><span id="Generator.jsoncolumndef_sql-2514"><a href="#Generator.jsoncolumndef_sql-2514"><span class="linenos">2514</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsoncolumndef_sql-2515"><a href="#Generator.jsoncolumndef_sql-2515"><span class="linenos">2515</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsoncolumndef_sql-2516"><a href="#Generator.jsoncolumndef_sql-2516"><span class="linenos">2516</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsoncolumndef_sql-2517"><a href="#Generator.jsoncolumndef_sql-2517"><span class="linenos">2517</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -13961,8 +14007,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsonschema_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonschema_sql-2512"><a href="#Generator.jsonschema_sql-2512"><span class="linenos">2512</span></a> <span class="k">def</span> <span class="nf">jsonschema_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">JSONSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonschema_sql-2513"><a href="#Generator.jsonschema_sql-2513"><span class="linenos">2513</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;COLUMNS&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonschema_sql-2519"><a href="#Generator.jsonschema_sql-2519"><span class="linenos">2519</span></a> <span class="k">def</span> <span class="nf">jsonschema_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">JSONSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonschema_sql-2520"><a href="#Generator.jsonschema_sql-2520"><span class="linenos">2520</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;COLUMNS&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -13980,18 +14026,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.jsontable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsontable_sql-2515"><a href="#Generator.jsontable_sql-2515"><span class="linenos">2515</span></a> <span class="k">def</span> <span class="nf">jsontable_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">JSONTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsontable_sql-2516"><a href="#Generator.jsontable_sql-2516"><span class="linenos">2516</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsontable_sql-2517"><a href="#Generator.jsontable_sql-2517"><span class="linenos">2517</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsontable_sql-2518"><a href="#Generator.jsontable_sql-2518"><span class="linenos">2518</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsontable_sql-2519"><a href="#Generator.jsontable_sql-2519"><span class="linenos">2519</span></a> <span class="n">error_handling</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;error_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsontable_sql-2520"><a href="#Generator.jsontable_sql-2520"><span class="linenos">2520</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">error_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">error_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsontable_sql-2521"><a href="#Generator.jsontable_sql-2521"><span class="linenos">2521</span></a> <span class="n">empty_handling</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;empty_handling&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsontable_sql-2522"><a href="#Generator.jsontable_sql-2522"><span class="linenos">2522</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">empty_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsontable_sql-2523"><a href="#Generator.jsontable_sql-2523"><span class="linenos">2523</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator.jsontable_sql-2524"><a href="#Generator.jsontable_sql-2524"><span class="linenos">2524</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator.jsontable_sql-2525"><a href="#Generator.jsontable_sql-2525"><span class="linenos">2525</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">path</span><span class="si">}{</span><span class="n">error_handling</span><span class="si">}{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.jsontable_sql-2526"><a href="#Generator.jsontable_sql-2526"><span class="linenos">2526</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsontable_sql-2522"><a href="#Generator.jsontable_sql-2522"><span class="linenos">2522</span></a> <span class="k">def</span> <span class="nf">jsontable_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">JSONTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsontable_sql-2523"><a href="#Generator.jsontable_sql-2523"><span class="linenos">2523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsontable_sql-2524"><a href="#Generator.jsontable_sql-2524"><span class="linenos">2524</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsontable_sql-2525"><a href="#Generator.jsontable_sql-2525"><span class="linenos">2525</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsontable_sql-2526"><a href="#Generator.jsontable_sql-2526"><span class="linenos">2526</span></a> <span class="n">error_handling</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;error_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsontable_sql-2527"><a href="#Generator.jsontable_sql-2527"><span class="linenos">2527</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">error_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">error_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsontable_sql-2528"><a href="#Generator.jsontable_sql-2528"><span class="linenos">2528</span></a> <span class="n">empty_handling</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;empty_handling&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsontable_sql-2529"><a href="#Generator.jsontable_sql-2529"><span class="linenos">2529</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">empty_handling</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsontable_sql-2530"><a href="#Generator.jsontable_sql-2530"><span class="linenos">2530</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator.jsontable_sql-2531"><a href="#Generator.jsontable_sql-2531"><span class="linenos">2531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator.jsontable_sql-2532"><a href="#Generator.jsontable_sql-2532"><span class="linenos">2532</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">path</span><span class="si">}{</span><span class="n">error_handling</span><span class="si">}{</span><span class="n">empty_handling</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.jsontable_sql-2533"><a href="#Generator.jsontable_sql-2533"><span class="linenos">2533</span></a> <span class="p">)</span>
</span></pre></div>
@@ -14009,13 +14055,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.openjsoncolumndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjsoncolumndef_sql-2528"><a href="#Generator.openjsoncolumndef_sql-2528"><span class="linenos">2528</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_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">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.openjsoncolumndef_sql-2529"><a href="#Generator.openjsoncolumndef_sql-2529"><span class="linenos">2529</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjsoncolumndef_sql-2530"><a href="#Generator.openjsoncolumndef_sql-2530"><span class="linenos">2530</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjsoncolumndef_sql-2531"><a href="#Generator.openjsoncolumndef_sql-2531"><span class="linenos">2531</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjsoncolumndef_sql-2532"><a href="#Generator.openjsoncolumndef_sql-2532"><span class="linenos">2532</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjsoncolumndef_sql-2533"><a href="#Generator.openjsoncolumndef_sql-2533"><span class="linenos">2533</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjsoncolumndef_sql-2534"><a href="#Generator.openjsoncolumndef_sql-2534"><span class="linenos">2534</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjsoncolumndef_sql-2535"><a href="#Generator.openjsoncolumndef_sql-2535"><span class="linenos">2535</span></a> <span class="k">def</span> <span class="nf">openjsoncolumndef_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">OpenJSONColumnDef</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.openjsoncolumndef_sql-2536"><a href="#Generator.openjsoncolumndef_sql-2536"><span class="linenos">2536</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjsoncolumndef_sql-2537"><a href="#Generator.openjsoncolumndef_sql-2537"><span class="linenos">2537</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjsoncolumndef_sql-2538"><a href="#Generator.openjsoncolumndef_sql-2538"><span class="linenos">2538</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjsoncolumndef_sql-2539"><a href="#Generator.openjsoncolumndef_sql-2539"><span class="linenos">2539</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjsoncolumndef_sql-2540"><a href="#Generator.openjsoncolumndef_sql-2540"><span class="linenos">2540</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="s2">&quot; AS JSON&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;as_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjsoncolumndef_sql-2541"><a href="#Generator.openjsoncolumndef_sql-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">path</span><span class="si">}{</span><span class="n">as_json</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14033,17 +14079,17 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.openjson_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjson_sql-2536"><a href="#Generator.openjson_sql-2536"><span class="linenos">2536</span></a> <span class="k">def</span> <span class="nf">openjson_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">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.openjson_sql-2537"><a href="#Generator.openjson_sql-2537"><span class="linenos">2537</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjson_sql-2538"><a href="#Generator.openjson_sql-2538"><span class="linenos">2538</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
-</span><span id="Generator.openjson_sql-2539"><a href="#Generator.openjson_sql-2539"><span class="linenos">2539</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjson_sql-2540"><a href="#Generator.openjson_sql-2540"><span class="linenos">2540</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.openjson_sql-2541"><a href="#Generator.openjson_sql-2541"><span class="linenos">2541</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.openjson_sql-2542"><a href="#Generator.openjson_sql-2542"><span class="linenos">2542</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.openjson_sql-2543"><a href="#Generator.openjson_sql-2543"><span class="linenos">2543</span></a> <span class="k">if</span> <span class="n">expressions</span>
-</span><span id="Generator.openjson_sql-2544"><a href="#Generator.openjson_sql-2544"><span class="linenos">2544</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.openjson_sql-2545"><a href="#Generator.openjson_sql-2545"><span class="linenos">2545</span></a> <span class="p">)</span>
-</span><span id="Generator.openjson_sql-2546"><a href="#Generator.openjson_sql-2546"><span class="linenos">2546</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.openjson_sql-2543"><a href="#Generator.openjson_sql-2543"><span class="linenos">2543</span></a> <span class="k">def</span> <span class="nf">openjson_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">OpenJSON</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.openjson_sql-2544"><a href="#Generator.openjson_sql-2544"><span class="linenos">2544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjson_sql-2545"><a href="#Generator.openjson_sql-2545"><span class="linenos">2545</span></a> <span class="n">path</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;path&quot;</span><span class="p">)</span>
+</span><span id="Generator.openjson_sql-2546"><a href="#Generator.openjson_sql-2546"><span class="linenos">2546</span></a> <span class="n">path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;, </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">path</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjson_sql-2547"><a href="#Generator.openjson_sql-2547"><span class="linenos">2547</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.openjson_sql-2548"><a href="#Generator.openjson_sql-2548"><span class="linenos">2548</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.openjson_sql-2549"><a href="#Generator.openjson_sql-2549"><span class="linenos">2549</span></a> <span class="sa">f</span><span class="s2">&quot; WITH (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">expressions</span><span class="p">),</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.openjson_sql-2550"><a href="#Generator.openjson_sql-2550"><span class="linenos">2550</span></a> <span class="k">if</span> <span class="n">expressions</span>
+</span><span id="Generator.openjson_sql-2551"><a href="#Generator.openjson_sql-2551"><span class="linenos">2551</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.openjson_sql-2552"><a href="#Generator.openjson_sql-2552"><span class="linenos">2552</span></a> <span class="p">)</span>
+</span><span id="Generator.openjson_sql-2553"><a href="#Generator.openjson_sql-2553"><span class="linenos">2553</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;OPENJSON(</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">path</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">with_</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14061,22 +14107,22 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.in_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.in_sql-2548"><a href="#Generator.in_sql-2548"><span class="linenos">2548</span></a> <span class="k">def</span> <span class="nf">in_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">In</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2549"><a href="#Generator.in_sql-2549"><span class="linenos">2549</span></a> <span class="n">query</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;query&quot;</span><span class="p">)</span>
-</span><span id="Generator.in_sql-2550"><a href="#Generator.in_sql-2550"><span class="linenos">2550</span></a> <span class="n">unnest</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;unnest&quot;</span><span class="p">)</span>
-</span><span id="Generator.in_sql-2551"><a href="#Generator.in_sql-2551"><span class="linenos">2551</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
-</span><span id="Generator.in_sql-2552"><a href="#Generator.in_sql-2552"><span class="linenos">2552</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="s2">&quot; GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.in_sql-2553"><a href="#Generator.in_sql-2553"><span class="linenos">2553</span></a>
-</span><span id="Generator.in_sql-2554"><a href="#Generator.in_sql-2554"><span class="linenos">2554</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2555"><a href="#Generator.in_sql-2555"><span class="linenos">2555</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
-</span><span id="Generator.in_sql-2556"><a href="#Generator.in_sql-2556"><span class="linenos">2556</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2557"><a href="#Generator.in_sql-2557"><span class="linenos">2557</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_unnest_op</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
-</span><span id="Generator.in_sql-2558"><a href="#Generator.in_sql-2558"><span class="linenos">2558</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2559"><a href="#Generator.in_sql-2559"><span class="linenos">2559</span></a> <span class="n">in_sql</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">field</span><span class="p">)</span>
-</span><span id="Generator.in_sql-2560"><a href="#Generator.in_sql-2560"><span class="linenos">2560</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.in_sql-2561"><a href="#Generator.in_sql-2561"><span class="linenos">2561</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.in_sql-2562"><a href="#Generator.in_sql-2562"><span class="linenos">2562</span></a>
-</span><span id="Generator.in_sql-2563"><a href="#Generator.in_sql-2563"><span class="linenos">2563</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">is_global</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">in_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.in_sql-2555"><a href="#Generator.in_sql-2555"><span class="linenos">2555</span></a> <span class="k">def</span> <span class="nf">in_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">In</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2556"><a href="#Generator.in_sql-2556"><span class="linenos">2556</span></a> <span class="n">query</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;query&quot;</span><span class="p">)</span>
+</span><span id="Generator.in_sql-2557"><a href="#Generator.in_sql-2557"><span class="linenos">2557</span></a> <span class="n">unnest</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;unnest&quot;</span><span class="p">)</span>
+</span><span id="Generator.in_sql-2558"><a href="#Generator.in_sql-2558"><span class="linenos">2558</span></a> <span class="n">field</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;field&quot;</span><span class="p">)</span>
+</span><span id="Generator.in_sql-2559"><a href="#Generator.in_sql-2559"><span class="linenos">2559</span></a> <span class="n">is_global</span> <span class="o">=</span> <span class="s2">&quot; GLOBAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.in_sql-2560"><a href="#Generator.in_sql-2560"><span class="linenos">2560</span></a>
+</span><span id="Generator.in_sql-2561"><a href="#Generator.in_sql-2561"><span class="linenos">2561</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2562"><a href="#Generator.in_sql-2562"><span class="linenos">2562</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
+</span><span id="Generator.in_sql-2563"><a href="#Generator.in_sql-2563"><span class="linenos">2563</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2564"><a href="#Generator.in_sql-2564"><span class="linenos">2564</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_unnest_op</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
+</span><span id="Generator.in_sql-2565"><a href="#Generator.in_sql-2565"><span class="linenos">2565</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2566"><a href="#Generator.in_sql-2566"><span class="linenos">2566</span></a> <span class="n">in_sql</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">field</span><span class="p">)</span>
+</span><span id="Generator.in_sql-2567"><a href="#Generator.in_sql-2567"><span class="linenos">2567</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.in_sql-2568"><a href="#Generator.in_sql-2568"><span class="linenos">2568</span></a> <span class="n">in_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.in_sql-2569"><a href="#Generator.in_sql-2569"><span class="linenos">2569</span></a>
+</span><span id="Generator.in_sql-2570"><a href="#Generator.in_sql-2570"><span class="linenos">2570</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">is_global</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">in_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14094,8 +14140,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.in_unnest_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.in_unnest_op-2565"><a href="#Generator.in_unnest_op-2565"><span class="linenos">2565</span></a> <span class="k">def</span> <span class="nf">in_unnest_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unnest</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.in_unnest_op-2566"><a href="#Generator.in_unnest_op-2566"><span class="linenos">2566</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(SELECT </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">unnest</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.in_unnest_op-2572"><a href="#Generator.in_unnest_op-2572"><span class="linenos">2572</span></a> <span class="k">def</span> <span class="nf">in_unnest_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unnest</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.in_unnest_op-2573"><a href="#Generator.in_unnest_op-2573"><span class="linenos">2573</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(SELECT </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">unnest</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -14113,22 +14159,22 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.interval_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.interval_sql-2568"><a href="#Generator.interval_sql-2568"><span class="linenos">2568</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.interval_sql-2569"><a href="#Generator.interval_sql-2569"><span class="linenos">2569</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
-</span><span id="Generator.interval_sql-2570"><a href="#Generator.interval_sql-2570"><span class="linenos">2570</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span><span class="p">:</span>
-</span><span id="Generator.interval_sql-2571"><a href="#Generator.interval_sql-2571"><span class="linenos">2571</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
-</span><span id="Generator.interval_sql-2572"><a href="#Generator.interval_sql-2572"><span class="linenos">2572</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.interval_sql-2573"><a href="#Generator.interval_sql-2573"><span class="linenos">2573</span></a>
-</span><span id="Generator.interval_sql-2574"><a href="#Generator.interval_sql-2574"><span class="linenos">2574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_STRING_INTERVAL</span><span class="p">:</span>
-</span><span id="Generator.interval_sql-2575"><a href="#Generator.interval_sql-2575"><span class="linenos">2575</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.interval_sql-2576"><a href="#Generator.interval_sql-2576"><span class="linenos">2576</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.interval_sql-2577"><a href="#Generator.interval_sql-2577"><span class="linenos">2577</span></a>
-</span><span id="Generator.interval_sql-2578"><a href="#Generator.interval_sql-2578"><span class="linenos">2578</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.interval_sql-2579"><a href="#Generator.interval_sql-2579"><span class="linenos">2579</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Generator.interval_sql-2580"><a href="#Generator.interval_sql-2580"><span class="linenos">2580</span></a> <span class="n">unwrapped</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">)</span>
-</span><span id="Generator.interval_sql-2581"><a href="#Generator.interval_sql-2581"><span class="linenos">2581</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unwrapped</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator.interval_sql-2582"><a href="#Generator.interval_sql-2582"><span class="linenos">2582</span></a>
-</span><span id="Generator.interval_sql-2583"><a href="#Generator.interval_sql-2583"><span class="linenos">2583</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.interval_sql-2575"><a href="#Generator.interval_sql-2575"><span class="linenos">2575</span></a> <span class="k">def</span> <span class="nf">interval_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">Interval</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.interval_sql-2576"><a href="#Generator.interval_sql-2576"><span class="linenos">2576</span></a> <span class="n">unit</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;unit&quot;</span><span class="p">)</span>
+</span><span id="Generator.interval_sql-2577"><a href="#Generator.interval_sql-2577"><span class="linenos">2577</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span><span class="p">:</span>
+</span><span id="Generator.interval_sql-2578"><a href="#Generator.interval_sql-2578"><span class="linenos">2578</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
+</span><span id="Generator.interval_sql-2579"><a href="#Generator.interval_sql-2579"><span class="linenos">2579</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.interval_sql-2580"><a href="#Generator.interval_sql-2580"><span class="linenos">2580</span></a>
+</span><span id="Generator.interval_sql-2581"><a href="#Generator.interval_sql-2581"><span class="linenos">2581</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_STRING_INTERVAL</span><span class="p">:</span>
+</span><span id="Generator.interval_sql-2582"><a href="#Generator.interval_sql-2582"><span class="linenos">2582</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.interval_sql-2583"><a href="#Generator.interval_sql-2583"><span class="linenos">2583</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL &#39;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.interval_sql-2584"><a href="#Generator.interval_sql-2584"><span class="linenos">2584</span></a>
+</span><span id="Generator.interval_sql-2585"><a href="#Generator.interval_sql-2585"><span class="linenos">2585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.interval_sql-2586"><a href="#Generator.interval_sql-2586"><span class="linenos">2586</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Generator.interval_sql-2587"><a href="#Generator.interval_sql-2587"><span class="linenos">2587</span></a> <span class="n">unwrapped</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNWRAPPED_INTERVAL_VALUES</span><span class="p">)</span>
+</span><span id="Generator.interval_sql-2588"><a href="#Generator.interval_sql-2588"><span class="linenos">2588</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">unwrapped</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator.interval_sql-2589"><a href="#Generator.interval_sql-2589"><span class="linenos">2589</span></a>
+</span><span id="Generator.interval_sql-2590"><a href="#Generator.interval_sql-2590"><span class="linenos">2590</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERVAL</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14146,8 +14192,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.return_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.return_sql-2585"><a href="#Generator.return_sql-2585"><span class="linenos">2585</span></a> <span class="k">def</span> <span class="nf">return_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">Return</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.return_sql-2586"><a href="#Generator.return_sql-2586"><span class="linenos">2586</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURN </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="Generator.return_sql-2592"><a href="#Generator.return_sql-2592"><span class="linenos">2592</span></a> <span class="k">def</span> <span class="nf">return_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">Return</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.return_sql-2593"><a href="#Generator.return_sql-2593"><span class="linenos">2593</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURN </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>
@@ -14165,13 +14211,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.reference_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.reference_sql-2588"><a href="#Generator.reference_sql-2588"><span class="linenos">2588</span></a> <span class="k">def</span> <span class="nf">reference_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">Reference</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.reference_sql-2589"><a href="#Generator.reference_sql-2589"><span class="linenos">2589</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.reference_sql-2590"><a href="#Generator.reference_sql-2590"><span class="linenos">2590</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.reference_sql-2591"><a href="#Generator.reference_sql-2591"><span class="linenos">2591</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.reference_sql-2592"><a href="#Generator.reference_sql-2592"><span class="linenos">2592</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.reference_sql-2593"><a href="#Generator.reference_sql-2593"><span class="linenos">2593</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.reference_sql-2594"><a href="#Generator.reference_sql-2594"><span class="linenos">2594</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFERENCES </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.reference_sql-2595"><a href="#Generator.reference_sql-2595"><span class="linenos">2595</span></a> <span class="k">def</span> <span class="nf">reference_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">Reference</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.reference_sql-2596"><a href="#Generator.reference_sql-2596"><span class="linenos">2596</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.reference_sql-2597"><a href="#Generator.reference_sql-2597"><span class="linenos">2597</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.reference_sql-2598"><a href="#Generator.reference_sql-2598"><span class="linenos">2598</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.reference_sql-2599"><a href="#Generator.reference_sql-2599"><span class="linenos">2599</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.reference_sql-2600"><a href="#Generator.reference_sql-2600"><span class="linenos">2600</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.reference_sql-2601"><a href="#Generator.reference_sql-2601"><span class="linenos">2601</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFERENCES </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14189,8 +14235,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.anonymous_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anonymous_sql-2596"><a href="#Generator.anonymous_sql-2596"><span class="linenos">2596</span></a> <span class="k">def</span> <span class="nf">anonymous_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">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.anonymous_sql-2597"><a href="#Generator.anonymous_sql-2597"><span class="linenos">2597</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anonymous_sql-2603"><a href="#Generator.anonymous_sql-2603"><span class="linenos">2603</span></a> <span class="k">def</span> <span class="nf">anonymous_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">Anonymous</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.anonymous_sql-2604"><a href="#Generator.anonymous_sql-2604"><span class="linenos">2604</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">expression</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -14208,14 +14254,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.paren_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.paren_sql-2599"><a href="#Generator.paren_sql-2599"><span class="linenos">2599</span></a> <span class="k">def</span> <span class="nf">paren_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">Paren</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.paren_sql-2600"><a href="#Generator.paren_sql-2600"><span class="linenos">2600</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="Generator.paren_sql-2601"><a href="#Generator.paren_sql-2601"><span class="linenos">2601</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.paren_sql-2602"><a href="#Generator.paren_sql-2602"><span class="linenos">2602</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.paren_sql-2603"><a href="#Generator.paren_sql-2603"><span class="linenos">2603</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
-</span><span id="Generator.paren_sql-2604"><a href="#Generator.paren_sql-2604"><span class="linenos">2604</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.paren_sql-2605"><a href="#Generator.paren_sql-2605"><span class="linenos">2605</span></a>
-</span><span id="Generator.paren_sql-2606"><a href="#Generator.paren_sql-2606"><span class="linenos">2606</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.paren_sql-2606"><a href="#Generator.paren_sql-2606"><span class="linenos">2606</span></a> <span class="k">def</span> <span class="nf">paren_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">Paren</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.paren_sql-2607"><a href="#Generator.paren_sql-2607"><span class="linenos">2607</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="Generator.paren_sql-2608"><a href="#Generator.paren_sql-2608"><span class="linenos">2608</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.paren_sql-2609"><a href="#Generator.paren_sql-2609"><span class="linenos">2609</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.paren_sql-2610"><a href="#Generator.paren_sql-2610"><span class="linenos">2610</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)),</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+</span><span id="Generator.paren_sql-2611"><a href="#Generator.paren_sql-2611"><span class="linenos">2611</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.paren_sql-2612"><a href="#Generator.paren_sql-2612"><span class="linenos">2612</span></a>
+</span><span id="Generator.paren_sql-2613"><a href="#Generator.paren_sql-2613"><span class="linenos">2613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span></pre></div>
@@ -14233,11 +14279,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.neg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neg_sql-2608"><a href="#Generator.neg_sql-2608"><span class="linenos">2608</span></a> <span class="k">def</span> <span class="nf">neg_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">Neg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.neg_sql-2609"><a href="#Generator.neg_sql-2609"><span class="linenos">2609</span></a> <span class="c1"># This makes sure we don&#39;t convert &quot;- - 5&quot; to &quot;--5&quot;, which is a comment</span>
-</span><span id="Generator.neg_sql-2610"><a href="#Generator.neg_sql-2610"><span class="linenos">2610</span></a> <span class="n">this_sql</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="Generator.neg_sql-2611"><a href="#Generator.neg_sql-2611"><span class="linenos">2611</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">this_sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.neg_sql-2612"><a href="#Generator.neg_sql-2612"><span class="linenos">2612</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;-</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neg_sql-2615"><a href="#Generator.neg_sql-2615"><span class="linenos">2615</span></a> <span class="k">def</span> <span class="nf">neg_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">Neg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.neg_sql-2616"><a href="#Generator.neg_sql-2616"><span class="linenos">2616</span></a> <span class="c1"># This makes sure we don&#39;t convert &quot;- - 5&quot; to &quot;--5&quot;, which is a comment</span>
+</span><span id="Generator.neg_sql-2617"><a href="#Generator.neg_sql-2617"><span class="linenos">2617</span></a> <span class="n">this_sql</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="Generator.neg_sql-2618"><a href="#Generator.neg_sql-2618"><span class="linenos">2618</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">this_sql</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.neg_sql-2619"><a href="#Generator.neg_sql-2619"><span class="linenos">2619</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;-</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">this_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14255,8 +14301,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.not_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.not_sql-2614"><a href="#Generator.not_sql-2614"><span class="linenos">2614</span></a> <span class="k">def</span> <span class="nf">not_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">Not</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.not_sql-2615"><a href="#Generator.not_sql-2615"><span class="linenos">2615</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NOT </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="Generator.not_sql-2621"><a href="#Generator.not_sql-2621"><span class="linenos">2621</span></a> <span class="k">def</span> <span class="nf">not_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">Not</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.not_sql-2622"><a href="#Generator.not_sql-2622"><span class="linenos">2622</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;NOT </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>
@@ -14274,10 +14320,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.alias_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.alias_sql-2617"><a href="#Generator.alias_sql-2617"><span class="linenos">2617</span></a> <span class="k">def</span> <span class="nf">alias_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">Alias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.alias_sql-2618"><a href="#Generator.alias_sql-2618"><span class="linenos">2618</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="Generator.alias_sql-2619"><a href="#Generator.alias_sql-2619"><span class="linenos">2619</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.alias_sql-2620"><a href="#Generator.alias_sql-2620"><span class="linenos">2620</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.alias_sql-2624"><a href="#Generator.alias_sql-2624"><span class="linenos">2624</span></a> <span class="k">def</span> <span class="nf">alias_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">Alias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.alias_sql-2625"><a href="#Generator.alias_sql-2625"><span class="linenos">2625</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="Generator.alias_sql-2626"><a href="#Generator.alias_sql-2626"><span class="linenos">2626</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.alias_sql-2627"><a href="#Generator.alias_sql-2627"><span class="linenos">2627</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="n">alias</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14295,16 +14341,16 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.pivotalias_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pivotalias_sql-2622"><a href="#Generator.pivotalias_sql-2622"><span class="linenos">2622</span></a> <span class="k">def</span> <span class="nf">pivotalias_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">PivotAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.pivotalias_sql-2623"><a href="#Generator.pivotalias_sql-2623"><span class="linenos">2623</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
-</span><span id="Generator.pivotalias_sql-2624"><a href="#Generator.pivotalias_sql-2624"><span class="linenos">2624</span></a> <span class="n">identifier_alias</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
-</span><span id="Generator.pivotalias_sql-2625"><a href="#Generator.pivotalias_sql-2625"><span class="linenos">2625</span></a>
-</span><span id="Generator.pivotalias_sql-2626"><a href="#Generator.pivotalias_sql-2626"><span class="linenos">2626</span></a> <span class="k">if</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="Generator.pivotalias_sql-2627"><a href="#Generator.pivotalias_sql-2627"><span class="linenos">2627</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
-</span><span id="Generator.pivotalias_sql-2628"><a href="#Generator.pivotalias_sql-2628"><span class="linenos">2628</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="Generator.pivotalias_sql-2629"><a href="#Generator.pivotalias_sql-2629"><span class="linenos">2629</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
-</span><span id="Generator.pivotalias_sql-2630"><a href="#Generator.pivotalias_sql-2630"><span class="linenos">2630</span></a>
-</span><span id="Generator.pivotalias_sql-2631"><a href="#Generator.pivotalias_sql-2631"><span class="linenos">2631</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pivotalias_sql-2629"><a href="#Generator.pivotalias_sql-2629"><span class="linenos">2629</span></a> <span class="k">def</span> <span class="nf">pivotalias_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">PivotAlias</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.pivotalias_sql-2630"><a href="#Generator.pivotalias_sql-2630"><span class="linenos">2630</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">]</span>
+</span><span id="Generator.pivotalias_sql-2631"><a href="#Generator.pivotalias_sql-2631"><span class="linenos">2631</span></a> <span class="n">identifier_alias</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
+</span><span id="Generator.pivotalias_sql-2632"><a href="#Generator.pivotalias_sql-2632"><span class="linenos">2632</span></a>
+</span><span id="Generator.pivotalias_sql-2633"><a href="#Generator.pivotalias_sql-2633"><span class="linenos">2633</span></a> <span class="k">if</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="Generator.pivotalias_sql-2634"><a href="#Generator.pivotalias_sql-2634"><span class="linenos">2634</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
+</span><span id="Generator.pivotalias_sql-2635"><a href="#Generator.pivotalias_sql-2635"><span class="linenos">2635</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">identifier_alias</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNPIVOT_ALIASES_ARE_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="Generator.pivotalias_sql-2636"><a href="#Generator.pivotalias_sql-2636"><span class="linenos">2636</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">output_name</span><span class="p">))</span>
+</span><span id="Generator.pivotalias_sql-2637"><a href="#Generator.pivotalias_sql-2637"><span class="linenos">2637</span></a>
+</span><span id="Generator.pivotalias_sql-2638"><a href="#Generator.pivotalias_sql-2638"><span class="linenos">2638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -14322,8 +14368,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.aliases_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.aliases_sql-2633"><a href="#Generator.aliases_sql-2633"><span class="linenos">2633</span></a> <span class="k">def</span> <span class="nf">aliases_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">Aliases</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.aliases_sql-2634"><a href="#Generator.aliases_sql-2634"><span class="linenos">2634</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.aliases_sql-2640"><a href="#Generator.aliases_sql-2640"><span class="linenos">2640</span></a> <span class="k">def</span> <span class="nf">aliases_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">Aliases</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.aliases_sql-2641"><a href="#Generator.aliases_sql-2641"><span class="linenos">2641</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -14341,10 +14387,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.atindex_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.atindex_sql-2636"><a href="#Generator.atindex_sql-2636"><span class="linenos">2636</span></a> <span class="k">def</span> <span class="nf">atindex_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.atindex_sql-2637"><a href="#Generator.atindex_sql-2637"><span class="linenos">2637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.atindex_sql-2638"><a href="#Generator.atindex_sql-2638"><span class="linenos">2638</span></a> <span class="n">index</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="Generator.atindex_sql-2639"><a href="#Generator.atindex_sql-2639"><span class="linenos">2639</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.atindex_sql-2643"><a href="#Generator.atindex_sql-2643"><span class="linenos">2643</span></a> <span class="k">def</span> <span class="nf">atindex_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.atindex_sql-2644"><a href="#Generator.atindex_sql-2644"><span class="linenos">2644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.atindex_sql-2645"><a href="#Generator.atindex_sql-2645"><span class="linenos">2645</span></a> <span class="n">index</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="Generator.atindex_sql-2646"><a href="#Generator.atindex_sql-2646"><span class="linenos">2646</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT </span><span class="si">{</span><span class="n">index</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14362,10 +14408,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.attimezone_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.attimezone_sql-2641"><a href="#Generator.attimezone_sql-2641"><span class="linenos">2641</span></a> <span class="k">def</span> <span class="nf">attimezone_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.attimezone_sql-2642"><a href="#Generator.attimezone_sql-2642"><span class="linenos">2642</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.attimezone_sql-2643"><a href="#Generator.attimezone_sql-2643"><span class="linenos">2643</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
-</span><span id="Generator.attimezone_sql-2644"><a href="#Generator.attimezone_sql-2644"><span class="linenos">2644</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.attimezone_sql-2648"><a href="#Generator.attimezone_sql-2648"><span class="linenos">2648</span></a> <span class="k">def</span> <span class="nf">attimezone_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">AtTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.attimezone_sql-2649"><a href="#Generator.attimezone_sql-2649"><span class="linenos">2649</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.attimezone_sql-2650"><a href="#Generator.attimezone_sql-2650"><span class="linenos">2650</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
+</span><span id="Generator.attimezone_sql-2651"><a href="#Generator.attimezone_sql-2651"><span class="linenos">2651</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14383,10 +14429,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.fromtimezone_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fromtimezone_sql-2646"><a href="#Generator.fromtimezone_sql-2646"><span class="linenos">2646</span></a> <span class="k">def</span> <span class="nf">fromtimezone_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">FromTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.fromtimezone_sql-2647"><a href="#Generator.fromtimezone_sql-2647"><span class="linenos">2647</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.fromtimezone_sql-2648"><a href="#Generator.fromtimezone_sql-2648"><span class="linenos">2648</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
-</span><span id="Generator.fromtimezone_sql-2649"><a href="#Generator.fromtimezone_sql-2649"><span class="linenos">2649</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2"> AT TIME ZONE &#39;UTC&#39;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.fromtimezone_sql-2653"><a href="#Generator.fromtimezone_sql-2653"><span class="linenos">2653</span></a> <span class="k">def</span> <span class="nf">fromtimezone_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">FromTimeZone</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.fromtimezone_sql-2654"><a href="#Generator.fromtimezone_sql-2654"><span class="linenos">2654</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.fromtimezone_sql-2655"><a href="#Generator.fromtimezone_sql-2655"><span class="linenos">2655</span></a> <span class="n">zone</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;zone&quot;</span><span class="p">)</span>
+</span><span id="Generator.fromtimezone_sql-2656"><a href="#Generator.fromtimezone_sql-2656"><span class="linenos">2656</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AT TIME ZONE </span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2"> AT TIME ZONE &#39;UTC&#39;&quot;</span>
</span></pre></div>
@@ -14404,8 +14450,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.add_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.add_sql-2651"><a href="#Generator.add_sql-2651"><span class="linenos">2651</span></a> <span class="k">def</span> <span class="nf">add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.add_sql-2652"><a href="#Generator.add_sql-2652"><span class="linenos">2652</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.add_sql-2658"><a href="#Generator.add_sql-2658"><span class="linenos">2658</span></a> <span class="k">def</span> <span class="nf">add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.add_sql-2659"><a href="#Generator.add_sql-2659"><span class="linenos">2659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;+&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14423,8 +14469,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.and_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.and_sql-2654"><a href="#Generator.and_sql-2654"><span class="linenos">2654</span></a> <span class="k">def</span> <span class="nf">and_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">And</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.and_sql-2655"><a href="#Generator.and_sql-2655"><span class="linenos">2655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.and_sql-2661"><a href="#Generator.and_sql-2661"><span class="linenos">2661</span></a> <span class="k">def</span> <span class="nf">and_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">And</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.and_sql-2662"><a href="#Generator.and_sql-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14442,8 +14488,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.xor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.xor_sql-2657"><a href="#Generator.xor_sql-2657"><span class="linenos">2657</span></a> <span class="k">def</span> <span class="nf">xor_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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.xor_sql-2658"><a href="#Generator.xor_sql-2658"><span class="linenos">2658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.xor_sql-2664"><a href="#Generator.xor_sql-2664"><span class="linenos">2664</span></a> <span class="k">def</span> <span class="nf">xor_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">Xor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.xor_sql-2665"><a href="#Generator.xor_sql-2665"><span class="linenos">2665</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;XOR&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14461,17 +14507,17 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.connector_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.connector_sql-2660"><a href="#Generator.connector_sql-2660"><span class="linenos">2660</span></a> <span class="k">def</span> <span class="nf">connector_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">Connector</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.connector_sql-2661"><a href="#Generator.connector_sql-2661"><span class="linenos">2661</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.connector_sql-2662"><a href="#Generator.connector_sql-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span>
-</span><span id="Generator.connector_sql-2663"><a href="#Generator.connector_sql-2663"><span class="linenos">2663</span></a>
-</span><span id="Generator.connector_sql-2664"><a href="#Generator.connector_sql-2664"><span class="linenos">2664</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="Generator.connector_sql-2665"><a href="#Generator.connector_sql-2665"><span class="linenos">2665</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="Generator.connector_sql-2666"><a href="#Generator.connector_sql-2666"><span class="linenos">2666</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">unnest</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Generator.connector_sql-2667"><a href="#Generator.connector_sql-2667"><span class="linenos">2667</span></a> <span class="p">)</span>
-</span><span id="Generator.connector_sql-2668"><a href="#Generator.connector_sql-2668"><span class="linenos">2668</span></a>
-</span><span id="Generator.connector_sql-2669"><a href="#Generator.connector_sql-2669"><span class="linenos">2669</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator.connector_sql-2670"><a href="#Generator.connector_sql-2670"><span class="linenos">2670</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.connector_sql-2667"><a href="#Generator.connector_sql-2667"><span class="linenos">2667</span></a> <span class="k">def</span> <span class="nf">connector_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">Connector</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.connector_sql-2668"><a href="#Generator.connector_sql-2668"><span class="linenos">2668</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.connector_sql-2669"><a href="#Generator.connector_sql-2669"><span class="linenos">2669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span>
+</span><span id="Generator.connector_sql-2670"><a href="#Generator.connector_sql-2670"><span class="linenos">2670</span></a>
+</span><span id="Generator.connector_sql-2671"><a href="#Generator.connector_sql-2671"><span class="linenos">2671</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="Generator.connector_sql-2672"><a href="#Generator.connector_sql-2672"><span class="linenos">2672</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">comments</span> <span class="ow">or</span> <span class="p">[])</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="Generator.connector_sql-2673"><a href="#Generator.connector_sql-2673"><span class="linenos">2673</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="n">unnest</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Generator.connector_sql-2674"><a href="#Generator.connector_sql-2674"><span class="linenos">2674</span></a> <span class="p">)</span>
+</span><span id="Generator.connector_sql-2675"><a href="#Generator.connector_sql-2675"><span class="linenos">2675</span></a>
+</span><span id="Generator.connector_sql-2676"><a href="#Generator.connector_sql-2676"><span class="linenos">2676</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator.connector_sql-2677"><a href="#Generator.connector_sql-2677"><span class="linenos">2677</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sqls</span><span class="p">)</span>
</span></pre></div>
@@ -14489,8 +14535,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bitwiseand_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseand_sql-2672"><a href="#Generator.bitwiseand_sql-2672"><span class="linenos">2672</span></a> <span class="k">def</span> <span class="nf">bitwiseand_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">BitwiseAnd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitwiseand_sql-2673"><a href="#Generator.bitwiseand_sql-2673"><span class="linenos">2673</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&amp;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseand_sql-2679"><a href="#Generator.bitwiseand_sql-2679"><span class="linenos">2679</span></a> <span class="k">def</span> <span class="nf">bitwiseand_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">BitwiseAnd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitwiseand_sql-2680"><a href="#Generator.bitwiseand_sql-2680"><span class="linenos">2680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&amp;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14508,8 +14554,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bitwiseleftshift_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseleftshift_sql-2675"><a href="#Generator.bitwiseleftshift_sql-2675"><span class="linenos">2675</span></a> <span class="k">def</span> <span class="nf">bitwiseleftshift_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">BitwiseLeftShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitwiseleftshift_sql-2676"><a href="#Generator.bitwiseleftshift_sql-2676"><span class="linenos">2676</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&lt;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseleftshift_sql-2682"><a href="#Generator.bitwiseleftshift_sql-2682"><span class="linenos">2682</span></a> <span class="k">def</span> <span class="nf">bitwiseleftshift_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">BitwiseLeftShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitwiseleftshift_sql-2683"><a href="#Generator.bitwiseleftshift_sql-2683"><span class="linenos">2683</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&lt;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14527,8 +14573,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bitwisenot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwisenot_sql-2678"><a href="#Generator.bitwisenot_sql-2678"><span class="linenos">2678</span></a> <span class="k">def</span> <span class="nf">bitwisenot_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">BitwiseNot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitwisenot_sql-2679"><a href="#Generator.bitwisenot_sql-2679"><span class="linenos">2679</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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="Generator.bitwisenot_sql-2685"><a href="#Generator.bitwisenot_sql-2685"><span class="linenos">2685</span></a> <span class="k">def</span> <span class="nf">bitwisenot_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">BitwiseNot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitwisenot_sql-2686"><a href="#Generator.bitwisenot_sql-2686"><span class="linenos">2686</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;~</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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>
@@ -14546,8 +14592,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bitwiseor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseor_sql-2681"><a href="#Generator.bitwiseor_sql-2681"><span class="linenos">2681</span></a> <span class="k">def</span> <span class="nf">bitwiseor_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">BitwiseOr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitwiseor_sql-2682"><a href="#Generator.bitwiseor_sql-2682"><span class="linenos">2682</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.bitwiseor_sql-2688"><a href="#Generator.bitwiseor_sql-2688"><span class="linenos">2688</span></a> <span class="k">def</span> <span class="nf">bitwiseor_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">BitwiseOr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitwiseor_sql-2689"><a href="#Generator.bitwiseor_sql-2689"><span class="linenos">2689</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;|&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14565,8 +14611,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bitwiserightshift_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiserightshift_sql-2684"><a href="#Generator.bitwiserightshift_sql-2684"><span class="linenos">2684</span></a> <span class="k">def</span> <span class="nf">bitwiserightshift_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">BitwiseRightShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitwiserightshift_sql-2685"><a href="#Generator.bitwiserightshift_sql-2685"><span class="linenos">2685</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiserightshift_sql-2691"><a href="#Generator.bitwiserightshift_sql-2691"><span class="linenos">2691</span></a> <span class="k">def</span> <span class="nf">bitwiserightshift_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">BitwiseRightShift</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitwiserightshift_sql-2692"><a href="#Generator.bitwiserightshift_sql-2692"><span class="linenos">2692</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&gt;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14584,8 +14630,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.bitwisexor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwisexor_sql-2687"><a href="#Generator.bitwisexor_sql-2687"><span class="linenos">2687</span></a> <span class="k">def</span> <span class="nf">bitwisexor_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">BitwiseXor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.bitwisexor_sql-2688"><a href="#Generator.bitwisexor_sql-2688"><span class="linenos">2688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.bitwisexor_sql-2694"><a href="#Generator.bitwisexor_sql-2694"><span class="linenos">2694</span></a> <span class="k">def</span> <span class="nf">bitwisexor_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">BitwiseXor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.bitwisexor_sql-2695"><a href="#Generator.bitwisexor_sql-2695"><span class="linenos">2695</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;^&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14603,12 +14649,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cast_sql-2690"><a href="#Generator.cast_sql-2690"><span class="linenos">2690</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cast_sql-2691"><a href="#Generator.cast_sql-2691"><span class="linenos">2691</span></a> <span class="n">format_sql</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;format&quot;</span><span class="p">)</span>
-</span><span id="Generator.cast_sql-2692"><a href="#Generator.cast_sql-2692"><span class="linenos">2692</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cast_sql-2693"><a href="#Generator.cast_sql-2693"><span class="linenos">2693</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
-</span><span id="Generator.cast_sql-2694"><a href="#Generator.cast_sql-2694"><span class="linenos">2694</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.cast_sql-2695"><a href="#Generator.cast_sql-2695"><span class="linenos">2695</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS</span><span class="si">{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cast_sql-2697"><a href="#Generator.cast_sql-2697"><span class="linenos">2697</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cast_sql-2698"><a href="#Generator.cast_sql-2698"><span class="linenos">2698</span></a> <span class="n">format_sql</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;format&quot;</span><span class="p">)</span>
+</span><span id="Generator.cast_sql-2699"><a href="#Generator.cast_sql-2699"><span class="linenos">2699</span></a> <span class="n">format_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FORMAT </span><span class="si">{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">format_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cast_sql-2700"><a href="#Generator.cast_sql-2700"><span class="linenos">2700</span></a> <span class="n">to_sql</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;to&quot;</span><span class="p">)</span>
+</span><span id="Generator.cast_sql-2701"><a href="#Generator.cast_sql-2701"><span class="linenos">2701</span></a> <span class="n">to_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">to_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.cast_sql-2702"><a href="#Generator.cast_sql-2702"><span class="linenos">2702</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">safe_prefix</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS</span><span class="si">{</span><span class="n">to_sql</span><span class="si">}{</span><span class="n">format_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -14626,9 +14672,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.currentdate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.currentdate_sql-2697"><a href="#Generator.currentdate_sql-2697"><span class="linenos">2697</span></a> <span class="k">def</span> <span class="nf">currentdate_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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.currentdate_sql-2698"><a href="#Generator.currentdate_sql-2698"><span class="linenos">2698</span></a> <span class="n">zone</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="Generator.currentdate_sql-2699"><a href="#Generator.currentdate_sql-2699"><span class="linenos">2699</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE(</span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.currentdate_sql-2704"><a href="#Generator.currentdate_sql-2704"><span class="linenos">2704</span></a> <span class="k">def</span> <span class="nf">currentdate_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">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.currentdate_sql-2705"><a href="#Generator.currentdate_sql-2705"><span class="linenos">2705</span></a> <span class="n">zone</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="Generator.currentdate_sql-2706"><a href="#Generator.currentdate_sql-2706"><span class="linenos">2706</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE(</span><span class="si">{</span><span class="n">zone</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">zone</span> <span class="k">else</span> <span class="s2">&quot;CURRENT_DATE&quot;</span>
</span></pre></div>
@@ -14646,8 +14692,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.currenttimestamp_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.currenttimestamp_sql-2701"><a href="#Generator.currenttimestamp_sql-2701"><span class="linenos">2701</span></a> <span class="k">def</span> <span class="nf">currenttimestamp_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">CurrentTimestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.currenttimestamp_sql-2702"><a href="#Generator.currenttimestamp_sql-2702"><span class="linenos">2702</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;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.currenttimestamp_sql-2708"><a href="#Generator.currenttimestamp_sql-2708"><span class="linenos">2708</span></a> <span class="k">def</span> <span class="nf">currenttimestamp_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">CurrentTimestamp</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.currenttimestamp_sql-2709"><a href="#Generator.currenttimestamp_sql-2709"><span class="linenos">2709</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;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
@@ -14665,10 +14711,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.collate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.collate_sql-2704"><a href="#Generator.collate_sql-2704"><span class="linenos">2704</span></a> <span class="k">def</span> <span class="nf">collate_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">Collate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.collate_sql-2705"><a href="#Generator.collate_sql-2705"><span class="linenos">2705</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLLATE_IS_FUNC</span><span class="p">:</span>
-</span><span id="Generator.collate_sql-2706"><a href="#Generator.collate_sql-2706"><span class="linenos">2706</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.collate_sql-2707"><a href="#Generator.collate_sql-2707"><span class="linenos">2707</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;COLLATE&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.collate_sql-2711"><a href="#Generator.collate_sql-2711"><span class="linenos">2711</span></a> <span class="k">def</span> <span class="nf">collate_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">Collate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.collate_sql-2712"><a href="#Generator.collate_sql-2712"><span class="linenos">2712</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLLATE_IS_FUNC</span><span class="p">:</span>
+</span><span id="Generator.collate_sql-2713"><a href="#Generator.collate_sql-2713"><span class="linenos">2713</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.collate_sql-2714"><a href="#Generator.collate_sql-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;COLLATE&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -14686,8 +14732,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.command_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.command_sql-2709"><a href="#Generator.command_sql-2709"><span class="linenos">2709</span></a> <span class="k">def</span> <span class="nf">command_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">Command</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.command_sql-2710"><a href="#Generator.command_sql-2710"><span class="linenos">2710</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.command_sql-2716"><a href="#Generator.command_sql-2716"><span class="linenos">2716</span></a> <span class="k">def</span> <span class="nf">command_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">Command</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.command_sql-2717"><a href="#Generator.command_sql-2717"><span class="linenos">2717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14705,12 +14751,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.comment_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.comment_sql-2712"><a href="#Generator.comment_sql-2712"><span class="linenos">2712</span></a> <span class="k">def</span> <span class="nf">comment_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">Comment</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.comment_sql-2713"><a href="#Generator.comment_sql-2713"><span class="linenos">2713</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.comment_sql-2714"><a href="#Generator.comment_sql-2714"><span class="linenos">2714</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="Generator.comment_sql-2715"><a href="#Generator.comment_sql-2715"><span class="linenos">2715</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator.comment_sql-2716"><a href="#Generator.comment_sql-2716"><span class="linenos">2716</span></a> <span class="n">expression_sql</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="Generator.comment_sql-2717"><a href="#Generator.comment_sql-2717"><span class="linenos">2717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.comment_sql-2719"><a href="#Generator.comment_sql-2719"><span class="linenos">2719</span></a> <span class="k">def</span> <span class="nf">comment_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">Comment</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.comment_sql-2720"><a href="#Generator.comment_sql-2720"><span class="linenos">2720</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.comment_sql-2721"><a href="#Generator.comment_sql-2721"><span class="linenos">2721</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="Generator.comment_sql-2722"><a href="#Generator.comment_sql-2722"><span class="linenos">2722</span></a> <span class="n">exists_sql</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator.comment_sql-2723"><a href="#Generator.comment_sql-2723"><span class="linenos">2723</span></a> <span class="n">expression_sql</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="Generator.comment_sql-2724"><a href="#Generator.comment_sql-2724"><span class="linenos">2724</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT</span><span class="si">{</span><span class="n">exists_sql</span><span class="si">}</span><span class="s2">ON </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> IS </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14728,16 +14774,16 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.mergetreettlaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettlaction_sql-2719"><a href="#Generator.mergetreettlaction_sql-2719"><span class="linenos">2719</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_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">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mergetreettlaction_sql-2720"><a href="#Generator.mergetreettlaction_sql-2720"><span class="linenos">2720</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettlaction_sql-2721"><a href="#Generator.mergetreettlaction_sql-2721"><span class="linenos">2721</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2722"><a href="#Generator.mergetreettlaction_sql-2722"><span class="linenos">2722</span></a> <span class="n">recompress</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;recompress&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettlaction_sql-2723"><a href="#Generator.mergetreettlaction_sql-2723"><span class="linenos">2723</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2724"><a href="#Generator.mergetreettlaction_sql-2724"><span class="linenos">2724</span></a> <span class="n">to_disk</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;to_disk&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettlaction_sql-2725"><a href="#Generator.mergetreettlaction_sql-2725"><span class="linenos">2725</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2726"><a href="#Generator.mergetreettlaction_sql-2726"><span class="linenos">2726</span></a> <span class="n">to_volume</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;to_volume&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettlaction_sql-2727"><a href="#Generator.mergetreettlaction_sql-2727"><span class="linenos">2727</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettlaction_sql-2728"><a href="#Generator.mergetreettlaction_sql-2728"><span class="linenos">2728</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettlaction_sql-2726"><a href="#Generator.mergetreettlaction_sql-2726"><span class="linenos">2726</span></a> <span class="k">def</span> <span class="nf">mergetreettlaction_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">MergeTreeTTLAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mergetreettlaction_sql-2727"><a href="#Generator.mergetreettlaction_sql-2727"><span class="linenos">2727</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2728"><a href="#Generator.mergetreettlaction_sql-2728"><span class="linenos">2728</span></a> <span class="n">delete</span> <span class="o">=</span> <span class="s2">&quot; DELETE&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;delete&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2729"><a href="#Generator.mergetreettlaction_sql-2729"><span class="linenos">2729</span></a> <span class="n">recompress</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;recompress&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2730"><a href="#Generator.mergetreettlaction_sql-2730"><span class="linenos">2730</span></a> <span class="n">recompress</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECOMPRESS </span><span class="si">{</span><span class="n">recompress</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">recompress</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2731"><a href="#Generator.mergetreettlaction_sql-2731"><span class="linenos">2731</span></a> <span class="n">to_disk</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;to_disk&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2732"><a href="#Generator.mergetreettlaction_sql-2732"><span class="linenos">2732</span></a> <span class="n">to_disk</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO DISK </span><span class="si">{</span><span class="n">to_disk</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_disk</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2733"><a href="#Generator.mergetreettlaction_sql-2733"><span class="linenos">2733</span></a> <span class="n">to_volume</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;to_volume&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettlaction_sql-2734"><a href="#Generator.mergetreettlaction_sql-2734"><span class="linenos">2734</span></a> <span class="n">to_volume</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO VOLUME </span><span class="si">{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">to_volume</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettlaction_sql-2735"><a href="#Generator.mergetreettlaction_sql-2735"><span class="linenos">2735</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">delete</span><span class="si">}{</span><span class="n">recompress</span><span class="si">}{</span><span class="n">to_disk</span><span class="si">}{</span><span class="n">to_volume</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14755,16 +14801,16 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.mergetreettl_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettl_sql-2730"><a href="#Generator.mergetreettl_sql-2730"><span class="linenos">2730</span></a> <span class="k">def</span> <span class="nf">mergetreettl_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">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mergetreettl_sql-2731"><a href="#Generator.mergetreettl_sql-2731"><span class="linenos">2731</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettl_sql-2732"><a href="#Generator.mergetreettl_sql-2732"><span class="linenos">2732</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettl_sql-2733"><a href="#Generator.mergetreettl_sql-2733"><span class="linenos">2733</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
-</span><span id="Generator.mergetreettl_sql-2734"><a href="#Generator.mergetreettl_sql-2734"><span class="linenos">2734</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.mergetreettl_sql-2735"><a href="#Generator.mergetreettl_sql-2735"><span class="linenos">2735</span></a>
-</span><span id="Generator.mergetreettl_sql-2736"><a href="#Generator.mergetreettl_sql-2736"><span class="linenos">2736</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator.mergetreettl_sql-2737"><a href="#Generator.mergetreettl_sql-2737"><span class="linenos">2737</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.mergetreettl_sql-2738"><a href="#Generator.mergetreettl_sql-2738"><span class="linenos">2738</span></a>
-</span><span id="Generator.mergetreettl_sql-2739"><a href="#Generator.mergetreettl_sql-2739"><span class="linenos">2739</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mergetreettl_sql-2737"><a href="#Generator.mergetreettl_sql-2737"><span class="linenos">2737</span></a> <span class="k">def</span> <span class="nf">mergetreettl_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">MergeTreeTTL</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mergetreettl_sql-2738"><a href="#Generator.mergetreettl_sql-2738"><span class="linenos">2738</span></a> <span class="n">where</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;where&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettl_sql-2739"><a href="#Generator.mergetreettl_sql-2739"><span class="linenos">2739</span></a> <span class="n">group</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;group&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettl_sql-2740"><a href="#Generator.mergetreettl_sql-2740"><span class="linenos">2740</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;aggregates&quot;</span><span class="p">)</span>
+</span><span id="Generator.mergetreettl_sql-2741"><a href="#Generator.mergetreettl_sql-2741"><span class="linenos">2741</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">aggregates</span><span class="p">)</span> <span class="k">if</span> <span class="n">aggregates</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.mergetreettl_sql-2742"><a href="#Generator.mergetreettl_sql-2742"><span class="linenos">2742</span></a>
+</span><span id="Generator.mergetreettl_sql-2743"><a href="#Generator.mergetreettl_sql-2743"><span class="linenos">2743</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">where</span> <span class="ow">or</span> <span class="n">group</span> <span class="ow">or</span> <span class="n">aggregates</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator.mergetreettl_sql-2744"><a href="#Generator.mergetreettl_sql-2744"><span class="linenos">2744</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.mergetreettl_sql-2745"><a href="#Generator.mergetreettl_sql-2745"><span class="linenos">2745</span></a>
+</span><span id="Generator.mergetreettl_sql-2746"><a href="#Generator.mergetreettl_sql-2746"><span class="linenos">2746</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TTL</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">group</span><span class="si">}{</span><span class="n">aggregates</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14782,8 +14828,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.transaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.transaction_sql-2741"><a href="#Generator.transaction_sql-2741"><span class="linenos">2741</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.transaction_sql-2742"><a href="#Generator.transaction_sql-2742"><span class="linenos">2742</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.transaction_sql-2748"><a href="#Generator.transaction_sql-2748"><span class="linenos">2748</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.transaction_sql-2749"><a href="#Generator.transaction_sql-2749"><span class="linenos">2749</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
</span></pre></div>
@@ -14801,12 +14847,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.commit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.commit_sql-2744"><a href="#Generator.commit_sql-2744"><span class="linenos">2744</span></a> <span class="k">def</span> <span class="nf">commit_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">Commit</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.commit_sql-2745"><a href="#Generator.commit_sql-2745"><span class="linenos">2745</span></a> <span class="n">chain</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;chain&quot;</span><span class="p">)</span>
-</span><span id="Generator.commit_sql-2746"><a href="#Generator.commit_sql-2746"><span class="linenos">2746</span></a> <span class="k">if</span> <span class="n">chain</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.commit_sql-2747"><a href="#Generator.commit_sql-2747"><span class="linenos">2747</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="s2">&quot; AND CHAIN&quot;</span> <span class="k">if</span> <span class="n">chain</span> <span class="k">else</span> <span class="s2">&quot; AND NO CHAIN&quot;</span>
-</span><span id="Generator.commit_sql-2748"><a href="#Generator.commit_sql-2748"><span class="linenos">2748</span></a>
-</span><span id="Generator.commit_sql-2749"><a href="#Generator.commit_sql-2749"><span class="linenos">2749</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT</span><span class="si">{</span><span class="n">chain</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.commit_sql-2751"><a href="#Generator.commit_sql-2751"><span class="linenos">2751</span></a> <span class="k">def</span> <span class="nf">commit_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">Commit</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.commit_sql-2752"><a href="#Generator.commit_sql-2752"><span class="linenos">2752</span></a> <span class="n">chain</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;chain&quot;</span><span class="p">)</span>
+</span><span id="Generator.commit_sql-2753"><a href="#Generator.commit_sql-2753"><span class="linenos">2753</span></a> <span class="k">if</span> <span class="n">chain</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.commit_sql-2754"><a href="#Generator.commit_sql-2754"><span class="linenos">2754</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="s2">&quot; AND CHAIN&quot;</span> <span class="k">if</span> <span class="n">chain</span> <span class="k">else</span> <span class="s2">&quot; AND NO CHAIN&quot;</span>
+</span><span id="Generator.commit_sql-2755"><a href="#Generator.commit_sql-2755"><span class="linenos">2755</span></a>
+</span><span id="Generator.commit_sql-2756"><a href="#Generator.commit_sql-2756"><span class="linenos">2756</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMIT</span><span class="si">{</span><span class="n">chain</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14824,10 +14870,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.rollback_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rollback_sql-2751"><a href="#Generator.rollback_sql-2751"><span class="linenos">2751</span></a> <span class="k">def</span> <span class="nf">rollback_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">Rollback</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.rollback_sql-2752"><a href="#Generator.rollback_sql-2752"><span class="linenos">2752</span></a> <span class="n">savepoint</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;savepoint&quot;</span><span class="p">)</span>
-</span><span id="Generator.rollback_sql-2753"><a href="#Generator.rollback_sql-2753"><span class="linenos">2753</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">savepoint</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.rollback_sql-2754"><a href="#Generator.rollback_sql-2754"><span class="linenos">2754</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rollback_sql-2758"><a href="#Generator.rollback_sql-2758"><span class="linenos">2758</span></a> <span class="k">def</span> <span class="nf">rollback_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">Rollback</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.rollback_sql-2759"><a href="#Generator.rollback_sql-2759"><span class="linenos">2759</span></a> <span class="n">savepoint</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;savepoint&quot;</span><span class="p">)</span>
+</span><span id="Generator.rollback_sql-2760"><a href="#Generator.rollback_sql-2760"><span class="linenos">2760</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; TO </span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">savepoint</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.rollback_sql-2761"><a href="#Generator.rollback_sql-2761"><span class="linenos">2761</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14845,29 +14891,29 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.altercolumn_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altercolumn_sql-2756"><a href="#Generator.altercolumn_sql-2756"><span class="linenos">2756</span></a> <span class="k">def</span> <span class="nf">altercolumn_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">AlterColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-2757"><a href="#Generator.altercolumn_sql-2757"><span class="linenos">2757</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.altercolumn_sql-2758"><a href="#Generator.altercolumn_sql-2758"><span class="linenos">2758</span></a>
-</span><span id="Generator.altercolumn_sql-2759"><a href="#Generator.altercolumn_sql-2759"><span class="linenos">2759</span></a> <span class="n">dtype</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;dtype&quot;</span><span class="p">)</span>
-</span><span id="Generator.altercolumn_sql-2760"><a href="#Generator.altercolumn_sql-2760"><span class="linenos">2760</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-2761"><a href="#Generator.altercolumn_sql-2761"><span class="linenos">2761</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
-</span><span id="Generator.altercolumn_sql-2762"><a href="#Generator.altercolumn_sql-2762"><span class="linenos">2762</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.altercolumn_sql-2763"><a href="#Generator.altercolumn_sql-2763"><span class="linenos">2763</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.altercolumn_sql-2764"><a href="#Generator.altercolumn_sql-2764"><span class="linenos">2764</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.altercolumn_sql-2765"><a href="#Generator.altercolumn_sql-2765"><span class="linenos">2765</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DATA TYPE </span><span class="si">{</span><span class="n">dtype</span><span class="si">}{</span><span class="n">collate</span><span class="si">}{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.altercolumn_sql-2766"><a href="#Generator.altercolumn_sql-2766"><span class="linenos">2766</span></a>
-</span><span id="Generator.altercolumn_sql-2767"><a href="#Generator.altercolumn_sql-2767"><span class="linenos">2767</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
-</span><span id="Generator.altercolumn_sql-2768"><a href="#Generator.altercolumn_sql-2768"><span class="linenos">2768</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-2769"><a href="#Generator.altercolumn_sql-2769"><span class="linenos">2769</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DEFAULT </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.altercolumn_sql-2770"><a href="#Generator.altercolumn_sql-2770"><span class="linenos">2770</span></a>
-</span><span id="Generator.altercolumn_sql-2771"><a href="#Generator.altercolumn_sql-2771"><span class="linenos">2771</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
-</span><span id="Generator.altercolumn_sql-2772"><a href="#Generator.altercolumn_sql-2772"><span class="linenos">2772</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-2773"><a href="#Generator.altercolumn_sql-2773"><span class="linenos">2773</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.altercolumn_sql-2774"><a href="#Generator.altercolumn_sql-2774"><span class="linenos">2774</span></a>
-</span><span id="Generator.altercolumn_sql-2775"><a href="#Generator.altercolumn_sql-2775"><span class="linenos">2775</span></a> <span class="k">if</span> <span class="ow">not</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;drop&quot;</span><span class="p">):</span>
-</span><span id="Generator.altercolumn_sql-2776"><a href="#Generator.altercolumn_sql-2776"><span class="linenos">2776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported ALTER COLUMN syntax&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altercolumn_sql-2763"><a href="#Generator.altercolumn_sql-2763"><span class="linenos">2763</span></a> <span class="k">def</span> <span class="nf">altercolumn_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">AlterColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-2764"><a href="#Generator.altercolumn_sql-2764"><span class="linenos">2764</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.altercolumn_sql-2765"><a href="#Generator.altercolumn_sql-2765"><span class="linenos">2765</span></a>
+</span><span id="Generator.altercolumn_sql-2766"><a href="#Generator.altercolumn_sql-2766"><span class="linenos">2766</span></a> <span class="n">dtype</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;dtype&quot;</span><span class="p">)</span>
+</span><span id="Generator.altercolumn_sql-2767"><a href="#Generator.altercolumn_sql-2767"><span class="linenos">2767</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-2768"><a href="#Generator.altercolumn_sql-2768"><span class="linenos">2768</span></a> <span class="n">collate</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;collate&quot;</span><span class="p">)</span>
+</span><span id="Generator.altercolumn_sql-2769"><a href="#Generator.altercolumn_sql-2769"><span class="linenos">2769</span></a> <span class="n">collate</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collate</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collate</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.altercolumn_sql-2770"><a href="#Generator.altercolumn_sql-2770"><span class="linenos">2770</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.altercolumn_sql-2771"><a href="#Generator.altercolumn_sql-2771"><span class="linenos">2771</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">using</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.altercolumn_sql-2772"><a href="#Generator.altercolumn_sql-2772"><span class="linenos">2772</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DATA TYPE </span><span class="si">{</span><span class="n">dtype</span><span class="si">}{</span><span class="n">collate</span><span class="si">}{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.altercolumn_sql-2773"><a href="#Generator.altercolumn_sql-2773"><span class="linenos">2773</span></a>
+</span><span id="Generator.altercolumn_sql-2774"><a href="#Generator.altercolumn_sql-2774"><span class="linenos">2774</span></a> <span class="n">default</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;default&quot;</span><span class="p">)</span>
+</span><span id="Generator.altercolumn_sql-2775"><a href="#Generator.altercolumn_sql-2775"><span class="linenos">2775</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-2776"><a href="#Generator.altercolumn_sql-2776"><span class="linenos">2776</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> SET DEFAULT </span><span class="si">{</span><span class="n">default</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Generator.altercolumn_sql-2777"><a href="#Generator.altercolumn_sql-2777"><span class="linenos">2777</span></a>
-</span><span id="Generator.altercolumn_sql-2778"><a href="#Generator.altercolumn_sql-2778"><span class="linenos">2778</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DROP DEFAULT&quot;</span>
+</span><span id="Generator.altercolumn_sql-2778"><a href="#Generator.altercolumn_sql-2778"><span class="linenos">2778</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
+</span><span id="Generator.altercolumn_sql-2779"><a href="#Generator.altercolumn_sql-2779"><span class="linenos">2779</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-2780"><a href="#Generator.altercolumn_sql-2780"><span class="linenos">2780</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.altercolumn_sql-2781"><a href="#Generator.altercolumn_sql-2781"><span class="linenos">2781</span></a>
+</span><span id="Generator.altercolumn_sql-2782"><a href="#Generator.altercolumn_sql-2782"><span class="linenos">2782</span></a> <span class="k">if</span> <span class="ow">not</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;drop&quot;</span><span class="p">):</span>
+</span><span id="Generator.altercolumn_sql-2783"><a href="#Generator.altercolumn_sql-2783"><span class="linenos">2783</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported ALTER COLUMN syntax&quot;</span><span class="p">)</span>
+</span><span id="Generator.altercolumn_sql-2784"><a href="#Generator.altercolumn_sql-2784"><span class="linenos">2784</span></a>
+</span><span id="Generator.altercolumn_sql-2785"><a href="#Generator.altercolumn_sql-2785"><span class="linenos">2785</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER COLUMN </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DROP DEFAULT&quot;</span>
</span></pre></div>
@@ -14885,14 +14931,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.renametable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.renametable_sql-2780"><a href="#Generator.renametable_sql-2780"><span class="linenos">2780</span></a> <span class="k">def</span> <span class="nf">renametable_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">RenameTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.renametable_sql-2781"><a href="#Generator.renametable_sql-2781"><span class="linenos">2781</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
-</span><span id="Generator.renametable_sql-2782"><a href="#Generator.renametable_sql-2782"><span class="linenos">2782</span></a> <span class="c1"># Remove db from tables</span>
-</span><span id="Generator.renametable_sql-2783"><a href="#Generator.renametable_sql-2783"><span class="linenos">2783</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Generator.renametable_sql-2784"><a href="#Generator.renametable_sql-2784"><span class="linenos">2784</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
-</span><span id="Generator.renametable_sql-2785"><a href="#Generator.renametable_sql-2785"><span class="linenos">2785</span></a> <span class="p">)</span>
-</span><span id="Generator.renametable_sql-2786"><a href="#Generator.renametable_sql-2786"><span class="linenos">2786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.renametable_sql-2787"><a href="#Generator.renametable_sql-2787"><span class="linenos">2787</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME TO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.renametable_sql-2787"><a href="#Generator.renametable_sql-2787"><span class="linenos">2787</span></a> <span class="k">def</span> <span class="nf">renametable_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">RenameTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.renametable_sql-2788"><a href="#Generator.renametable_sql-2788"><span class="linenos">2788</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">RENAME_TABLE_WITH_DB</span><span class="p">:</span>
+</span><span id="Generator.renametable_sql-2789"><a href="#Generator.renametable_sql-2789"><span class="linenos">2789</span></a> <span class="c1"># Remove db from tables</span>
+</span><span id="Generator.renametable_sql-2790"><a href="#Generator.renametable_sql-2790"><span class="linenos">2790</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Generator.renametable_sql-2791"><a href="#Generator.renametable_sql-2791"><span class="linenos">2791</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">table_</span><span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="k">else</span> <span class="n">n</span>
+</span><span id="Generator.renametable_sql-2792"><a href="#Generator.renametable_sql-2792"><span class="linenos">2792</span></a> <span class="p">)</span>
+</span><span id="Generator.renametable_sql-2793"><a href="#Generator.renametable_sql-2793"><span class="linenos">2793</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.renametable_sql-2794"><a href="#Generator.renametable_sql-2794"><span class="linenos">2794</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME TO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14910,11 +14956,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.renamecolumn_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.renamecolumn_sql-2789"><a href="#Generator.renamecolumn_sql-2789"><span class="linenos">2789</span></a> <span class="k">def</span> <span class="nf">renamecolumn_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">RenameColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.renamecolumn_sql-2790"><a href="#Generator.renamecolumn_sql-2790"><span class="linenos">2790</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.renamecolumn_sql-2791"><a href="#Generator.renamecolumn_sql-2791"><span class="linenos">2791</span></a> <span class="n">old_column</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="Generator.renamecolumn_sql-2792"><a href="#Generator.renamecolumn_sql-2792"><span class="linenos">2792</span></a> <span class="n">new_column</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;to&quot;</span><span class="p">)</span>
-</span><span id="Generator.renamecolumn_sql-2793"><a href="#Generator.renamecolumn_sql-2793"><span class="linenos">2793</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME COLUMN</span><span class="si">{</span><span class="n">exists</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">old_column</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">new_column</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.renamecolumn_sql-2796"><a href="#Generator.renamecolumn_sql-2796"><span class="linenos">2796</span></a> <span class="k">def</span> <span class="nf">renamecolumn_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">RenameColumn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.renamecolumn_sql-2797"><a href="#Generator.renamecolumn_sql-2797"><span class="linenos">2797</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.renamecolumn_sql-2798"><a href="#Generator.renamecolumn_sql-2798"><span class="linenos">2798</span></a> <span class="n">old_column</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="Generator.renamecolumn_sql-2799"><a href="#Generator.renamecolumn_sql-2799"><span class="linenos">2799</span></a> <span class="n">new_column</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;to&quot;</span><span class="p">)</span>
+</span><span id="Generator.renamecolumn_sql-2800"><a href="#Generator.renamecolumn_sql-2800"><span class="linenos">2800</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RENAME COLUMN</span><span class="si">{</span><span class="n">exists</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">old_column</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">new_column</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14932,21 +14978,21 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.altertable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altertable_sql-2795"><a href="#Generator.altertable_sql-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">altertable_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">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.altertable_sql-2796"><a href="#Generator.altertable_sql-2796"><span class="linenos">2796</span></a> <span class="n">actions</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;actions&quot;</span><span class="p">]</span>
-</span><span id="Generator.altertable_sql-2797"><a href="#Generator.altertable_sql-2797"><span class="linenos">2797</span></a>
-</span><span id="Generator.altertable_sql-2798"><a href="#Generator.altertable_sql-2798"><span class="linenos">2798</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">):</span>
-</span><span id="Generator.altertable_sql-2799"><a href="#Generator.altertable_sql-2799"><span class="linenos">2799</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.altertable_sql-2800"><a href="#Generator.altertable_sql-2800"><span class="linenos">2800</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="Generator.altertable_sql-2801"><a href="#Generator.altertable_sql-2801"><span class="linenos">2801</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMNS &quot;</span><span class="p">)</span>
-</span><span id="Generator.altertable_sql-2802"><a href="#Generator.altertable_sql-2802"><span class="linenos">2802</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">):</span>
-</span><span id="Generator.altertable_sql-2803"><a href="#Generator.altertable_sql-2803"><span class="linenos">2803</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.altertable_sql-2804"><a href="#Generator.altertable_sql-2804"><span class="linenos">2804</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.altertable_sql-2805"><a href="#Generator.altertable_sql-2805"><span class="linenos">2805</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.altertable_sql-2806"><a href="#Generator.altertable_sql-2806"><span class="linenos">2806</span></a>
-</span><span id="Generator.altertable_sql-2807"><a href="#Generator.altertable_sql-2807"><span class="linenos">2807</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.altertable_sql-2808"><a href="#Generator.altertable_sql-2808"><span class="linenos">2808</span></a> <span class="n">only</span> <span class="o">=</span> <span class="s2">&quot; ONLY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.altertable_sql-2809"><a href="#Generator.altertable_sql-2809"><span class="linenos">2809</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER TABLE</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">only</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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"> </span><span class="si">{</span><span class="n">actions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altertable_sql-2802"><a href="#Generator.altertable_sql-2802"><span class="linenos">2802</span></a> <span class="k">def</span> <span class="nf">altertable_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">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.altertable_sql-2803"><a href="#Generator.altertable_sql-2803"><span class="linenos">2803</span></a> <span class="n">actions</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;actions&quot;</span><span class="p">]</span>
+</span><span id="Generator.altertable_sql-2804"><a href="#Generator.altertable_sql-2804"><span class="linenos">2804</span></a>
+</span><span id="Generator.altertable_sql-2805"><a href="#Generator.altertable_sql-2805"><span class="linenos">2805</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">):</span>
+</span><span id="Generator.altertable_sql-2806"><a href="#Generator.altertable_sql-2806"><span class="linenos">2806</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.altertable_sql-2807"><a href="#Generator.altertable_sql-2807"><span class="linenos">2807</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="Generator.altertable_sql-2808"><a href="#Generator.altertable_sql-2808"><span class="linenos">2808</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMNS &quot;</span><span class="p">)</span>
+</span><span id="Generator.altertable_sql-2809"><a href="#Generator.altertable_sql-2809"><span class="linenos">2809</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">actions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">):</span>
+</span><span id="Generator.altertable_sql-2810"><a href="#Generator.altertable_sql-2810"><span class="linenos">2810</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.altertable_sql-2811"><a href="#Generator.altertable_sql-2811"><span class="linenos">2811</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.altertable_sql-2812"><a href="#Generator.altertable_sql-2812"><span class="linenos">2812</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.altertable_sql-2813"><a href="#Generator.altertable_sql-2813"><span class="linenos">2813</span></a>
+</span><span id="Generator.altertable_sql-2814"><a href="#Generator.altertable_sql-2814"><span class="linenos">2814</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.altertable_sql-2815"><a href="#Generator.altertable_sql-2815"><span class="linenos">2815</span></a> <span class="n">only</span> <span class="o">=</span> <span class="s2">&quot; ONLY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.altertable_sql-2816"><a href="#Generator.altertable_sql-2816"><span class="linenos">2816</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ALTER TABLE</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">only</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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"> </span><span class="si">{</span><span class="n">actions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14964,14 +15010,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.add_column_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.add_column_sql-2811"><a href="#Generator.add_column_sql-2811"><span class="linenos">2811</span></a> <span class="k">def</span> <span class="nf">add_column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.add_column_sql-2812"><a href="#Generator.add_column_sql-2812"><span class="linenos">2812</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_INCLUDE_COLUMN_KEYWORD</span><span class="p">:</span>
-</span><span id="Generator.add_column_sql-2813"><a href="#Generator.add_column_sql-2813"><span class="linenos">2813</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
-</span><span id="Generator.add_column_sql-2814"><a href="#Generator.add_column_sql-2814"><span class="linenos">2814</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.add_column_sql-2815"><a href="#Generator.add_column_sql-2815"><span class="linenos">2815</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
-</span><span id="Generator.add_column_sql-2816"><a href="#Generator.add_column_sql-2816"><span class="linenos">2816</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
-</span><span id="Generator.add_column_sql-2817"><a href="#Generator.add_column_sql-2817"><span class="linenos">2817</span></a> <span class="p">)</span>
-</span><span id="Generator.add_column_sql-2818"><a href="#Generator.add_column_sql-2818"><span class="linenos">2818</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.add_column_sql-2818"><a href="#Generator.add_column_sql-2818"><span class="linenos">2818</span></a> <span class="k">def</span> <span class="nf">add_column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.add_column_sql-2819"><a href="#Generator.add_column_sql-2819"><span class="linenos">2819</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_INCLUDE_COLUMN_KEYWORD</span><span class="p">:</span>
+</span><span id="Generator.add_column_sql-2820"><a href="#Generator.add_column_sql-2820"><span class="linenos">2820</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
+</span><span id="Generator.add_column_sql-2821"><a href="#Generator.add_column_sql-2821"><span class="linenos">2821</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.add_column_sql-2822"><a href="#Generator.add_column_sql-2822"><span class="linenos">2822</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;actions&quot;</span><span class="p">,</span>
+</span><span id="Generator.add_column_sql-2823"><a href="#Generator.add_column_sql-2823"><span class="linenos">2823</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ADD COLUMN &quot;</span><span class="p">,</span>
+</span><span id="Generator.add_column_sql-2824"><a href="#Generator.add_column_sql-2824"><span class="linenos">2824</span></a> <span class="p">)</span>
+</span><span id="Generator.add_column_sql-2825"><a href="#Generator.add_column_sql-2825"><span class="linenos">2825</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ADD </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="o">=</span><span class="s1">&#39;actions&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -14989,10 +15035,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.droppartition_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.droppartition_sql-2820"><a href="#Generator.droppartition_sql-2820"><span class="linenos">2820</span></a> <span class="k">def</span> <span class="nf">droppartition_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">DropPartition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.droppartition_sql-2821"><a href="#Generator.droppartition_sql-2821"><span class="linenos">2821</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.droppartition_sql-2822"><a href="#Generator.droppartition_sql-2822"><span class="linenos">2822</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Generator.droppartition_sql-2823"><a href="#Generator.droppartition_sql-2823"><span class="linenos">2823</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.droppartition_sql-2827"><a href="#Generator.droppartition_sql-2827"><span class="linenos">2827</span></a> <span class="k">def</span> <span class="nf">droppartition_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">DropPartition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.droppartition_sql-2828"><a href="#Generator.droppartition_sql-2828"><span class="linenos">2828</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.droppartition_sql-2829"><a href="#Generator.droppartition_sql-2829"><span class="linenos">2829</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="s2">&quot; IF EXISTS &quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Generator.droppartition_sql-2830"><a href="#Generator.droppartition_sql-2830"><span class="linenos">2830</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DROP</span><span class="si">{</span><span class="n">exists</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15010,16 +15056,16 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.addconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.addconstraint_sql-2825"><a href="#Generator.addconstraint_sql-2825"><span class="linenos">2825</span></a> <span class="k">def</span> <span class="nf">addconstraint_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">AddConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.addconstraint_sql-2826"><a href="#Generator.addconstraint_sql-2826"><span class="linenos">2826</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.addconstraint_sql-2827"><a href="#Generator.addconstraint_sql-2827"><span class="linenos">2827</span></a> <span class="n">expression_</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="Generator.addconstraint_sql-2828"><a href="#Generator.addconstraint_sql-2828"><span class="linenos">2828</span></a> <span class="n">add_constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;ADD&quot;</span>
-</span><span id="Generator.addconstraint_sql-2829"><a href="#Generator.addconstraint_sql-2829"><span class="linenos">2829</span></a>
-</span><span id="Generator.addconstraint_sql-2830"><a href="#Generator.addconstraint_sql-2830"><span class="linenos">2830</span></a> <span class="n">enforced</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;enforced&quot;</span><span class="p">)</span>
-</span><span id="Generator.addconstraint_sql-2831"><a href="#Generator.addconstraint_sql-2831"><span class="linenos">2831</span></a> <span class="k">if</span> <span class="n">enforced</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.addconstraint_sql-2832"><a href="#Generator.addconstraint_sql-2832"><span class="linenos">2832</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> CHECK (</span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="s1">&#39; ENFORCED&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">enforced</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.addconstraint_sql-2833"><a href="#Generator.addconstraint_sql-2833"><span class="linenos">2833</span></a>
-</span><span id="Generator.addconstraint_sql-2834"><a href="#Generator.addconstraint_sql-2834"><span class="linenos">2834</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.addconstraint_sql-2832"><a href="#Generator.addconstraint_sql-2832"><span class="linenos">2832</span></a> <span class="k">def</span> <span class="nf">addconstraint_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">AddConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.addconstraint_sql-2833"><a href="#Generator.addconstraint_sql-2833"><span class="linenos">2833</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.addconstraint_sql-2834"><a href="#Generator.addconstraint_sql-2834"><span class="linenos">2834</span></a> <span class="n">expression_</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="Generator.addconstraint_sql-2835"><a href="#Generator.addconstraint_sql-2835"><span class="linenos">2835</span></a> <span class="n">add_constraint</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ADD CONSTRAINT </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;ADD&quot;</span>
+</span><span id="Generator.addconstraint_sql-2836"><a href="#Generator.addconstraint_sql-2836"><span class="linenos">2836</span></a>
+</span><span id="Generator.addconstraint_sql-2837"><a href="#Generator.addconstraint_sql-2837"><span class="linenos">2837</span></a> <span class="n">enforced</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;enforced&quot;</span><span class="p">)</span>
+</span><span id="Generator.addconstraint_sql-2838"><a href="#Generator.addconstraint_sql-2838"><span class="linenos">2838</span></a> <span class="k">if</span> <span class="n">enforced</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.addconstraint_sql-2839"><a href="#Generator.addconstraint_sql-2839"><span class="linenos">2839</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> CHECK (</span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="s1">&#39; ENFORCED&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">enforced</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.addconstraint_sql-2840"><a href="#Generator.addconstraint_sql-2840"><span class="linenos">2840</span></a>
+</span><span id="Generator.addconstraint_sql-2841"><a href="#Generator.addconstraint_sql-2841"><span class="linenos">2841</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">add_constraint</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expression_</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15037,13 +15083,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.distinct_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distinct_sql-2836"><a href="#Generator.distinct_sql-2836"><span class="linenos">2836</span></a> <span class="k">def</span> <span class="nf">distinct_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">Distinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.distinct_sql-2837"><a href="#Generator.distinct_sql-2837"><span class="linenos">2837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.distinct_sql-2838"><a href="#Generator.distinct_sql-2838"><span class="linenos">2838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.distinct_sql-2839"><a href="#Generator.distinct_sql-2839"><span class="linenos">2839</span></a>
-</span><span id="Generator.distinct_sql-2840"><a href="#Generator.distinct_sql-2840"><span class="linenos">2840</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
-</span><span id="Generator.distinct_sql-2841"><a href="#Generator.distinct_sql-2841"><span class="linenos">2841</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.distinct_sql-2842"><a href="#Generator.distinct_sql-2842"><span class="linenos">2842</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DISTINCT</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distinct_sql-2843"><a href="#Generator.distinct_sql-2843"><span class="linenos">2843</span></a> <span class="k">def</span> <span class="nf">distinct_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">Distinct</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.distinct_sql-2844"><a href="#Generator.distinct_sql-2844"><span class="linenos">2844</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.distinct_sql-2845"><a href="#Generator.distinct_sql-2845"><span class="linenos">2845</span></a>
+</span><span id="Generator.distinct_sql-2846"><a href="#Generator.distinct_sql-2846"><span class="linenos">2846</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">MULTI_ARG_DISTINCT</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator.distinct_sql-2847"><a href="#Generator.distinct_sql-2847"><span class="linenos">2847</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">case</span><span class="p">()</span>
+</span><span id="Generator.distinct_sql-2848"><a href="#Generator.distinct_sql-2848"><span class="linenos">2848</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.distinct_sql-2849"><a href="#Generator.distinct_sql-2849"><span class="linenos">2849</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">case</span><span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()),</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
+</span><span id="Generator.distinct_sql-2850"><a href="#Generator.distinct_sql-2850"><span class="linenos">2850</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">))</span>
+</span><span id="Generator.distinct_sql-2851"><a href="#Generator.distinct_sql-2851"><span class="linenos">2851</span></a>
+</span><span id="Generator.distinct_sql-2852"><a href="#Generator.distinct_sql-2852"><span class="linenos">2852</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.distinct_sql-2853"><a href="#Generator.distinct_sql-2853"><span class="linenos">2853</span></a>
+</span><span id="Generator.distinct_sql-2854"><a href="#Generator.distinct_sql-2854"><span class="linenos">2854</span></a> <span class="n">on</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;on&quot;</span><span class="p">)</span>
+</span><span id="Generator.distinct_sql-2855"><a href="#Generator.distinct_sql-2855"><span class="linenos">2855</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">on</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.distinct_sql-2856"><a href="#Generator.distinct_sql-2856"><span class="linenos">2856</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DISTINCT</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15061,8 +15114,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.ignorenulls_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ignorenulls_sql-2844"><a href="#Generator.ignorenulls_sql-2844"><span class="linenos">2844</span></a> <span class="k">def</span> <span class="nf">ignorenulls_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">IgnoreNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.ignorenulls_sql-2845"><a href="#Generator.ignorenulls_sql-2845"><span class="linenos">2845</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ignorenulls_sql-2858"><a href="#Generator.ignorenulls_sql-2858"><span class="linenos">2858</span></a> <span class="k">def</span> <span class="nf">ignorenulls_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">IgnoreNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.ignorenulls_sql-2859"><a href="#Generator.ignorenulls_sql-2859"><span class="linenos">2859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15080,8 +15133,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.respectnulls_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.respectnulls_sql-2847"><a href="#Generator.respectnulls_sql-2847"><span class="linenos">2847</span></a> <span class="k">def</span> <span class="nf">respectnulls_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">RespectNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.respectnulls_sql-2848"><a href="#Generator.respectnulls_sql-2848"><span class="linenos">2848</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.respectnulls_sql-2861"><a href="#Generator.respectnulls_sql-2861"><span class="linenos">2861</span></a> <span class="k">def</span> <span class="nf">respectnulls_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">RespectNulls</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.respectnulls_sql-2862"><a href="#Generator.respectnulls_sql-2862"><span class="linenos">2862</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_embed_ignore_nulls</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15099,13 +15152,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.intdiv_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intdiv_sql-2860"><a href="#Generator.intdiv_sql-2860"><span class="linenos">2860</span></a> <span class="k">def</span> <span class="nf">intdiv_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">IntDiv</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.intdiv_sql-2861"><a href="#Generator.intdiv_sql-2861"><span class="linenos">2861</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.intdiv_sql-2862"><a href="#Generator.intdiv_sql-2862"><span class="linenos">2862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
-</span><span id="Generator.intdiv_sql-2863"><a href="#Generator.intdiv_sql-2863"><span class="linenos">2863</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
-</span><span id="Generator.intdiv_sql-2864"><a href="#Generator.intdiv_sql-2864"><span class="linenos">2864</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="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">),</span>
-</span><span id="Generator.intdiv_sql-2865"><a href="#Generator.intdiv_sql-2865"><span class="linenos">2865</span></a> <span class="p">)</span>
-</span><span id="Generator.intdiv_sql-2866"><a href="#Generator.intdiv_sql-2866"><span class="linenos">2866</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intdiv_sql-2874"><a href="#Generator.intdiv_sql-2874"><span class="linenos">2874</span></a> <span class="k">def</span> <span class="nf">intdiv_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">IntDiv</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.intdiv_sql-2875"><a href="#Generator.intdiv_sql-2875"><span class="linenos">2875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.intdiv_sql-2876"><a href="#Generator.intdiv_sql-2876"><span class="linenos">2876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
+</span><span id="Generator.intdiv_sql-2877"><a href="#Generator.intdiv_sql-2877"><span class="linenos">2877</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">),</span>
+</span><span id="Generator.intdiv_sql-2878"><a href="#Generator.intdiv_sql-2878"><span class="linenos">2878</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="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">),</span>
+</span><span id="Generator.intdiv_sql-2879"><a href="#Generator.intdiv_sql-2879"><span class="linenos">2879</span></a> <span class="p">)</span>
+</span><span id="Generator.intdiv_sql-2880"><a href="#Generator.intdiv_sql-2880"><span class="linenos">2880</span></a> <span class="p">)</span>
</span></pre></div>
@@ -15123,10 +15176,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.dpipe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dpipe_sql-2868"><a href="#Generator.dpipe_sql-2868"><span class="linenos">2868</span></a> <span class="k">def</span> <span class="nf">dpipe_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">DPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dpipe_sql-2869"><a href="#Generator.dpipe_sql-2869"><span class="linenos">2869</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="Generator.dpipe_sql-2870"><a href="#Generator.dpipe_sql-2870"><span class="linenos">2870</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
-</span><span id="Generator.dpipe_sql-2871"><a href="#Generator.dpipe_sql-2871"><span class="linenos">2871</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.dpipe_sql-2882"><a href="#Generator.dpipe_sql-2882"><span class="linenos">2882</span></a> <span class="k">def</span> <span class="nf">dpipe_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">DPipe</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dpipe_sql-2883"><a href="#Generator.dpipe_sql-2883"><span class="linenos">2883</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="Generator.dpipe_sql-2884"><a href="#Generator.dpipe_sql-2884"><span class="linenos">2884</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;CONCAT&quot;</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span>
+</span><span id="Generator.dpipe_sql-2885"><a href="#Generator.dpipe_sql-2885"><span class="linenos">2885</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15144,28 +15197,28 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.div_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.div_sql-2873"><a href="#Generator.div_sql-2873"><span class="linenos">2873</span></a> <span class="k">def</span> <span class="nf">div_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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.div_sql-2874"><a href="#Generator.div_sql-2874"><span class="linenos">2874</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="Generator.div_sql-2875"><a href="#Generator.div_sql-2875"><span class="linenos">2875</span></a>
-</span><span id="Generator.div_sql-2876"><a href="#Generator.div_sql-2876"><span class="linenos">2876</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
-</span><span id="Generator.div_sql-2877"><a href="#Generator.div_sql-2877"><span class="linenos">2877</span></a> <span class="n">r</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">r</span><span class="o">.</span><span class="n">copy</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">0</span><span class="p">)))</span>
-</span><span id="Generator.div_sql-2878"><a href="#Generator.div_sql-2878"><span class="linenos">2878</span></a>
-</span><span id="Generator.div_sql-2879"><a href="#Generator.div_sql-2879"><span class="linenos">2879</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</span> <span class="ow">not</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;typed&quot;</span><span class="p">):</span>
-</span><span id="Generator.div_sql-2880"><a href="#Generator.div_sql-2880"><span class="linenos">2880</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">FLOAT_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
-</span><span id="Generator.div_sql-2881"><a href="#Generator.div_sql-2881"><span class="linenos">2881</span></a> <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">FLOAT_TYPES</span>
-</span><span id="Generator.div_sql-2882"><a href="#Generator.div_sql-2882"><span class="linenos">2882</span></a> <span class="p">):</span>
-</span><span id="Generator.div_sql-2883"><a href="#Generator.div_sql-2883"><span class="linenos">2883</span></a> <span class="n">l</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <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">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">))</span>
-</span><span id="Generator.div_sql-2884"><a href="#Generator.div_sql-2884"><span class="linenos">2884</span></a>
-</span><span id="Generator.div_sql-2885"><a href="#Generator.div_sql-2885"><span class="linenos">2885</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</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;typed&quot;</span><span class="p">):</span>
-</span><span id="Generator.div_sql-2886"><a href="#Generator.div_sql-2886"><span class="linenos">2886</span></a> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">):</span>
-</span><span id="Generator.div_sql-2887"><a href="#Generator.div_sql-2887"><span class="linenos">2887</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.div_sql-2888"><a href="#Generator.div_sql-2888"><span class="linenos">2888</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="Generator.div_sql-2889"><a href="#Generator.div_sql-2889"><span class="linenos">2889</span></a> <span class="n">l</span> <span class="o">/</span> <span class="n">r</span><span class="p">,</span>
-</span><span id="Generator.div_sql-2890"><a href="#Generator.div_sql-2890"><span class="linenos">2890</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">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="Generator.div_sql-2891"><a href="#Generator.div_sql-2891"><span class="linenos">2891</span></a> <span class="p">)</span>
-</span><span id="Generator.div_sql-2892"><a href="#Generator.div_sql-2892"><span class="linenos">2892</span></a> <span class="p">)</span>
-</span><span id="Generator.div_sql-2893"><a href="#Generator.div_sql-2893"><span class="linenos">2893</span></a>
-</span><span id="Generator.div_sql-2894"><a href="#Generator.div_sql-2894"><span class="linenos">2894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.div_sql-2887"><a href="#Generator.div_sql-2887"><span class="linenos">2887</span></a> <span class="k">def</span> <span class="nf">div_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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.div_sql-2888"><a href="#Generator.div_sql-2888"><span class="linenos">2888</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="Generator.div_sql-2889"><a href="#Generator.div_sql-2889"><span class="linenos">2889</span></a>
+</span><span id="Generator.div_sql-2890"><a href="#Generator.div_sql-2890"><span class="linenos">2890</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span> <span class="ow">and</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;safe&quot;</span><span class="p">):</span>
+</span><span id="Generator.div_sql-2891"><a href="#Generator.div_sql-2891"><span class="linenos">2891</span></a> <span class="n">r</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Nullif</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">r</span><span class="o">.</span><span class="n">copy</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">0</span><span class="p">)))</span>
+</span><span id="Generator.div_sql-2892"><a href="#Generator.div_sql-2892"><span class="linenos">2892</span></a>
+</span><span id="Generator.div_sql-2893"><a href="#Generator.div_sql-2893"><span class="linenos">2893</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</span> <span class="ow">not</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;typed&quot;</span><span class="p">):</span>
+</span><span id="Generator.div_sql-2894"><a href="#Generator.div_sql-2894"><span class="linenos">2894</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">FLOAT_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
+</span><span id="Generator.div_sql-2895"><a href="#Generator.div_sql-2895"><span class="linenos">2895</span></a> <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">FLOAT_TYPES</span>
+</span><span id="Generator.div_sql-2896"><a href="#Generator.div_sql-2896"><span class="linenos">2896</span></a> <span class="p">):</span>
+</span><span id="Generator.div_sql-2897"><a href="#Generator.div_sql-2897"><span class="linenos">2897</span></a> <span class="n">l</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <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">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">))</span>
+</span><span id="Generator.div_sql-2898"><a href="#Generator.div_sql-2898"><span class="linenos">2898</span></a>
+</span><span id="Generator.div_sql-2899"><a href="#Generator.div_sql-2899"><span class="linenos">2899</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span> <span class="ow">and</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;typed&quot;</span><span class="p">):</span>
+</span><span id="Generator.div_sql-2900"><a href="#Generator.div_sql-2900"><span class="linenos">2900</span></a> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">)</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</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">INTEGER_TYPES</span><span class="p">):</span>
+</span><span id="Generator.div_sql-2901"><a href="#Generator.div_sql-2901"><span class="linenos">2901</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.div_sql-2902"><a href="#Generator.div_sql-2902"><span class="linenos">2902</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="Generator.div_sql-2903"><a href="#Generator.div_sql-2903"><span class="linenos">2903</span></a> <span class="n">l</span> <span class="o">/</span> <span class="n">r</span><span class="p">,</span>
+</span><span id="Generator.div_sql-2904"><a href="#Generator.div_sql-2904"><span class="linenos">2904</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">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="Generator.div_sql-2905"><a href="#Generator.div_sql-2905"><span class="linenos">2905</span></a> <span class="p">)</span>
+</span><span id="Generator.div_sql-2906"><a href="#Generator.div_sql-2906"><span class="linenos">2906</span></a> <span class="p">)</span>
+</span><span id="Generator.div_sql-2907"><a href="#Generator.div_sql-2907"><span class="linenos">2907</span></a>
+</span><span id="Generator.div_sql-2908"><a href="#Generator.div_sql-2908"><span class="linenos">2908</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15183,8 +15236,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.overlaps_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.overlaps_sql-2896"><a href="#Generator.overlaps_sql-2896"><span class="linenos">2896</span></a> <span class="k">def</span> <span class="nf">overlaps_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">Overlaps</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.overlaps_sql-2897"><a href="#Generator.overlaps_sql-2897"><span class="linenos">2897</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.overlaps_sql-2910"><a href="#Generator.overlaps_sql-2910"><span class="linenos">2910</span></a> <span class="k">def</span> <span class="nf">overlaps_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">Overlaps</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.overlaps_sql-2911"><a href="#Generator.overlaps_sql-2911"><span class="linenos">2911</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15202,8 +15255,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.distance_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distance_sql-2899"><a href="#Generator.distance_sql-2899"><span class="linenos">2899</span></a> <span class="k">def</span> <span class="nf">distance_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">Distance</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.distance_sql-2900"><a href="#Generator.distance_sql-2900"><span class="linenos">2900</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distance_sql-2913"><a href="#Generator.distance_sql-2913"><span class="linenos">2913</span></a> <span class="k">def</span> <span class="nf">distance_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">Distance</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.distance_sql-2914"><a href="#Generator.distance_sql-2914"><span class="linenos">2914</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15221,8 +15274,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.dot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dot_sql-2902"><a href="#Generator.dot_sql-2902"><span class="linenos">2902</span></a> <span class="k">def</span> <span class="nf">dot_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">Dot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dot_sql-2903"><a href="#Generator.dot_sql-2903"><span class="linenos">2903</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dot_sql-2916"><a href="#Generator.dot_sql-2916"><span class="linenos">2916</span></a> <span class="k">def</span> <span class="nf">dot_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">Dot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dot_sql-2917"><a href="#Generator.dot_sql-2917"><span class="linenos">2917</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15240,8 +15293,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.eq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.eq_sql-2905"><a href="#Generator.eq_sql-2905"><span class="linenos">2905</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.eq_sql-2906"><a href="#Generator.eq_sql-2906"><span class="linenos">2906</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.eq_sql-2919"><a href="#Generator.eq_sql-2919"><span class="linenos">2919</span></a> <span class="k">def</span> <span class="nf">eq_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">EQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.eq_sql-2920"><a href="#Generator.eq_sql-2920"><span class="linenos">2920</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15259,8 +15312,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.propertyeq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.propertyeq_sql-2908"><a href="#Generator.propertyeq_sql-2908"><span class="linenos">2908</span></a> <span class="k">def</span> <span class="nf">propertyeq_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">PropertyEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.propertyeq_sql-2909"><a href="#Generator.propertyeq_sql-2909"><span class="linenos">2909</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.propertyeq_sql-2922"><a href="#Generator.propertyeq_sql-2922"><span class="linenos">2922</span></a> <span class="k">def</span> <span class="nf">propertyeq_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">PropertyEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.propertyeq_sql-2923"><a href="#Generator.propertyeq_sql-2923"><span class="linenos">2923</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:=&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15278,8 +15331,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.escape_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_sql-2911"><a href="#Generator.escape_sql-2911"><span class="linenos">2911</span></a> <span class="k">def</span> <span class="nf">escape_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">Escape</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.escape_sql-2912"><a href="#Generator.escape_sql-2912"><span class="linenos">2912</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_sql-2925"><a href="#Generator.escape_sql-2925"><span class="linenos">2925</span></a> <span class="k">def</span> <span class="nf">escape_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">Escape</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.escape_sql-2926"><a href="#Generator.escape_sql-2926"><span class="linenos">2926</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15297,8 +15350,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.glob_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.glob_sql-2914"><a href="#Generator.glob_sql-2914"><span class="linenos">2914</span></a> <span class="k">def</span> <span class="nf">glob_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">Glob</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.glob_sql-2915"><a href="#Generator.glob_sql-2915"><span class="linenos">2915</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;GLOB&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.glob_sql-2928"><a href="#Generator.glob_sql-2928"><span class="linenos">2928</span></a> <span class="k">def</span> <span class="nf">glob_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">Glob</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.glob_sql-2929"><a href="#Generator.glob_sql-2929"><span class="linenos">2929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;GLOB&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15316,8 +15369,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.gt_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gt_sql-2917"><a href="#Generator.gt_sql-2917"><span class="linenos">2917</span></a> <span class="k">def</span> <span class="nf">gt_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">GT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.gt_sql-2918"><a href="#Generator.gt_sql-2918"><span class="linenos">2918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gt_sql-2931"><a href="#Generator.gt_sql-2931"><span class="linenos">2931</span></a> <span class="k">def</span> <span class="nf">gt_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">GT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.gt_sql-2932"><a href="#Generator.gt_sql-2932"><span class="linenos">2932</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15335,8 +15388,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.gte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gte_sql-2920"><a href="#Generator.gte_sql-2920"><span class="linenos">2920</span></a> <span class="k">def</span> <span class="nf">gte_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">GTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.gte_sql-2921"><a href="#Generator.gte_sql-2921"><span class="linenos">2921</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;=&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gte_sql-2934"><a href="#Generator.gte_sql-2934"><span class="linenos">2934</span></a> <span class="k">def</span> <span class="nf">gte_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">GTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.gte_sql-2935"><a href="#Generator.gte_sql-2935"><span class="linenos">2935</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&gt;=&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15354,8 +15407,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.ilike_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilike_sql-2923"><a href="#Generator.ilike_sql-2923"><span class="linenos">2923</span></a> <span class="k">def</span> <span class="nf">ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.ilike_sql-2924"><a href="#Generator.ilike_sql-2924"><span class="linenos">2924</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilike_sql-2937"><a href="#Generator.ilike_sql-2937"><span class="linenos">2937</span></a> <span class="k">def</span> <span class="nf">ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.ilike_sql-2938"><a href="#Generator.ilike_sql-2938"><span class="linenos">2938</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15373,8 +15426,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.ilikeany_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilikeany_sql-2926"><a href="#Generator.ilikeany_sql-2926"><span class="linenos">2926</span></a> <span class="k">def</span> <span class="nf">ilikeany_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">ILikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.ilikeany_sql-2927"><a href="#Generator.ilikeany_sql-2927"><span class="linenos">2927</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilikeany_sql-2940"><a href="#Generator.ilikeany_sql-2940"><span class="linenos">2940</span></a> <span class="k">def</span> <span class="nf">ilikeany_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">ILikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.ilikeany_sql-2941"><a href="#Generator.ilikeany_sql-2941"><span class="linenos">2941</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;ILIKE ANY&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15392,12 +15445,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.is_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.is_sql-2929"><a href="#Generator.is_sql-2929"><span class="linenos">2929</span></a> <span class="k">def</span> <span class="nf">is_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">Is</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.is_sql-2930"><a href="#Generator.is_sql-2930"><span class="linenos">2930</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
-</span><span id="Generator.is_sql-2931"><a href="#Generator.is_sql-2931"><span class="linenos">2931</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.is_sql-2932"><a href="#Generator.is_sql-2932"><span class="linenos">2932</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.is_sql-2933"><a href="#Generator.is_sql-2933"><span class="linenos">2933</span></a> <span class="p">)</span>
-</span><span id="Generator.is_sql-2934"><a href="#Generator.is_sql-2934"><span class="linenos">2934</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.is_sql-2943"><a href="#Generator.is_sql-2943"><span class="linenos">2943</span></a> <span class="k">def</span> <span class="nf">is_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">Is</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.is_sql-2944"><a href="#Generator.is_sql-2944"><span class="linenos">2944</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">IS_BOOL_ALLOWED</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">):</span>
+</span><span id="Generator.is_sql-2945"><a href="#Generator.is_sql-2945"><span class="linenos">2945</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.is_sql-2946"><a href="#Generator.is_sql-2946"><span class="linenos">2946</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.is_sql-2947"><a href="#Generator.is_sql-2947"><span class="linenos">2947</span></a> <span class="p">)</span>
+</span><span id="Generator.is_sql-2948"><a href="#Generator.is_sql-2948"><span class="linenos">2948</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15415,8 +15468,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.like_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.like_sql-2936"><a href="#Generator.like_sql-2936"><span class="linenos">2936</span></a> <span class="k">def</span> <span class="nf">like_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">Like</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.like_sql-2937"><a href="#Generator.like_sql-2937"><span class="linenos">2937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.like_sql-2950"><a href="#Generator.like_sql-2950"><span class="linenos">2950</span></a> <span class="k">def</span> <span class="nf">like_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">Like</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.like_sql-2951"><a href="#Generator.like_sql-2951"><span class="linenos">2951</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15434,8 +15487,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.likeany_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeany_sql-2939"><a href="#Generator.likeany_sql-2939"><span class="linenos">2939</span></a> <span class="k">def</span> <span class="nf">likeany_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">LikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.likeany_sql-2940"><a href="#Generator.likeany_sql-2940"><span class="linenos">2940</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeany_sql-2953"><a href="#Generator.likeany_sql-2953"><span class="linenos">2953</span></a> <span class="k">def</span> <span class="nf">likeany_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">LikeAny</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.likeany_sql-2954"><a href="#Generator.likeany_sql-2954"><span class="linenos">2954</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;LIKE ANY&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15453,8 +15506,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.similarto_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.similarto_sql-2942"><a href="#Generator.similarto_sql-2942"><span class="linenos">2942</span></a> <span class="k">def</span> <span class="nf">similarto_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">SimilarTo</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.similarto_sql-2943"><a href="#Generator.similarto_sql-2943"><span class="linenos">2943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.similarto_sql-2956"><a href="#Generator.similarto_sql-2956"><span class="linenos">2956</span></a> <span class="k">def</span> <span class="nf">similarto_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">SimilarTo</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.similarto_sql-2957"><a href="#Generator.similarto_sql-2957"><span class="linenos">2957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15472,8 +15525,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lt_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lt_sql-2945"><a href="#Generator.lt_sql-2945"><span class="linenos">2945</span></a> <span class="k">def</span> <span class="nf">lt_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">LT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lt_sql-2946"><a href="#Generator.lt_sql-2946"><span class="linenos">2946</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lt_sql-2959"><a href="#Generator.lt_sql-2959"><span class="linenos">2959</span></a> <span class="k">def</span> <span class="nf">lt_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">LT</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lt_sql-2960"><a href="#Generator.lt_sql-2960"><span class="linenos">2960</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15491,8 +15544,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lte_sql-2948"><a href="#Generator.lte_sql-2948"><span class="linenos">2948</span></a> <span class="k">def</span> <span class="nf">lte_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">LTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lte_sql-2949"><a href="#Generator.lte_sql-2949"><span class="linenos">2949</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;=&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lte_sql-2962"><a href="#Generator.lte_sql-2962"><span class="linenos">2962</span></a> <span class="k">def</span> <span class="nf">lte_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">LTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lte_sql-2963"><a href="#Generator.lte_sql-2963"><span class="linenos">2963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;=&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15510,8 +15563,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.mod_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mod_sql-2951"><a href="#Generator.mod_sql-2951"><span class="linenos">2951</span></a> <span class="k">def</span> <span class="nf">mod_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">Mod</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mod_sql-2952"><a href="#Generator.mod_sql-2952"><span class="linenos">2952</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.mod_sql-2965"><a href="#Generator.mod_sql-2965"><span class="linenos">2965</span></a> <span class="k">def</span> <span class="nf">mod_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">Mod</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mod_sql-2966"><a href="#Generator.mod_sql-2966"><span class="linenos">2966</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;%&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15529,8 +15582,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.mul_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mul_sql-2954"><a href="#Generator.mul_sql-2954"><span class="linenos">2954</span></a> <span class="k">def</span> <span class="nf">mul_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">Mul</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.mul_sql-2955"><a href="#Generator.mul_sql-2955"><span class="linenos">2955</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.mul_sql-2968"><a href="#Generator.mul_sql-2968"><span class="linenos">2968</span></a> <span class="k">def</span> <span class="nf">mul_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">Mul</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.mul_sql-2969"><a href="#Generator.mul_sql-2969"><span class="linenos">2969</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15548,8 +15601,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.neq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neq_sql-2957"><a href="#Generator.neq_sql-2957"><span class="linenos">2957</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.neq_sql-2958"><a href="#Generator.neq_sql-2958"><span class="linenos">2958</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neq_sql-2971"><a href="#Generator.neq_sql-2971"><span class="linenos">2971</span></a> <span class="k">def</span> <span class="nf">neq_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">NEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.neq_sql-2972"><a href="#Generator.neq_sql-2972"><span class="linenos">2972</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15567,8 +15620,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.nullsafeeq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeeq_sql-2960"><a href="#Generator.nullsafeeq_sql-2960"><span class="linenos">2960</span></a> <span class="k">def</span> <span class="nf">nullsafeeq_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">NullSafeEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.nullsafeeq_sql-2961"><a href="#Generator.nullsafeeq_sql-2961"><span class="linenos">2961</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS NOT DISTINCT FROM&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeeq_sql-2974"><a href="#Generator.nullsafeeq_sql-2974"><span class="linenos">2974</span></a> <span class="k">def</span> <span class="nf">nullsafeeq_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">NullSafeEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.nullsafeeq_sql-2975"><a href="#Generator.nullsafeeq_sql-2975"><span class="linenos">2975</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS NOT DISTINCT FROM&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15586,8 +15639,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.nullsafeneq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeneq_sql-2963"><a href="#Generator.nullsafeneq_sql-2963"><span class="linenos">2963</span></a> <span class="k">def</span> <span class="nf">nullsafeneq_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">NullSafeNEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.nullsafeneq_sql-2964"><a href="#Generator.nullsafeneq_sql-2964"><span class="linenos">2964</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS DISTINCT FROM&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeneq_sql-2977"><a href="#Generator.nullsafeneq_sql-2977"><span class="linenos">2977</span></a> <span class="k">def</span> <span class="nf">nullsafeneq_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">NullSafeNEQ</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.nullsafeneq_sql-2978"><a href="#Generator.nullsafeneq_sql-2978"><span class="linenos">2978</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;IS DISTINCT FROM&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15605,8 +15658,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.or_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.or_sql-2966"><a href="#Generator.or_sql-2966"><span class="linenos">2966</span></a> <span class="k">def</span> <span class="nf">or_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">Or</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.or_sql-2967"><a href="#Generator.or_sql-2967"><span class="linenos">2967</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OR&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.or_sql-2980"><a href="#Generator.or_sql-2980"><span class="linenos">2980</span></a> <span class="k">def</span> <span class="nf">or_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">Or</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.or_sql-2981"><a href="#Generator.or_sql-2981"><span class="linenos">2981</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;OR&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15624,8 +15677,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.slice_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.slice_sql-2969"><a href="#Generator.slice_sql-2969"><span class="linenos">2969</span></a> <span class="k">def</span> <span class="nf">slice_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">Slice</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.slice_sql-2970"><a href="#Generator.slice_sql-2970"><span class="linenos">2970</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.slice_sql-2983"><a href="#Generator.slice_sql-2983"><span class="linenos">2983</span></a> <span class="k">def</span> <span class="nf">slice_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">Slice</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.slice_sql-2984"><a href="#Generator.slice_sql-2984"><span class="linenos">2984</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15643,8 +15696,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.sub_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sub_sql-2972"><a href="#Generator.sub_sql-2972"><span class="linenos">2972</span></a> <span class="k">def</span> <span class="nf">sub_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">Sub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.sub_sql-2973"><a href="#Generator.sub_sql-2973"><span class="linenos">2973</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</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="Generator.sub_sql-2986"><a href="#Generator.sub_sql-2986"><span class="linenos">2986</span></a> <span class="k">def</span> <span class="nf">sub_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">Sub</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.sub_sql-2987"><a href="#Generator.sub_sql-2987"><span class="linenos">2987</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15662,8 +15715,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.trycast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trycast_sql-2975"><a href="#Generator.trycast_sql-2975"><span class="linenos">2975</span></a> <span class="k">def</span> <span class="nf">trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.trycast_sql-2976"><a href="#Generator.trycast_sql-2976"><span class="linenos">2976</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trycast_sql-2989"><a href="#Generator.trycast_sql-2989"><span class="linenos">2989</span></a> <span class="k">def</span> <span class="nf">trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.trycast_sql-2990"><a href="#Generator.trycast_sql-2990"><span class="linenos">2990</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">safe_prefix</span><span class="o">=</span><span class="s2">&quot;TRY_&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -15681,14 +15734,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.log_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.log_sql-2978"><a href="#Generator.log_sql-2978"><span class="linenos">2978</span></a> <span class="k">def</span> <span class="nf">log_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">Log</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.log_sql-2979"><a href="#Generator.log_sql-2979"><span class="linenos">2979</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.log_sql-2980"><a href="#Generator.log_sql-2980"><span class="linenos">2980</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="Generator.log_sql-2981"><a href="#Generator.log_sql-2981"><span class="linenos">2981</span></a>
-</span><span id="Generator.log_sql-2982"><a href="#Generator.log_sql-2982"><span class="linenos">2982</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
-</span><span id="Generator.log_sql-2983"><a href="#Generator.log_sql-2983"><span class="linenos">2983</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span><span class="p">,</span> <span class="n">this</span>
-</span><span id="Generator.log_sql-2984"><a href="#Generator.log_sql-2984"><span class="linenos">2984</span></a>
-</span><span id="Generator.log_sql-2985"><a href="#Generator.log_sql-2985"><span class="linenos">2985</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;LOG&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.log_sql-2992"><a href="#Generator.log_sql-2992"><span class="linenos">2992</span></a> <span class="k">def</span> <span class="nf">log_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">Log</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.log_sql-2993"><a href="#Generator.log_sql-2993"><span class="linenos">2993</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.log_sql-2994"><a href="#Generator.log_sql-2994"><span class="linenos">2994</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Generator.log_sql-2995"><a href="#Generator.log_sql-2995"><span class="linenos">2995</span></a>
+</span><span id="Generator.log_sql-2996"><a href="#Generator.log_sql-2996"><span class="linenos">2996</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
+</span><span id="Generator.log_sql-2997"><a href="#Generator.log_sql-2997"><span class="linenos">2997</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span><span class="p">,</span> <span class="n">this</span>
+</span><span id="Generator.log_sql-2998"><a href="#Generator.log_sql-2998"><span class="linenos">2998</span></a>
+</span><span id="Generator.log_sql-2999"><a href="#Generator.log_sql-2999"><span class="linenos">2999</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;LOG&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">expr</span><span class="p">)</span>
</span></pre></div>
@@ -15706,12 +15759,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.use_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.use_sql-2987"><a href="#Generator.use_sql-2987"><span class="linenos">2987</span></a> <span class="k">def</span> <span class="nf">use_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">Use</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.use_sql-2988"><a href="#Generator.use_sql-2988"><span class="linenos">2988</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.use_sql-2989"><a href="#Generator.use_sql-2989"><span class="linenos">2989</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.use_sql-2990"><a href="#Generator.use_sql-2990"><span class="linenos">2990</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.use_sql-2991"><a href="#Generator.use_sql-2991"><span class="linenos">2991</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.use_sql-2992"><a href="#Generator.use_sql-2992"><span class="linenos">2992</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USE</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.use_sql-3001"><a href="#Generator.use_sql-3001"><span class="linenos">3001</span></a> <span class="k">def</span> <span class="nf">use_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">Use</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.use_sql-3002"><a href="#Generator.use_sql-3002"><span class="linenos">3002</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.use_sql-3003"><a href="#Generator.use_sql-3003"><span class="linenos">3003</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.use_sql-3004"><a href="#Generator.use_sql-3004"><span class="linenos">3004</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.use_sql-3005"><a href="#Generator.use_sql-3005"><span class="linenos">3005</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.use_sql-3006"><a href="#Generator.use_sql-3006"><span class="linenos">3006</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USE</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15729,9 +15782,9 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.binary"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.binary-2994"><a href="#Generator.binary-2994"><span class="linenos">2994</span></a> <span class="k">def</span> <span class="nf">binary</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">Binary</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.binary-2995"><a href="#Generator.binary-2995"><span class="linenos">2995</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Generator.binary-2996"><a href="#Generator.binary-2996"><span class="linenos">2996</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.binary-3008"><a href="#Generator.binary-3008"><span class="linenos">3008</span></a> <span class="k">def</span> <span class="nf">binary</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">Binary</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.binary-3009"><a href="#Generator.binary-3009"><span class="linenos">3009</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="n">op</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Generator.binary-3010"><a href="#Generator.binary-3010"><span class="linenos">3010</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15749,24 +15802,24 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.function_fallback_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.function_fallback_sql-2998"><a href="#Generator.function_fallback_sql-2998"><span class="linenos">2998</span></a> <span class="k">def</span> <span class="nf">function_fallback_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">Func</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-2999"><a href="#Generator.function_fallback_sql-2999"><span class="linenos">2999</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.function_fallback_sql-3000"><a href="#Generator.function_fallback_sql-3000"><span class="linenos">3000</span></a>
-</span><span id="Generator.function_fallback_sql-3001"><a href="#Generator.function_fallback_sql-3001"><span class="linenos">3001</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-3002"><a href="#Generator.function_fallback_sql-3002"><span class="linenos">3002</span></a> <span class="n">arg_value</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="n">key</span><span class="p">)</span>
-</span><span id="Generator.function_fallback_sql-3003"><a href="#Generator.function_fallback_sql-3003"><span class="linenos">3003</span></a>
-</span><span id="Generator.function_fallback_sql-3004"><a href="#Generator.function_fallback_sql-3004"><span class="linenos">3004</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="Generator.function_fallback_sql-3005"><a href="#Generator.function_fallback_sql-3005"><span class="linenos">3005</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">arg_value</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-3006"><a href="#Generator.function_fallback_sql-3006"><span class="linenos">3006</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Generator.function_fallback_sql-3007"><a href="#Generator.function_fallback_sql-3007"><span class="linenos">3007</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-3008"><a href="#Generator.function_fallback_sql-3008"><span class="linenos">3008</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_value</span><span class="p">)</span>
-</span><span id="Generator.function_fallback_sql-3009"><a href="#Generator.function_fallback_sql-3009"><span class="linenos">3009</span></a>
-</span><span id="Generator.function_fallback_sql-3010"><a href="#Generator.function_fallback_sql-3010"><span class="linenos">3010</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-3011"><a href="#Generator.function_fallback_sql-3011"><span class="linenos">3011</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
-</span><span id="Generator.function_fallback_sql-3012"><a href="#Generator.function_fallback_sql-3012"><span class="linenos">3012</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-3013"><a href="#Generator.function_fallback_sql-3013"><span class="linenos">3013</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.function_fallback_sql-3012"><a href="#Generator.function_fallback_sql-3012"><span class="linenos">3012</span></a> <span class="k">def</span> <span class="nf">function_fallback_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">Func</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-3013"><a href="#Generator.function_fallback_sql-3013"><span class="linenos">3013</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Generator.function_fallback_sql-3014"><a href="#Generator.function_fallback_sql-3014"><span class="linenos">3014</span></a>
-</span><span id="Generator.function_fallback_sql-3015"><a href="#Generator.function_fallback_sql-3015"><span class="linenos">3015</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">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Generator.function_fallback_sql-3015"><a href="#Generator.function_fallback_sql-3015"><span class="linenos">3015</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-3016"><a href="#Generator.function_fallback_sql-3016"><span class="linenos">3016</span></a> <span class="n">arg_value</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="n">key</span><span class="p">)</span>
+</span><span id="Generator.function_fallback_sql-3017"><a href="#Generator.function_fallback_sql-3017"><span class="linenos">3017</span></a>
+</span><span id="Generator.function_fallback_sql-3018"><a href="#Generator.function_fallback_sql-3018"><span class="linenos">3018</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="Generator.function_fallback_sql-3019"><a href="#Generator.function_fallback_sql-3019"><span class="linenos">3019</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">arg_value</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-3020"><a href="#Generator.function_fallback_sql-3020"><span class="linenos">3020</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Generator.function_fallback_sql-3021"><a href="#Generator.function_fallback_sql-3021"><span class="linenos">3021</span></a> <span class="k">elif</span> <span class="n">arg_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-3022"><a href="#Generator.function_fallback_sql-3022"><span class="linenos">3022</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg_value</span><span class="p">)</span>
+</span><span id="Generator.function_fallback_sql-3023"><a href="#Generator.function_fallback_sql-3023"><span class="linenos">3023</span></a>
+</span><span id="Generator.function_fallback_sql-3024"><a href="#Generator.function_fallback_sql-3024"><span class="linenos">3024</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-3025"><a href="#Generator.function_fallback_sql-3025"><span class="linenos">3025</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator.function_fallback_sql-3026"><a href="#Generator.function_fallback_sql-3026"><span class="linenos">3026</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-3027"><a href="#Generator.function_fallback_sql-3027"><span class="linenos">3027</span></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">_meta</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">))</span> <span class="ow">or</span> <span class="n">expression</span><span class="o">.</span><span class="n">sql_name</span><span class="p">()</span>
+</span><span id="Generator.function_fallback_sql-3028"><a href="#Generator.function_fallback_sql-3028"><span class="linenos">3028</span></a>
+</span><span id="Generator.function_fallback_sql-3029"><a href="#Generator.function_fallback_sql-3029"><span class="linenos">3029</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">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -15784,14 +15837,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.func-3017"><a href="#Generator.func-3017"><span class="linenos">3017</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
-</span><span id="Generator.func-3018"><a href="#Generator.func-3018"><span class="linenos">3018</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.func-3019"><a href="#Generator.func-3019"><span class="linenos">3019</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Generator.func-3020"><a href="#Generator.func-3020"><span class="linenos">3020</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
-</span><span id="Generator.func-3021"><a href="#Generator.func-3021"><span class="linenos">3021</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
-</span><span id="Generator.func-3022"><a href="#Generator.func-3022"><span class="linenos">3022</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
-</span><span id="Generator.func-3023"><a href="#Generator.func-3023"><span class="linenos">3023</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.func-3024"><a href="#Generator.func-3024"><span class="linenos">3024</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</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="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.func-3031"><a href="#Generator.func-3031"><span class="linenos">3031</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span>
+</span><span id="Generator.func-3032"><a href="#Generator.func-3032"><span class="linenos">3032</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.func-3033"><a href="#Generator.func-3033"><span class="linenos">3033</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Generator.func-3034"><a href="#Generator.func-3034"><span class="linenos">3034</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">],</span>
+</span><span id="Generator.func-3035"><a href="#Generator.func-3035"><span class="linenos">3035</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span>
+</span><span id="Generator.func-3036"><a href="#Generator.func-3036"><span class="linenos">3036</span></a> <span class="n">suffix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;)&quot;</span><span class="p">,</span>
+</span><span id="Generator.func-3037"><a href="#Generator.func-3037"><span class="linenos">3037</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.func-3038"><a href="#Generator.func-3038"><span class="linenos">3038</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize_func</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="si">}{</span><span class="n">prefix</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="o">*</span><span class="n">args</span><span class="p">)</span><span class="si">}{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15809,11 +15862,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.format_args"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_args-3026"><a href="#Generator.format_args-3026"><span class="linenos">3026</span></a> <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.format_args-3027"><a href="#Generator.format_args-3027"><span class="linenos">3027</span></a> <span class="n">arg_sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Generator.format_args-3028"><a href="#Generator.format_args-3028"><span class="linenos">3028</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
-</span><span id="Generator.format_args-3029"><a href="#Generator.format_args-3029"><span class="linenos">3029</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;,</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.format_args-3030"><a href="#Generator.format_args-3030"><span class="linenos">3030</span></a> <span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_args-3040"><a href="#Generator.format_args-3040"><span class="linenos">3040</span></a> <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.format_args-3041"><a href="#Generator.format_args-3041"><span class="linenos">3041</span></a> <span class="n">arg_sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Generator.format_args-3042"><a href="#Generator.format_args-3042"><span class="linenos">3042</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">text_width</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_text_width</span><span class="p">:</span>
+</span><span id="Generator.format_args-3043"><a href="#Generator.format_args-3043"><span class="linenos">3043</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;,</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.format_args-3044"><a href="#Generator.format_args-3044"><span class="linenos">3044</span></a> <span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg_sqls</span><span class="p">)</span>
</span></pre></div>
@@ -15831,8 +15884,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.text_width"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.text_width-3032"><a href="#Generator.text_width-3032"><span class="linenos">3032</span></a> <span class="k">def</span> <span class="nf">text_width</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="Generator.text_width-3033"><a href="#Generator.text_width-3033"><span class="linenos">3033</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.text_width-3046"><a href="#Generator.text_width-3046"><span class="linenos">3046</span></a> <span class="k">def</span> <span class="nf">text_width</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="Generator.text_width-3047"><a href="#Generator.text_width-3047"><span class="linenos">3047</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -15850,12 +15903,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.format_time"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_time-3035"><a href="#Generator.format_time-3035"><span class="linenos">3035</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Generator.format_time-3036"><a href="#Generator.format_time-3036"><span class="linenos">3036</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Generator.format_time-3037"><a href="#Generator.format_time-3037"><span class="linenos">3037</span></a> <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;format&quot;</span><span class="p">),</span>
-</span><span id="Generator.format_time-3038"><a href="#Generator.format_time-3038"><span class="linenos">3038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span>
-</span><span id="Generator.format_time-3039"><a href="#Generator.format_time-3039"><span class="linenos">3039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span><span class="p">,</span>
-</span><span id="Generator.format_time-3040"><a href="#Generator.format_time-3040"><span class="linenos">3040</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_time-3049"><a href="#Generator.format_time-3049"><span class="linenos">3049</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Generator.format_time-3050"><a href="#Generator.format_time-3050"><span class="linenos">3050</span></a> <span class="k">return</span> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Generator.format_time-3051"><a href="#Generator.format_time-3051"><span class="linenos">3051</span></a> <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;format&quot;</span><span class="p">),</span>
+</span><span id="Generator.format_time-3052"><a href="#Generator.format_time-3052"><span class="linenos">3052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_MAPPING</span><span class="p">,</span>
+</span><span id="Generator.format_time-3053"><a href="#Generator.format_time-3053"><span class="linenos">3053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INVERSE_TIME_TRIE</span><span class="p">,</span>
+</span><span id="Generator.format_time-3054"><a href="#Generator.format_time-3054"><span class="linenos">3054</span></a> <span class="p">)</span>
</span></pre></div>
@@ -15873,51 +15926,51 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.expressions"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.expressions-3042"><a href="#Generator.expressions-3042"><span class="linenos">3042</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="Generator.expressions-3043"><a href="#Generator.expressions-3043"><span class="linenos">3043</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.expressions-3044"><a href="#Generator.expressions-3044"><span class="linenos">3044</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.expressions-3045"><a href="#Generator.expressions-3045"><span class="linenos">3045</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.expressions-3046"><a href="#Generator.expressions-3046"><span class="linenos">3046</span></a> <span class="n">sqls</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator.expressions-3047"><a href="#Generator.expressions-3047"><span class="linenos">3047</span></a> <span class="n">flat</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.expressions-3048"><a href="#Generator.expressions-3048"><span class="linenos">3048</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Generator.expressions-3049"><a href="#Generator.expressions-3049"><span class="linenos">3049</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.expressions-3050"><a href="#Generator.expressions-3050"><span class="linenos">3050</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
-</span><span id="Generator.expressions-3051"><a href="#Generator.expressions-3051"><span class="linenos">3051</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.expressions-3052"><a href="#Generator.expressions-3052"><span class="linenos">3052</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.expressions-3053"><a href="#Generator.expressions-3053"><span class="linenos">3053</span></a> <span class="n">expressions</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="n">key</span> <span class="ow">or</span> <span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="n">sqls</span>
-</span><span id="Generator.expressions-3054"><a href="#Generator.expressions-3054"><span class="linenos">3054</span></a>
-</span><span id="Generator.expressions-3055"><a href="#Generator.expressions-3055"><span class="linenos">3055</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Generator.expressions-3056"><a href="#Generator.expressions-3056"><span class="linenos">3056</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.expressions-3057"><a href="#Generator.expressions-3057"><span class="linenos">3057</span></a>
-</span><span id="Generator.expressions-3058"><a href="#Generator.expressions-3058"><span class="linenos">3058</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator.expressions-3059"><a href="#Generator.expressions-3059"><span class="linenos">3059</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Generator.expressions-3060"><a href="#Generator.expressions-3060"><span class="linenos">3060</span></a>
-</span><span id="Generator.expressions-3061"><a href="#Generator.expressions-3061"><span class="linenos">3061</span></a> <span class="n">num_sqls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator.expressions-3062"><a href="#Generator.expressions-3062"><span class="linenos">3062</span></a>
-</span><span id="Generator.expressions-3063"><a href="#Generator.expressions-3063"><span class="linenos">3063</span></a> <span class="c1"># These are calculated once in case we have the leading_comma / pretty option set, correspondingly</span>
-</span><span id="Generator.expressions-3064"><a href="#Generator.expressions-3064"><span class="linenos">3064</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span>
-</span><span id="Generator.expressions-3065"><a href="#Generator.expressions-3065"><span class="linenos">3065</span></a> <span class="n">stripped_sep</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Generator.expressions-3066"><a href="#Generator.expressions-3066"><span class="linenos">3066</span></a>
-</span><span id="Generator.expressions-3067"><a href="#Generator.expressions-3067"><span class="linenos">3067</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.expressions-3068"><a href="#Generator.expressions-3068"><span class="linenos">3068</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Generator.expressions-3069"><a href="#Generator.expressions-3069"><span class="linenos">3069</span></a> <span class="n">sql</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">e</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.expressions-3070"><a href="#Generator.expressions-3070"><span class="linenos">3070</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
-</span><span id="Generator.expressions-3071"><a href="#Generator.expressions-3071"><span class="linenos">3071</span></a> <span class="k">continue</span>
-</span><span id="Generator.expressions-3072"><a href="#Generator.expressions-3072"><span class="linenos">3072</span></a>
-</span><span id="Generator.expressions-3073"><a href="#Generator.expressions-3073"><span class="linenos">3073</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.expressions-3056"><a href="#Generator.expressions-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
+</span><span id="Generator.expressions-3057"><a href="#Generator.expressions-3057"><span class="linenos">3057</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.expressions-3058"><a href="#Generator.expressions-3058"><span class="linenos">3058</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.expressions-3059"><a href="#Generator.expressions-3059"><span class="linenos">3059</span></a> <span class="n">key</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.expressions-3060"><a href="#Generator.expressions-3060"><span class="linenos">3060</span></a> <span class="n">sqls</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator.expressions-3061"><a href="#Generator.expressions-3061"><span class="linenos">3061</span></a> <span class="n">flat</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.expressions-3062"><a href="#Generator.expressions-3062"><span class="linenos">3062</span></a> <span class="n">indent</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Generator.expressions-3063"><a href="#Generator.expressions-3063"><span class="linenos">3063</span></a> <span class="n">skip_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.expressions-3064"><a href="#Generator.expressions-3064"><span class="linenos">3064</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="p">,</span>
+</span><span id="Generator.expressions-3065"><a href="#Generator.expressions-3065"><span class="linenos">3065</span></a> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.expressions-3066"><a href="#Generator.expressions-3066"><span class="linenos">3066</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.expressions-3067"><a href="#Generator.expressions-3067"><span class="linenos">3067</span></a> <span class="n">expressions</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="n">key</span> <span class="ow">or</span> <span class="s2">&quot;expressions&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="n">sqls</span>
+</span><span id="Generator.expressions-3068"><a href="#Generator.expressions-3068"><span class="linenos">3068</span></a>
+</span><span id="Generator.expressions-3069"><a href="#Generator.expressions-3069"><span class="linenos">3069</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Generator.expressions-3070"><a href="#Generator.expressions-3070"><span class="linenos">3070</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.expressions-3071"><a href="#Generator.expressions-3071"><span class="linenos">3071</span></a>
+</span><span id="Generator.expressions-3072"><a href="#Generator.expressions-3072"><span class="linenos">3072</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator.expressions-3073"><a href="#Generator.expressions-3073"><span class="linenos">3073</span></a> <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sql</span> <span class="k">for</span> <span class="n">sql</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="Generator.expressions-3074"><a href="#Generator.expressions-3074"><span class="linenos">3074</span></a>
-</span><span id="Generator.expressions-3075"><a href="#Generator.expressions-3075"><span class="linenos">3075</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
-</span><span id="Generator.expressions-3076"><a href="#Generator.expressions-3076"><span class="linenos">3076</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span><span class="p">:</span>
-</span><span id="Generator.expressions-3077"><a href="#Generator.expressions-3077"><span class="linenos">3077</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">pad</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.expressions-3078"><a href="#Generator.expressions-3078"><span class="linenos">3078</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.expressions-3079"><a href="#Generator.expressions-3079"><span class="linenos">3079</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Generator.expressions-3080"><a href="#Generator.expressions-3080"><span class="linenos">3080</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">stripped_sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.expressions-3081"><a href="#Generator.expressions-3081"><span class="linenos">3081</span></a> <span class="p">)</span>
-</span><span id="Generator.expressions-3082"><a href="#Generator.expressions-3082"><span class="linenos">3082</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.expressions-3083"><a href="#Generator.expressions-3083"><span class="linenos">3083</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.expressions-3084"><a href="#Generator.expressions-3084"><span class="linenos">3084</span></a>
-</span><span id="Generator.expressions-3085"><a href="#Generator.expressions-3085"><span class="linenos">3085</span></a> <span class="n">result_sql</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span>
-</span><span id="Generator.expressions-3086"><a href="#Generator.expressions-3086"><span class="linenos">3086</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
+</span><span id="Generator.expressions-3075"><a href="#Generator.expressions-3075"><span class="linenos">3075</span></a> <span class="n">num_sqls</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator.expressions-3076"><a href="#Generator.expressions-3076"><span class="linenos">3076</span></a>
+</span><span id="Generator.expressions-3077"><a href="#Generator.expressions-3077"><span class="linenos">3077</span></a> <span class="c1"># These are calculated once in case we have the leading_comma / pretty option set, correspondingly</span>
+</span><span id="Generator.expressions-3078"><a href="#Generator.expressions-3078"><span class="linenos">3078</span></a> <span class="n">pad</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span>
+</span><span id="Generator.expressions-3079"><a href="#Generator.expressions-3079"><span class="linenos">3079</span></a> <span class="n">stripped_sep</span> <span class="o">=</span> <span class="n">sep</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Generator.expressions-3080"><a href="#Generator.expressions-3080"><span class="linenos">3080</span></a>
+</span><span id="Generator.expressions-3081"><a href="#Generator.expressions-3081"><span class="linenos">3081</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.expressions-3082"><a href="#Generator.expressions-3082"><span class="linenos">3082</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Generator.expressions-3083"><a href="#Generator.expressions-3083"><span class="linenos">3083</span></a> <span class="n">sql</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">e</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.expressions-3084"><a href="#Generator.expressions-3084"><span class="linenos">3084</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
+</span><span id="Generator.expressions-3085"><a href="#Generator.expressions-3085"><span class="linenos">3085</span></a> <span class="k">continue</span>
+</span><span id="Generator.expressions-3086"><a href="#Generator.expressions-3086"><span class="linenos">3086</span></a>
+</span><span id="Generator.expressions-3087"><a href="#Generator.expressions-3087"><span class="linenos">3087</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.expressions-3088"><a href="#Generator.expressions-3088"><span class="linenos">3088</span></a>
+</span><span id="Generator.expressions-3089"><a href="#Generator.expressions-3089"><span class="linenos">3089</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
+</span><span id="Generator.expressions-3090"><a href="#Generator.expressions-3090"><span class="linenos">3090</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">leading_comma</span><span class="p">:</span>
+</span><span id="Generator.expressions-3091"><a href="#Generator.expressions-3091"><span class="linenos">3091</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">pad</span><span class="si">}{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.expressions-3092"><a href="#Generator.expressions-3092"><span class="linenos">3092</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.expressions-3093"><a href="#Generator.expressions-3093"><span class="linenos">3093</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Generator.expressions-3094"><a href="#Generator.expressions-3094"><span class="linenos">3094</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">stripped_sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">comments</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.expressions-3095"><a href="#Generator.expressions-3095"><span class="linenos">3095</span></a> <span class="p">)</span>
+</span><span id="Generator.expressions-3096"><a href="#Generator.expressions-3096"><span class="linenos">3096</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.expressions-3097"><a href="#Generator.expressions-3097"><span class="linenos">3097</span></a> <span class="n">result_sqls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">sql</span><span class="si">}{</span><span class="n">comments</span><span class="si">}{</span><span class="n">sep</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">num_sqls</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.expressions-3098"><a href="#Generator.expressions-3098"><span class="linenos">3098</span></a>
+</span><span id="Generator.expressions-3099"><a href="#Generator.expressions-3099"><span class="linenos">3099</span></a> <span class="n">result_sql</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_sqls</span><span class="p">)</span>
+</span><span id="Generator.expressions-3100"><a href="#Generator.expressions-3100"><span class="linenos">3100</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">result_sql</span><span class="p">,</span> <span class="n">skip_first</span><span class="o">=</span><span class="n">skip_first</span><span class="p">)</span> <span class="k">if</span> <span class="n">indent</span> <span class="k">else</span> <span class="n">result_sql</span>
</span></pre></div>
@@ -15935,12 +15988,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.op_expressions"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.op_expressions-3088"><a href="#Generator.op_expressions-3088"><span class="linenos">3088</span></a> <span class="k">def</span> <span class="nf">op_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
-</span><span id="Generator.op_expressions-3089"><a href="#Generator.op_expressions-3089"><span class="linenos">3089</span></a> <span class="n">flat</span> <span class="o">=</span> <span class="n">flat</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span>
-</span><span id="Generator.op_expressions-3090"><a href="#Generator.op_expressions-3090"><span class="linenos">3090</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">flat</span><span class="p">)</span>
-</span><span id="Generator.op_expressions-3091"><a href="#Generator.op_expressions-3091"><span class="linenos">3091</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator.op_expressions-3092"><a href="#Generator.op_expressions-3092"><span class="linenos">3092</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.op_expressions-3093"><a href="#Generator.op_expressions-3093"><span class="linenos">3093</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expressions_sql</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.op_expressions-3102"><a href="#Generator.op_expressions-3102"><span class="linenos">3102</span></a> <span class="k">def</span> <span class="nf">op_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">flat</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="nb">str</span><span class="p">:</span>
+</span><span id="Generator.op_expressions-3103"><a href="#Generator.op_expressions-3103"><span class="linenos">3103</span></a> <span class="n">flat</span> <span class="o">=</span> <span class="n">flat</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span>
+</span><span id="Generator.op_expressions-3104"><a href="#Generator.op_expressions-3104"><span class="linenos">3104</span></a> <span class="n">expressions_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="n">flat</span><span class="p">)</span>
+</span><span id="Generator.op_expressions-3105"><a href="#Generator.op_expressions-3105"><span class="linenos">3105</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator.op_expressions-3106"><a href="#Generator.op_expressions-3106"><span class="linenos">3106</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">op</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.op_expressions-3107"><a href="#Generator.op_expressions-3107"><span class="linenos">3107</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">expressions_sql</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="n">expressions_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -15958,11 +16011,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.naked_property"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.naked_property-3095"><a href="#Generator.naked_property-3095"><span class="linenos">3095</span></a> <span class="k">def</span> <span class="nf">naked_property</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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.naked_property-3096"><a href="#Generator.naked_property-3096"><span class="linenos">3096</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="Generator.naked_property-3097"><a href="#Generator.naked_property-3097"><span class="linenos">3097</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
-</span><span id="Generator.naked_property-3098"><a href="#Generator.naked_property-3098"><span class="linenos">3098</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.naked_property-3099"><a href="#Generator.naked_property-3099"><span class="linenos">3099</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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="Generator.naked_property-3109"><a href="#Generator.naked_property-3109"><span class="linenos">3109</span></a> <span class="k">def</span> <span class="nf">naked_property</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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.naked_property-3110"><a href="#Generator.naked_property-3110"><span class="linenos">3110</span></a> <span class="n">property_name</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">PROPERTY_TO_NAME</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="Generator.naked_property-3111"><a href="#Generator.naked_property-3111"><span class="linenos">3111</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="p">:</span>
+</span><span id="Generator.naked_property-3112"><a href="#Generator.naked_property-3112"><span class="linenos">3112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported property </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.naked_property-3113"><a href="#Generator.naked_property-3113"><span class="linenos">3113</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">property_name</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">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>
@@ -15980,12 +16033,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.set_operation"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_operation-3101"><a href="#Generator.set_operation-3101"><span class="linenos">3101</span></a> <span class="k">def</span> <span class="nf">set_operation</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">Union</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.set_operation-3102"><a href="#Generator.set_operation-3102"><span class="linenos">3102</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Generator.set_operation-3103"><a href="#Generator.set_operation-3103"><span class="linenos">3103</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
-</span><span id="Generator.set_operation-3104"><a href="#Generator.set_operation-3104"><span class="linenos">3104</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
-</span><span id="Generator.set_operation-3105"><a href="#Generator.set_operation-3105"><span class="linenos">3105</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.set_operation-3106"><a href="#Generator.set_operation-3106"><span class="linenos">3106</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_operation-3115"><a href="#Generator.set_operation-3115"><span class="linenos">3115</span></a> <span class="k">def</span> <span class="nf">set_operation</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">Union</span><span class="p">,</span> <span class="n">op</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.set_operation-3116"><a href="#Generator.set_operation-3116"><span class="linenos">3116</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maybe_comment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span> <span class="n">comments</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Generator.set_operation-3117"><a href="#Generator.set_operation-3117"><span class="linenos">3117</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">op</span><span class="p">)</span>
+</span><span id="Generator.set_operation-3118"><a href="#Generator.set_operation-3118"><span class="linenos">3118</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">query_modifiers</span><span class="p">(</span>
+</span><span id="Generator.set_operation-3119"><a href="#Generator.set_operation-3119"><span class="linenos">3119</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.set_operation-3120"><a href="#Generator.set_operation-3120"><span class="linenos">3120</span></a> <span class="p">)</span>
</span></pre></div>
@@ -16003,8 +16056,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.tag_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tag_sql-3108"><a href="#Generator.tag_sql-3108"><span class="linenos">3108</span></a> <span class="k">def</span> <span class="nf">tag_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">Tag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tag_sql-3109"><a href="#Generator.tag_sql-3109"><span class="linenos">3109</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</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="s1">&#39;prefix&#39;</span><span class="p">)</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="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}{</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="s1">&#39;postfix&#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="Generator.tag_sql-3122"><a href="#Generator.tag_sql-3122"><span class="linenos">3122</span></a> <span class="k">def</span> <span class="nf">tag_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">Tag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tag_sql-3123"><a href="#Generator.tag_sql-3123"><span class="linenos">3123</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</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="s1">&#39;prefix&#39;</span><span class="p">)</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="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}{</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="s1">&#39;postfix&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16022,8 +16075,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.token_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.token_sql-3111"><a href="#Generator.token_sql-3111"><span class="linenos">3111</span></a> <span class="k">def</span> <span class="nf">token_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.token_sql-3112"><a href="#Generator.token_sql-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">TOKEN_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">token_type</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.token_sql-3125"><a href="#Generator.token_sql-3125"><span class="linenos">3125</span></a> <span class="k">def</span> <span class="nf">token_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.token_sql-3126"><a href="#Generator.token_sql-3126"><span class="linenos">3126</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">TOKEN_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">token_type</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span></pre></div>
@@ -16041,13 +16094,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.userdefinedfunction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.userdefinedfunction_sql-3114"><a href="#Generator.userdefinedfunction_sql-3114"><span class="linenos">3114</span></a> <span class="k">def</span> <span class="nf">userdefinedfunction_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">UserDefinedFunction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.userdefinedfunction_sql-3115"><a href="#Generator.userdefinedfunction_sql-3115"><span class="linenos">3115</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.userdefinedfunction_sql-3116"><a href="#Generator.userdefinedfunction_sql-3116"><span class="linenos">3116</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.userdefinedfunction_sql-3117"><a href="#Generator.userdefinedfunction_sql-3117"><span class="linenos">3117</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.userdefinedfunction_sql-3118"><a href="#Generator.userdefinedfunction_sql-3118"><span class="linenos">3118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wrapped&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.userdefinedfunction_sql-3119"><a href="#Generator.userdefinedfunction_sql-3119"><span class="linenos">3119</span></a> <span class="p">)</span>
-</span><span id="Generator.userdefinedfunction_sql-3120"><a href="#Generator.userdefinedfunction_sql-3120"><span class="linenos">3120</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.userdefinedfunction_sql-3128"><a href="#Generator.userdefinedfunction_sql-3128"><span class="linenos">3128</span></a> <span class="k">def</span> <span class="nf">userdefinedfunction_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">UserDefinedFunction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.userdefinedfunction_sql-3129"><a href="#Generator.userdefinedfunction_sql-3129"><span class="linenos">3129</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.userdefinedfunction_sql-3130"><a href="#Generator.userdefinedfunction_sql-3130"><span class="linenos">3130</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.userdefinedfunction_sql-3131"><a href="#Generator.userdefinedfunction_sql-3131"><span class="linenos">3131</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.userdefinedfunction_sql-3132"><a href="#Generator.userdefinedfunction_sql-3132"><span class="linenos">3132</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;wrapped&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.userdefinedfunction_sql-3133"><a href="#Generator.userdefinedfunction_sql-3133"><span class="linenos">3133</span></a> <span class="p">)</span>
+</span><span id="Generator.userdefinedfunction_sql-3134"><a href="#Generator.userdefinedfunction_sql-3134"><span class="linenos">3134</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16065,10 +16118,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.joinhint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.joinhint_sql-3122"><a href="#Generator.joinhint_sql-3122"><span class="linenos">3122</span></a> <span class="k">def</span> <span class="nf">joinhint_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">JoinHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.joinhint_sql-3123"><a href="#Generator.joinhint_sql-3123"><span class="linenos">3123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.joinhint_sql-3124"><a href="#Generator.joinhint_sql-3124"><span class="linenos">3124</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.joinhint_sql-3125"><a href="#Generator.joinhint_sql-3125"><span class="linenos">3125</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.joinhint_sql-3136"><a href="#Generator.joinhint_sql-3136"><span class="linenos">3136</span></a> <span class="k">def</span> <span class="nf">joinhint_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">JoinHint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.joinhint_sql-3137"><a href="#Generator.joinhint_sql-3137"><span class="linenos">3137</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.joinhint_sql-3138"><a href="#Generator.joinhint_sql-3138"><span class="linenos">3138</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.joinhint_sql-3139"><a href="#Generator.joinhint_sql-3139"><span class="linenos">3139</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -16086,8 +16139,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.kwarg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.kwarg_sql-3127"><a href="#Generator.kwarg_sql-3127"><span class="linenos">3127</span></a> <span class="k">def</span> <span class="nf">kwarg_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">Kwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.kwarg_sql-3128"><a href="#Generator.kwarg_sql-3128"><span class="linenos">3128</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.kwarg_sql-3141"><a href="#Generator.kwarg_sql-3141"><span class="linenos">3141</span></a> <span class="k">def</span> <span class="nf">kwarg_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">Kwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.kwarg_sql-3142"><a href="#Generator.kwarg_sql-3142"><span class="linenos">3142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -16105,25 +16158,25 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.when_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.when_sql-3130"><a href="#Generator.when_sql-3130"><span class="linenos">3130</span></a> <span class="k">def</span> <span class="nf">when_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">When</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.when_sql-3131"><a href="#Generator.when_sql-3131"><span class="linenos">3131</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="s2">&quot;MATCHED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;matched&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;NOT MATCHED&quot;</span>
-</span><span id="Generator.when_sql-3132"><a href="#Generator.when_sql-3132"><span class="linenos">3132</span></a> <span class="n">source</span> <span class="o">=</span> <span class="s2">&quot; BY SOURCE&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">MATCHED_BY_SOURCE</span> <span class="ow">and</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;source&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.when_sql-3133"><a href="#Generator.when_sql-3133"><span class="linenos">3133</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
-</span><span id="Generator.when_sql-3134"><a href="#Generator.when_sql-3134"><span class="linenos">3134</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.when_sql-3135"><a href="#Generator.when_sql-3135"><span class="linenos">3135</span></a>
-</span><span id="Generator.when_sql-3136"><a href="#Generator.when_sql-3136"><span class="linenos">3136</span></a> <span class="n">then_expression</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;then&quot;</span><span class="p">)</span>
-</span><span id="Generator.when_sql-3137"><a href="#Generator.when_sql-3137"><span class="linenos">3137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">):</span>
-</span><span id="Generator.when_sql-3138"><a href="#Generator.when_sql-3138"><span class="linenos">3138</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT </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">then_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="Generator.when_sql-3139"><a href="#Generator.when_sql-3139"><span class="linenos">3139</span></a> <span class="k">if</span> <span class="s2">&quot;expression&quot;</span> <span class="ow">in</span> <span class="n">then_expression</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
-</span><span id="Generator.when_sql-3140"><a href="#Generator.when_sql-3140"><span class="linenos">3140</span></a> <span class="n">then</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; VALUES </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.when_sql-3141"><a href="#Generator.when_sql-3141"><span class="linenos">3141</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">):</span>
-</span><span id="Generator.when_sql-3142"><a href="#Generator.when_sql-3142"><span class="linenos">3142</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_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;expressions&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">):</span>
-</span><span id="Generator.when_sql-3143"><a href="#Generator.when_sql-3143"><span class="linenos">3143</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.when_sql-3144"><a href="#Generator.when_sql-3144"><span class="linenos">3144</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.when_sql-3145"><a href="#Generator.when_sql-3145"><span class="linenos">3145</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.when_sql-3146"><a href="#Generator.when_sql-3146"><span class="linenos">3146</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.when_sql-3147"><a href="#Generator.when_sql-3147"><span class="linenos">3147</span></a> <span class="n">then</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">then_expression</span><span class="p">)</span>
-</span><span id="Generator.when_sql-3148"><a href="#Generator.when_sql-3148"><span class="linenos">3148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="n">matched</span><span class="si">}{</span><span class="n">source</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2"> THEN </span><span class="si">{</span><span class="n">then</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.when_sql-3144"><a href="#Generator.when_sql-3144"><span class="linenos">3144</span></a> <span class="k">def</span> <span class="nf">when_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">When</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.when_sql-3145"><a href="#Generator.when_sql-3145"><span class="linenos">3145</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="s2">&quot;MATCHED&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;matched&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;NOT MATCHED&quot;</span>
+</span><span id="Generator.when_sql-3146"><a href="#Generator.when_sql-3146"><span class="linenos">3146</span></a> <span class="n">source</span> <span class="o">=</span> <span class="s2">&quot; BY SOURCE&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">MATCHED_BY_SOURCE</span> <span class="ow">and</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;source&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.when_sql-3147"><a href="#Generator.when_sql-3147"><span class="linenos">3147</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
+</span><span id="Generator.when_sql-3148"><a href="#Generator.when_sql-3148"><span class="linenos">3148</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AND </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.when_sql-3149"><a href="#Generator.when_sql-3149"><span class="linenos">3149</span></a>
+</span><span id="Generator.when_sql-3150"><a href="#Generator.when_sql-3150"><span class="linenos">3150</span></a> <span class="n">then_expression</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;then&quot;</span><span class="p">)</span>
+</span><span id="Generator.when_sql-3151"><a href="#Generator.when_sql-3151"><span class="linenos">3151</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">):</span>
+</span><span id="Generator.when_sql-3152"><a href="#Generator.when_sql-3152"><span class="linenos">3152</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;INSERT </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">then_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="Generator.when_sql-3153"><a href="#Generator.when_sql-3153"><span class="linenos">3153</span></a> <span class="k">if</span> <span class="s2">&quot;expression&quot;</span> <span class="ow">in</span> <span class="n">then_expression</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
+</span><span id="Generator.when_sql-3154"><a href="#Generator.when_sql-3154"><span class="linenos">3154</span></a> <span class="n">then</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; VALUES </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.when_sql-3155"><a href="#Generator.when_sql-3155"><span class="linenos">3155</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">):</span>
+</span><span id="Generator.when_sql-3156"><a href="#Generator.when_sql-3156"><span class="linenos">3156</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">then_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;expressions&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">):</span>
+</span><span id="Generator.when_sql-3157"><a href="#Generator.when_sql-3157"><span class="linenos">3157</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE </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">then_expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.when_sql-3158"><a href="#Generator.when_sql-3158"><span class="linenos">3158</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.when_sql-3159"><a href="#Generator.when_sql-3159"><span class="linenos">3159</span></a> <span class="n">then</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UPDATE SET </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">then_expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.when_sql-3160"><a href="#Generator.when_sql-3160"><span class="linenos">3160</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.when_sql-3161"><a href="#Generator.when_sql-3161"><span class="linenos">3161</span></a> <span class="n">then</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">then_expression</span><span class="p">)</span>
+</span><span id="Generator.when_sql-3162"><a href="#Generator.when_sql-3162"><span class="linenos">3162</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WHEN </span><span class="si">{</span><span class="n">matched</span><span class="si">}{</span><span class="n">source</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2"> THEN </span><span class="si">{</span><span class="n">then</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16141,23 +16194,23 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.merge_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.merge_sql-3150"><a href="#Generator.merge_sql-3150"><span class="linenos">3150</span></a> <span class="k">def</span> <span class="nf">merge_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">Merge</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.merge_sql-3151"><a href="#Generator.merge_sql-3151"><span class="linenos">3151</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.merge_sql-3152"><a href="#Generator.merge_sql-3152"><span class="linenos">3152</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.merge_sql-3153"><a href="#Generator.merge_sql-3153"><span class="linenos">3153</span></a>
-</span><span id="Generator.merge_sql-3154"><a href="#Generator.merge_sql-3154"><span class="linenos">3154</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</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;hints&quot;</span><span class="p">)</span>
-</span><span id="Generator.merge_sql-3155"><a href="#Generator.merge_sql-3155"><span class="linenos">3155</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
-</span><span id="Generator.merge_sql-3156"><a href="#Generator.merge_sql-3156"><span class="linenos">3156</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
-</span><span id="Generator.merge_sql-3157"><a href="#Generator.merge_sql-3157"><span class="linenos">3157</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.merge_sql-3158"><a href="#Generator.merge_sql-3158"><span class="linenos">3158</span></a>
-</span><span id="Generator.merge_sql-3159"><a href="#Generator.merge_sql-3159"><span class="linenos">3159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="Generator.merge_sql-3160"><a href="#Generator.merge_sql-3160"><span class="linenos">3160</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;USING </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;using&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.merge_sql-3161"><a href="#Generator.merge_sql-3161"><span class="linenos">3161</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON </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;on&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.merge_sql-3162"><a href="#Generator.merge_sql-3162"><span class="linenos">3162</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.merge_sql-3163"><a href="#Generator.merge_sql-3163"><span class="linenos">3163</span></a>
-</span><span id="Generator.merge_sql-3164"><a href="#Generator.merge_sql-3164"><span class="linenos">3164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
-</span><span id="Generator.merge_sql-3165"><a href="#Generator.merge_sql-3165"><span class="linenos">3165</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;MERGE INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.merge_sql-3166"><a href="#Generator.merge_sql-3166"><span class="linenos">3166</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.merge_sql-3164"><a href="#Generator.merge_sql-3164"><span class="linenos">3164</span></a> <span class="k">def</span> <span class="nf">merge_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">Merge</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.merge_sql-3165"><a href="#Generator.merge_sql-3165"><span class="linenos">3165</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.merge_sql-3166"><a href="#Generator.merge_sql-3166"><span class="linenos">3166</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.merge_sql-3167"><a href="#Generator.merge_sql-3167"><span class="linenos">3167</span></a>
+</span><span id="Generator.merge_sql-3168"><a href="#Generator.merge_sql-3168"><span class="linenos">3168</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="n">table</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;hints&quot;</span><span class="p">)</span>
+</span><span id="Generator.merge_sql-3169"><a href="#Generator.merge_sql-3169"><span class="linenos">3169</span></a> <span class="k">if</span> <span class="n">hints</span> <span class="ow">and</span> <span class="n">table</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">hints</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">):</span>
+</span><span id="Generator.merge_sql-3170"><a href="#Generator.merge_sql-3170"><span class="linenos">3170</span></a> <span class="c1"># T-SQL syntax is MERGE ... &lt;target_table&gt; [WITH (&lt;merge_hint&gt;)] [[AS] table_alias]</span>
+</span><span id="Generator.merge_sql-3171"><a href="#Generator.merge_sql-3171"><span class="linenos">3171</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </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">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;alias&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.merge_sql-3172"><a href="#Generator.merge_sql-3172"><span class="linenos">3172</span></a>
+</span><span id="Generator.merge_sql-3173"><a href="#Generator.merge_sql-3173"><span class="linenos">3173</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="Generator.merge_sql-3174"><a href="#Generator.merge_sql-3174"><span class="linenos">3174</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;USING </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;using&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.merge_sql-3175"><a href="#Generator.merge_sql-3175"><span class="linenos">3175</span></a> <span class="n">on</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;ON </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;on&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.merge_sql-3176"><a href="#Generator.merge_sql-3176"><span class="linenos">3176</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.merge_sql-3177"><a href="#Generator.merge_sql-3177"><span class="linenos">3177</span></a>
+</span><span id="Generator.merge_sql-3178"><a href="#Generator.merge_sql-3178"><span class="linenos">3178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepend_ctes</span><span class="p">(</span>
+</span><span id="Generator.merge_sql-3179"><a href="#Generator.merge_sql-3179"><span class="linenos">3179</span></a> <span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;MERGE INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">table_alias</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.merge_sql-3180"><a href="#Generator.merge_sql-3180"><span class="linenos">3180</span></a> <span class="p">)</span>
</span></pre></div>
@@ -16175,11 +16228,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.tochar_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tochar_sql-3168"><a href="#Generator.tochar_sql-3168"><span class="linenos">3168</span></a> <span class="k">def</span> <span class="nf">tochar_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">ToChar</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tochar_sql-3169"><a href="#Generator.tochar_sql-3169"><span class="linenos">3169</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">):</span>
-</span><span id="Generator.tochar_sql-3170"><a href="#Generator.tochar_sql-3170"><span class="linenos">3170</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Format argument unsupported for TO_CHAR/TO_VARCHAR function&quot;</span><span class="p">)</span>
-</span><span id="Generator.tochar_sql-3171"><a href="#Generator.tochar_sql-3171"><span class="linenos">3171</span></a>
-</span><span id="Generator.tochar_sql-3172"><a href="#Generator.tochar_sql-3172"><span class="linenos">3172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tochar_sql-3182"><a href="#Generator.tochar_sql-3182"><span class="linenos">3182</span></a> <span class="k">def</span> <span class="nf">tochar_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">ToChar</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tochar_sql-3183"><a href="#Generator.tochar_sql-3183"><span class="linenos">3183</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;format&quot;</span><span class="p">):</span>
+</span><span id="Generator.tochar_sql-3184"><a href="#Generator.tochar_sql-3184"><span class="linenos">3184</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Format argument unsupported for TO_CHAR/TO_VARCHAR function&quot;</span><span class="p">)</span>
+</span><span id="Generator.tochar_sql-3185"><a href="#Generator.tochar_sql-3185"><span class="linenos">3185</span></a>
+</span><span id="Generator.tochar_sql-3186"><a href="#Generator.tochar_sql-3186"><span class="linenos">3186</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -16197,12 +16250,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.dictproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictproperty_sql-3174"><a href="#Generator.dictproperty_sql-3174"><span class="linenos">3174</span></a> <span class="k">def</span> <span class="nf">dictproperty_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">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dictproperty_sql-3175"><a href="#Generator.dictproperty_sql-3175"><span class="linenos">3175</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictproperty_sql-3176"><a href="#Generator.dictproperty_sql-3176"><span class="linenos">3176</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictproperty_sql-3177"><a href="#Generator.dictproperty_sql-3177"><span class="linenos">3177</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.dictproperty_sql-3178"><a href="#Generator.dictproperty_sql-3178"><span class="linenos">3178</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
-</span><span id="Generator.dictproperty_sql-3179"><a href="#Generator.dictproperty_sql-3179"><span class="linenos">3179</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictproperty_sql-3188"><a href="#Generator.dictproperty_sql-3188"><span class="linenos">3188</span></a> <span class="k">def</span> <span class="nf">dictproperty_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">DictProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dictproperty_sql-3189"><a href="#Generator.dictproperty_sql-3189"><span class="linenos">3189</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictproperty_sql-3190"><a href="#Generator.dictproperty_sql-3190"><span class="linenos">3190</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictproperty_sql-3191"><a href="#Generator.dictproperty_sql-3191"><span class="linenos">3191</span></a> <span class="n">settings_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;settings&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.dictproperty_sql-3192"><a href="#Generator.dictproperty_sql-3192"><span class="linenos">3192</span></a> <span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="n">settings_sql</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">settings_sql</span> <span class="k">else</span> <span class="s2">&quot;()&quot;</span>
+</span><span id="Generator.dictproperty_sql-3193"><a href="#Generator.dictproperty_sql-3193"><span class="linenos">3193</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -16220,11 +16273,11 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.dictrange_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictrange_sql-3181"><a href="#Generator.dictrange_sql-3181"><span class="linenos">3181</span></a> <span class="k">def</span> <span class="nf">dictrange_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">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dictrange_sql-3182"><a href="#Generator.dictrange_sql-3182"><span class="linenos">3182</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictrange_sql-3183"><a href="#Generator.dictrange_sql-3183"><span class="linenos">3183</span></a> <span class="nb">max</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;max&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictrange_sql-3184"><a href="#Generator.dictrange_sql-3184"><span class="linenos">3184</span></a> <span class="nb">min</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;min&quot;</span><span class="p">)</span>
-</span><span id="Generator.dictrange_sql-3185"><a href="#Generator.dictrange_sql-3185"><span class="linenos">3185</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictrange_sql-3195"><a href="#Generator.dictrange_sql-3195"><span class="linenos">3195</span></a> <span class="k">def</span> <span class="nf">dictrange_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">DictRange</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dictrange_sql-3196"><a href="#Generator.dictrange_sql-3196"><span class="linenos">3196</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictrange_sql-3197"><a href="#Generator.dictrange_sql-3197"><span class="linenos">3197</span></a> <span class="nb">max</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;max&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictrange_sql-3198"><a href="#Generator.dictrange_sql-3198"><span class="linenos">3198</span></a> <span class="nb">min</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;min&quot;</span><span class="p">)</span>
+</span><span id="Generator.dictrange_sql-3199"><a href="#Generator.dictrange_sql-3199"><span class="linenos">3199</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">(MIN </span><span class="si">{</span><span class="nb">min</span><span class="si">}</span><span class="s2"> MAX </span><span class="si">{</span><span class="nb">max</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -16242,8 +16295,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.dictsubproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dictsubproperty_sql-3187"><a href="#Generator.dictsubproperty_sql-3187"><span class="linenos">3187</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_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">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.dictsubproperty_sql-3188"><a href="#Generator.dictsubproperty_sql-3188"><span class="linenos">3188</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </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;value&#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="Generator.dictsubproperty_sql-3201"><a href="#Generator.dictsubproperty_sql-3201"><span class="linenos">3201</span></a> <span class="k">def</span> <span class="nf">dictsubproperty_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">DictSubProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.dictsubproperty_sql-3202"><a href="#Generator.dictsubproperty_sql-3202"><span class="linenos">3202</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </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;value&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16261,8 +16314,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.oncluster_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.oncluster_sql-3190"><a href="#Generator.oncluster_sql-3190"><span class="linenos">3190</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.oncluster_sql-3191"><a href="#Generator.oncluster_sql-3191"><span class="linenos">3191</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.oncluster_sql-3204"><a href="#Generator.oncluster_sql-3204"><span class="linenos">3204</span></a> <span class="k">def</span> <span class="nf">oncluster_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">OnCluster</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.oncluster_sql-3205"><a href="#Generator.oncluster_sql-3205"><span class="linenos">3205</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -16280,12 +16333,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.clusteredbyproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clusteredbyproperty_sql-3193"><a href="#Generator.clusteredbyproperty_sql-3193"><span class="linenos">3193</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_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">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.clusteredbyproperty_sql-3194"><a href="#Generator.clusteredbyproperty_sql-3194"><span class="linenos">3194</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.clusteredbyproperty_sql-3195"><a href="#Generator.clusteredbyproperty_sql-3195"><span class="linenos">3195</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Generator.clusteredbyproperty_sql-3196"><a href="#Generator.clusteredbyproperty_sql-3196"><span class="linenos">3196</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.clusteredbyproperty_sql-3197"><a href="#Generator.clusteredbyproperty_sql-3197"><span class="linenos">3197</span></a> <span class="n">buckets</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;buckets&quot;</span><span class="p">)</span>
-</span><span id="Generator.clusteredbyproperty_sql-3198"><a href="#Generator.clusteredbyproperty_sql-3198"><span class="linenos">3198</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.clusteredbyproperty_sql-3207"><a href="#Generator.clusteredbyproperty_sql-3207"><span class="linenos">3207</span></a> <span class="k">def</span> <span class="nf">clusteredbyproperty_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">ClusteredByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.clusteredbyproperty_sql-3208"><a href="#Generator.clusteredbyproperty_sql-3208"><span class="linenos">3208</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.clusteredbyproperty_sql-3209"><a href="#Generator.clusteredbyproperty_sql-3209"><span class="linenos">3209</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;sorted_by&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Generator.clusteredbyproperty_sql-3210"><a href="#Generator.clusteredbyproperty_sql-3210"><span class="linenos">3210</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; SORTED BY (</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">sorted_by</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.clusteredbyproperty_sql-3211"><a href="#Generator.clusteredbyproperty_sql-3211"><span class="linenos">3211</span></a> <span class="n">buckets</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;buckets&quot;</span><span class="p">)</span>
+</span><span id="Generator.clusteredbyproperty_sql-3212"><a href="#Generator.clusteredbyproperty_sql-3212"><span class="linenos">3212</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CLUSTERED BY (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)</span><span class="si">{</span><span class="n">sorted_by</span><span class="si">}</span><span class="s2"> INTO </span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span>
</span></pre></div>
@@ -16303,14 +16356,14 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.anyvalue_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anyvalue_sql-3200"><a href="#Generator.anyvalue_sql-3200"><span class="linenos">3200</span></a> <span class="k">def</span> <span class="nf">anyvalue_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.anyvalue_sql-3201"><a href="#Generator.anyvalue_sql-3201"><span class="linenos">3201</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.anyvalue_sql-3202"><a href="#Generator.anyvalue_sql-3202"><span class="linenos">3202</span></a> <span class="n">having</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;having&quot;</span><span class="p">)</span>
-</span><span id="Generator.anyvalue_sql-3203"><a href="#Generator.anyvalue_sql-3203"><span class="linenos">3203</span></a>
-</span><span id="Generator.anyvalue_sql-3204"><a href="#Generator.anyvalue_sql-3204"><span class="linenos">3204</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
-</span><span id="Generator.anyvalue_sql-3205"><a href="#Generator.anyvalue_sql-3205"><span class="linenos">3205</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.anyvalue_sql-3206"><a href="#Generator.anyvalue_sql-3206"><span class="linenos">3206</span></a>
-</span><span id="Generator.anyvalue_sql-3207"><a href="#Generator.anyvalue_sql-3207"><span class="linenos">3207</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;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anyvalue_sql-3214"><a href="#Generator.anyvalue_sql-3214"><span class="linenos">3214</span></a> <span class="k">def</span> <span class="nf">anyvalue_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">AnyValue</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.anyvalue_sql-3215"><a href="#Generator.anyvalue_sql-3215"><span class="linenos">3215</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.anyvalue_sql-3216"><a href="#Generator.anyvalue_sql-3216"><span class="linenos">3216</span></a> <span class="n">having</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;having&quot;</span><span class="p">)</span>
+</span><span id="Generator.anyvalue_sql-3217"><a href="#Generator.anyvalue_sql-3217"><span class="linenos">3217</span></a>
+</span><span id="Generator.anyvalue_sql-3218"><a href="#Generator.anyvalue_sql-3218"><span class="linenos">3218</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
+</span><span id="Generator.anyvalue_sql-3219"><a href="#Generator.anyvalue_sql-3219"><span class="linenos">3219</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> HAVING </span><span class="si">{</span><span class="s1">&#39;MAX&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </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="s1">&#39;max&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;MIN&#39;</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">having</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.anyvalue_sql-3220"><a href="#Generator.anyvalue_sql-3220"><span class="linenos">3220</span></a>
+</span><span id="Generator.anyvalue_sql-3221"><a href="#Generator.anyvalue_sql-3221"><span class="linenos">3221</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;ANY_VALUE&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
</span></pre></div>
@@ -16328,20 +16381,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.querytransform_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.querytransform_sql-3209"><a href="#Generator.querytransform_sql-3209"><span class="linenos">3209</span></a> <span class="k">def</span> <span class="nf">querytransform_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">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.querytransform_sql-3210"><a href="#Generator.querytransform_sql-3210"><span class="linenos">3210</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-3211"><a href="#Generator.querytransform_sql-3211"><span class="linenos">3211</span></a> <span class="n">row_format_before</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;row_format_before&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-3212"><a href="#Generator.querytransform_sql-3212"><span class="linenos">3212</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-3213"><a href="#Generator.querytransform_sql-3213"><span class="linenos">3213</span></a> <span class="n">record_writer</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;record_writer&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-3214"><a href="#Generator.querytransform_sql-3214"><span class="linenos">3214</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-3215"><a href="#Generator.querytransform_sql-3215"><span class="linenos">3215</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </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;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.querytransform_sql-3216"><a href="#Generator.querytransform_sql-3216"><span class="linenos">3216</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-3217"><a href="#Generator.querytransform_sql-3217"><span class="linenos">3217</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-3218"><a href="#Generator.querytransform_sql-3218"><span class="linenos">3218</span></a> <span class="n">row_format_after</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;row_format_after&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-3219"><a href="#Generator.querytransform_sql-3219"><span class="linenos">3219</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-3220"><a href="#Generator.querytransform_sql-3220"><span class="linenos">3220</span></a> <span class="n">record_reader</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;record_reader&quot;</span><span class="p">)</span>
-</span><span id="Generator.querytransform_sql-3221"><a href="#Generator.querytransform_sql-3221"><span class="linenos">3221</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.querytransform_sql-3222"><a href="#Generator.querytransform_sql-3222"><span class="linenos">3222</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.querytransform_sql-3223"><a href="#Generator.querytransform_sql-3223"><span class="linenos">3223</span></a> <span class="k">def</span> <span class="nf">querytransform_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">QueryTransform</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.querytransform_sql-3224"><a href="#Generator.querytransform_sql-3224"><span class="linenos">3224</span></a> <span class="n">transform</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRANSFORM&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-3225"><a href="#Generator.querytransform_sql-3225"><span class="linenos">3225</span></a> <span class="n">row_format_before</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;row_format_before&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-3226"><a href="#Generator.querytransform_sql-3226"><span class="linenos">3226</span></a> <span class="n">row_format_before</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_before</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_before</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-3227"><a href="#Generator.querytransform_sql-3227"><span class="linenos">3227</span></a> <span class="n">record_writer</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;record_writer&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-3228"><a href="#Generator.querytransform_sql-3228"><span class="linenos">3228</span></a> <span class="n">record_writer</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDWRITER </span><span class="si">{</span><span class="n">record_writer</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_writer</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-3229"><a href="#Generator.querytransform_sql-3229"><span class="linenos">3229</span></a> <span class="n">using</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </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;command_script&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.querytransform_sql-3230"><a href="#Generator.querytransform_sql-3230"><span class="linenos">3230</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-3231"><a href="#Generator.querytransform_sql-3231"><span class="linenos">3231</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; AS </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-3232"><a href="#Generator.querytransform_sql-3232"><span class="linenos">3232</span></a> <span class="n">row_format_after</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;row_format_after&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-3233"><a href="#Generator.querytransform_sql-3233"><span class="linenos">3233</span></a> <span class="n">row_format_after</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">row_format_after</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">row_format_after</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-3234"><a href="#Generator.querytransform_sql-3234"><span class="linenos">3234</span></a> <span class="n">record_reader</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;record_reader&quot;</span><span class="p">)</span>
+</span><span id="Generator.querytransform_sql-3235"><a href="#Generator.querytransform_sql-3235"><span class="linenos">3235</span></a> <span class="n">record_reader</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; RECORDREADER </span><span class="si">{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">record_reader</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.querytransform_sql-3236"><a href="#Generator.querytransform_sql-3236"><span class="linenos">3236</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">transform</span><span class="si">}{</span><span class="n">row_format_before</span><span class="si">}{</span><span class="n">record_writer</span><span class="si">}{</span><span class="n">using</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">row_format_after</span><span class="si">}{</span><span class="n">record_reader</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16359,37 +16412,37 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.indexconstraintoption_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexconstraintoption_sql-3224"><a href="#Generator.indexconstraintoption_sql-3224"><span class="linenos">3224</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_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">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3225"><a href="#Generator.indexconstraintoption_sql-3225"><span class="linenos">3225</span></a> <span class="n">key_block_size</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;key_block_size&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3226"><a href="#Generator.indexconstraintoption_sql-3226"><span class="linenos">3226</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3227"><a href="#Generator.indexconstraintoption_sql-3227"><span class="linenos">3227</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-3228"><a href="#Generator.indexconstraintoption_sql-3228"><span class="linenos">3228</span></a>
-</span><span id="Generator.indexconstraintoption_sql-3229"><a href="#Generator.indexconstraintoption_sql-3229"><span class="linenos">3229</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3230"><a href="#Generator.indexconstraintoption_sql-3230"><span class="linenos">3230</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3231"><a href="#Generator.indexconstraintoption_sql-3231"><span class="linenos">3231</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-3232"><a href="#Generator.indexconstraintoption_sql-3232"><span class="linenos">3232</span></a>
-</span><span id="Generator.indexconstraintoption_sql-3233"><a href="#Generator.indexconstraintoption_sql-3233"><span class="linenos">3233</span></a> <span class="n">parser</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;parser&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3234"><a href="#Generator.indexconstraintoption_sql-3234"><span class="linenos">3234</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3235"><a href="#Generator.indexconstraintoption_sql-3235"><span class="linenos">3235</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-3236"><a href="#Generator.indexconstraintoption_sql-3236"><span class="linenos">3236</span></a>
-</span><span id="Generator.indexconstraintoption_sql-3237"><a href="#Generator.indexconstraintoption_sql-3237"><span class="linenos">3237</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3238"><a href="#Generator.indexconstraintoption_sql-3238"><span class="linenos">3238</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3239"><a href="#Generator.indexconstraintoption_sql-3239"><span class="linenos">3239</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-3240"><a href="#Generator.indexconstraintoption_sql-3240"><span class="linenos">3240</span></a>
-</span><span id="Generator.indexconstraintoption_sql-3241"><a href="#Generator.indexconstraintoption_sql-3241"><span class="linenos">3241</span></a> <span class="n">visible</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;visible&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3242"><a href="#Generator.indexconstraintoption_sql-3242"><span class="linenos">3242</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3243"><a href="#Generator.indexconstraintoption_sql-3243"><span class="linenos">3243</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-3244"><a href="#Generator.indexconstraintoption_sql-3244"><span class="linenos">3244</span></a>
-</span><span id="Generator.indexconstraintoption_sql-3245"><a href="#Generator.indexconstraintoption_sql-3245"><span class="linenos">3245</span></a> <span class="n">engine_attr</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;engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3246"><a href="#Generator.indexconstraintoption_sql-3246"><span class="linenos">3246</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3247"><a href="#Generator.indexconstraintoption_sql-3247"><span class="linenos">3247</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-3248"><a href="#Generator.indexconstraintoption_sql-3248"><span class="linenos">3248</span></a>
-</span><span id="Generator.indexconstraintoption_sql-3249"><a href="#Generator.indexconstraintoption_sql-3249"><span class="linenos">3249</span></a> <span class="n">secondary_engine_attr</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;secondary_engine_attr&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3250"><a href="#Generator.indexconstraintoption_sql-3250"><span class="linenos">3250</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
-</span><span id="Generator.indexconstraintoption_sql-3251"><a href="#Generator.indexconstraintoption_sql-3251"><span class="linenos">3251</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.indexconstraintoption_sql-3252"><a href="#Generator.indexconstraintoption_sql-3252"><span class="linenos">3252</span></a>
-</span><span id="Generator.indexconstraintoption_sql-3253"><a href="#Generator.indexconstraintoption_sql-3253"><span class="linenos">3253</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexconstraintoption_sql-3254"><a href="#Generator.indexconstraintoption_sql-3254"><span class="linenos">3254</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexconstraintoption_sql-3238"><a href="#Generator.indexconstraintoption_sql-3238"><span class="linenos">3238</span></a> <span class="k">def</span> <span class="nf">indexconstraintoption_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">IndexConstraintOption</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3239"><a href="#Generator.indexconstraintoption_sql-3239"><span class="linenos">3239</span></a> <span class="n">key_block_size</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;key_block_size&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3240"><a href="#Generator.indexconstraintoption_sql-3240"><span class="linenos">3240</span></a> <span class="k">if</span> <span class="n">key_block_size</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3241"><a href="#Generator.indexconstraintoption_sql-3241"><span class="linenos">3241</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;KEY_BLOCK_SIZE = </span><span class="si">{</span><span class="n">key_block_size</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-3242"><a href="#Generator.indexconstraintoption_sql-3242"><span class="linenos">3242</span></a>
+</span><span id="Generator.indexconstraintoption_sql-3243"><a href="#Generator.indexconstraintoption_sql-3243"><span class="linenos">3243</span></a> <span class="n">using</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;using&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3244"><a href="#Generator.indexconstraintoption_sql-3244"><span class="linenos">3244</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3245"><a href="#Generator.indexconstraintoption_sql-3245"><span class="linenos">3245</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">using</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-3246"><a href="#Generator.indexconstraintoption_sql-3246"><span class="linenos">3246</span></a>
+</span><span id="Generator.indexconstraintoption_sql-3247"><a href="#Generator.indexconstraintoption_sql-3247"><span class="linenos">3247</span></a> <span class="n">parser</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;parser&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3248"><a href="#Generator.indexconstraintoption_sql-3248"><span class="linenos">3248</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3249"><a href="#Generator.indexconstraintoption_sql-3249"><span class="linenos">3249</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;WITH PARSER </span><span class="si">{</span><span class="n">parser</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-3250"><a href="#Generator.indexconstraintoption_sql-3250"><span class="linenos">3250</span></a>
+</span><span id="Generator.indexconstraintoption_sql-3251"><a href="#Generator.indexconstraintoption_sql-3251"><span class="linenos">3251</span></a> <span class="n">comment</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;comment&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3252"><a href="#Generator.indexconstraintoption_sql-3252"><span class="linenos">3252</span></a> <span class="k">if</span> <span class="n">comment</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3253"><a href="#Generator.indexconstraintoption_sql-3253"><span class="linenos">3253</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;COMMENT </span><span class="si">{</span><span class="n">comment</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-3254"><a href="#Generator.indexconstraintoption_sql-3254"><span class="linenos">3254</span></a>
+</span><span id="Generator.indexconstraintoption_sql-3255"><a href="#Generator.indexconstraintoption_sql-3255"><span class="linenos">3255</span></a> <span class="n">visible</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;visible&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3256"><a href="#Generator.indexconstraintoption_sql-3256"><span class="linenos">3256</span></a> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3257"><a href="#Generator.indexconstraintoption_sql-3257"><span class="linenos">3257</span></a> <span class="k">return</span> <span class="s2">&quot;VISIBLE&quot;</span> <span class="k">if</span> <span class="n">visible</span> <span class="k">else</span> <span class="s2">&quot;INVISIBLE&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-3258"><a href="#Generator.indexconstraintoption_sql-3258"><span class="linenos">3258</span></a>
+</span><span id="Generator.indexconstraintoption_sql-3259"><a href="#Generator.indexconstraintoption_sql-3259"><span class="linenos">3259</span></a> <span class="n">engine_attr</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;engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3260"><a href="#Generator.indexconstraintoption_sql-3260"><span class="linenos">3260</span></a> <span class="k">if</span> <span class="n">engine_attr</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3261"><a href="#Generator.indexconstraintoption_sql-3261"><span class="linenos">3261</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-3262"><a href="#Generator.indexconstraintoption_sql-3262"><span class="linenos">3262</span></a>
+</span><span id="Generator.indexconstraintoption_sql-3263"><a href="#Generator.indexconstraintoption_sql-3263"><span class="linenos">3263</span></a> <span class="n">secondary_engine_attr</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;secondary_engine_attr&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3264"><a href="#Generator.indexconstraintoption_sql-3264"><span class="linenos">3264</span></a> <span class="k">if</span> <span class="n">secondary_engine_attr</span><span class="p">:</span>
+</span><span id="Generator.indexconstraintoption_sql-3265"><a href="#Generator.indexconstraintoption_sql-3265"><span class="linenos">3265</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SECONDARY_ENGINE_ATTRIBUTE = </span><span class="si">{</span><span class="n">secondary_engine_attr</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.indexconstraintoption_sql-3266"><a href="#Generator.indexconstraintoption_sql-3266"><span class="linenos">3266</span></a>
+</span><span id="Generator.indexconstraintoption_sql-3267"><a href="#Generator.indexconstraintoption_sql-3267"><span class="linenos">3267</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Unsupported index constraint option.&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexconstraintoption_sql-3268"><a href="#Generator.indexconstraintoption_sql-3268"><span class="linenos">3268</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -16407,18 +16460,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.indexcolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexcolumnconstraint_sql-3256"><a href="#Generator.indexcolumnconstraint_sql-3256"><span class="linenos">3256</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_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">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3257"><a href="#Generator.indexcolumnconstraint_sql-3257"><span class="linenos">3257</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3258"><a href="#Generator.indexcolumnconstraint_sql-3258"><span class="linenos">3258</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3259"><a href="#Generator.indexcolumnconstraint_sql-3259"><span class="linenos">3259</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3260"><a href="#Generator.indexcolumnconstraint_sql-3260"><span class="linenos">3260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3261"><a href="#Generator.indexcolumnconstraint_sql-3261"><span class="linenos">3261</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;index_type&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3262"><a href="#Generator.indexcolumnconstraint_sql-3262"><span class="linenos">3262</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3263"><a href="#Generator.indexcolumnconstraint_sql-3263"><span class="linenos">3263</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3264"><a href="#Generator.indexcolumnconstraint_sql-3264"><span class="linenos">3264</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3265"><a href="#Generator.indexcolumnconstraint_sql-3265"><span class="linenos">3265</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3266"><a href="#Generator.indexcolumnconstraint_sql-3266"><span class="linenos">3266</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.indexcolumnconstraint_sql-3267"><a href="#Generator.indexcolumnconstraint_sql-3267"><span class="linenos">3267</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.indexcolumnconstraint_sql-3270"><a href="#Generator.indexcolumnconstraint_sql-3270"><span class="linenos">3270</span></a> <span class="k">def</span> <span class="nf">indexcolumnconstraint_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">IndexColumnConstraint</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3271"><a href="#Generator.indexcolumnconstraint_sql-3271"><span class="linenos">3271</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3272"><a href="#Generator.indexcolumnconstraint_sql-3272"><span class="linenos">3272</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> INDEX&quot;</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;INDEX&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3273"><a href="#Generator.indexcolumnconstraint_sql-3273"><span class="linenos">3273</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3274"><a href="#Generator.indexcolumnconstraint_sql-3274"><span class="linenos">3274</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3275"><a href="#Generator.indexcolumnconstraint_sql-3275"><span class="linenos">3275</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;index_type&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3276"><a href="#Generator.indexcolumnconstraint_sql-3276"><span class="linenos">3276</span></a> <span class="n">index_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; USING </span><span class="si">{</span><span class="n">index_type</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">index_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3277"><a href="#Generator.indexcolumnconstraint_sql-3277"><span class="linenos">3277</span></a> <span class="n">schema</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;schema&quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3278"><a href="#Generator.indexcolumnconstraint_sql-3278"><span class="linenos">3278</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">schema</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">schema</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3279"><a href="#Generator.indexcolumnconstraint_sql-3279"><span class="linenos">3279</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3280"><a href="#Generator.indexcolumnconstraint_sql-3280"><span class="linenos">3280</span></a> <span class="n">options</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.indexcolumnconstraint_sql-3281"><a href="#Generator.indexcolumnconstraint_sql-3281"><span class="linenos">3281</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}{</span><span class="n">index_type</span><span class="si">}{</span><span class="n">schema</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16436,20 +16489,20 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.nvl2_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nvl2_sql-3269"><a href="#Generator.nvl2_sql-3269"><span class="linenos">3269</span></a> <span class="k">def</span> <span class="nf">nvl2_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">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.nvl2_sql-3270"><a href="#Generator.nvl2_sql-3270"><span class="linenos">3270</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
-</span><span id="Generator.nvl2_sql-3271"><a href="#Generator.nvl2_sql-3271"><span class="linenos">3271</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.nvl2_sql-3272"><a href="#Generator.nvl2_sql-3272"><span class="linenos">3272</span></a>
-</span><span id="Generator.nvl2_sql-3273"><a href="#Generator.nvl2_sql-3273"><span class="linenos">3273</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
-</span><span id="Generator.nvl2_sql-3274"><a href="#Generator.nvl2_sql-3274"><span class="linenos">3274</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Generator.nvl2_sql-3275"><a href="#Generator.nvl2_sql-3275"><span class="linenos">3275</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">],</span>
-</span><span id="Generator.nvl2_sql-3276"><a href="#Generator.nvl2_sql-3276"><span class="linenos">3276</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Generator.nvl2_sql-3277"><a href="#Generator.nvl2_sql-3277"><span class="linenos">3277</span></a> <span class="p">)</span>
-</span><span id="Generator.nvl2_sql-3278"><a href="#Generator.nvl2_sql-3278"><span class="linenos">3278</span></a> <span class="n">else_cond</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;false&quot;</span><span class="p">)</span>
-</span><span id="Generator.nvl2_sql-3279"><a href="#Generator.nvl2_sql-3279"><span class="linenos">3279</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
-</span><span id="Generator.nvl2_sql-3280"><a href="#Generator.nvl2_sql-3280"><span class="linenos">3280</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Generator.nvl2_sql-3281"><a href="#Generator.nvl2_sql-3281"><span class="linenos">3281</span></a>
-</span><span id="Generator.nvl2_sql-3282"><a href="#Generator.nvl2_sql-3282"><span class="linenos">3282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nvl2_sql-3283"><a href="#Generator.nvl2_sql-3283"><span class="linenos">3283</span></a> <span class="k">def</span> <span class="nf">nvl2_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">Nvl2</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.nvl2_sql-3284"><a href="#Generator.nvl2_sql-3284"><span class="linenos">3284</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NVL2_SUPPORTED</span><span class="p">:</span>
+</span><span id="Generator.nvl2_sql-3285"><a href="#Generator.nvl2_sql-3285"><span class="linenos">3285</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.nvl2_sql-3286"><a href="#Generator.nvl2_sql-3286"><span class="linenos">3286</span></a>
+</span><span id="Generator.nvl2_sql-3287"><a href="#Generator.nvl2_sql-3287"><span class="linenos">3287</span></a> <span class="n">case</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">()</span><span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="Generator.nvl2_sql-3288"><a href="#Generator.nvl2_sql-3288"><span class="linenos">3288</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Generator.nvl2_sql-3289"><a href="#Generator.nvl2_sql-3289"><span class="linenos">3289</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;true&quot;</span><span class="p">],</span>
+</span><span id="Generator.nvl2_sql-3290"><a href="#Generator.nvl2_sql-3290"><span class="linenos">3290</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Generator.nvl2_sql-3291"><a href="#Generator.nvl2_sql-3291"><span class="linenos">3291</span></a> <span class="p">)</span>
+</span><span id="Generator.nvl2_sql-3292"><a href="#Generator.nvl2_sql-3292"><span class="linenos">3292</span></a> <span class="n">else_cond</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;false&quot;</span><span class="p">)</span>
+</span><span id="Generator.nvl2_sql-3293"><a href="#Generator.nvl2_sql-3293"><span class="linenos">3293</span></a> <span class="k">if</span> <span class="n">else_cond</span><span class="p">:</span>
+</span><span id="Generator.nvl2_sql-3294"><a href="#Generator.nvl2_sql-3294"><span class="linenos">3294</span></a> <span class="k">case</span><span class="o">.</span><span class="n">else_</span><span class="p">(</span><span class="n">else_cond</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Generator.nvl2_sql-3295"><a href="#Generator.nvl2_sql-3295"><span class="linenos">3295</span></a>
+</span><span id="Generator.nvl2_sql-3296"><a href="#Generator.nvl2_sql-3296"><span class="linenos">3296</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">case</span><span class="p">)</span>
</span></pre></div>
@@ -16467,13 +16520,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.comprehension_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.comprehension_sql-3284"><a href="#Generator.comprehension_sql-3284"><span class="linenos">3284</span></a> <span class="k">def</span> <span class="nf">comprehension_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">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.comprehension_sql-3285"><a href="#Generator.comprehension_sql-3285"><span class="linenos">3285</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.comprehension_sql-3286"><a href="#Generator.comprehension_sql-3286"><span class="linenos">3286</span></a> <span class="n">expr</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="Generator.comprehension_sql-3287"><a href="#Generator.comprehension_sql-3287"><span class="linenos">3287</span></a> <span class="n">iterator</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;iterator&quot;</span><span class="p">)</span>
-</span><span id="Generator.comprehension_sql-3288"><a href="#Generator.comprehension_sql-3288"><span class="linenos">3288</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
-</span><span id="Generator.comprehension_sql-3289"><a href="#Generator.comprehension_sql-3289"><span class="linenos">3289</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.comprehension_sql-3290"><a href="#Generator.comprehension_sql-3290"><span class="linenos">3290</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.comprehension_sql-3298"><a href="#Generator.comprehension_sql-3298"><span class="linenos">3298</span></a> <span class="k">def</span> <span class="nf">comprehension_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">Comprehension</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.comprehension_sql-3299"><a href="#Generator.comprehension_sql-3299"><span class="linenos">3299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.comprehension_sql-3300"><a href="#Generator.comprehension_sql-3300"><span class="linenos">3300</span></a> <span class="n">expr</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="Generator.comprehension_sql-3301"><a href="#Generator.comprehension_sql-3301"><span class="linenos">3301</span></a> <span class="n">iterator</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;iterator&quot;</span><span class="p">)</span>
+</span><span id="Generator.comprehension_sql-3302"><a href="#Generator.comprehension_sql-3302"><span class="linenos">3302</span></a> <span class="n">condition</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;condition&quot;</span><span class="p">)</span>
+</span><span id="Generator.comprehension_sql-3303"><a href="#Generator.comprehension_sql-3303"><span class="linenos">3303</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; IF </span><span class="si">{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.comprehension_sql-3304"><a href="#Generator.comprehension_sql-3304"><span class="linenos">3304</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> FOR </span><span class="si">{</span><span class="n">expr</span><span class="si">}</span><span class="s2"> IN </span><span class="si">{</span><span class="n">iterator</span><span class="si">}{</span><span class="n">condition</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16491,8 +16544,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.columnprefix_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnprefix_sql-3292"><a href="#Generator.columnprefix_sql-3292"><span class="linenos">3292</span></a> <span class="k">def</span> <span class="nf">columnprefix_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">ColumnPrefix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.columnprefix_sql-3293"><a href="#Generator.columnprefix_sql-3293"><span class="linenos">3293</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnprefix_sql-3306"><a href="#Generator.columnprefix_sql-3306"><span class="linenos">3306</span></a> <span class="k">def</span> <span class="nf">columnprefix_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">ColumnPrefix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.columnprefix_sql-3307"><a href="#Generator.columnprefix_sql-3307"><span class="linenos">3307</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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">(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -16510,8 +16563,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.opclass_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.opclass_sql-3295"><a href="#Generator.opclass_sql-3295"><span class="linenos">3295</span></a> <span class="k">def</span> <span class="nf">opclass_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">Opclass</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.opclass_sql-3296"><a href="#Generator.opclass_sql-3296"><span class="linenos">3296</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.opclass_sql-3309"><a href="#Generator.opclass_sql-3309"><span class="linenos">3309</span></a> <span class="k">def</span> <span class="nf">opclass_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">Opclass</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.opclass_sql-3310"><a href="#Generator.opclass_sql-3310"><span class="linenos">3310</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">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"> </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16529,13 +16582,13 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.predict_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.predict_sql-3298"><a href="#Generator.predict_sql-3298"><span class="linenos">3298</span></a> <span class="k">def</span> <span class="nf">predict_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">Predict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.predict_sql-3299"><a href="#Generator.predict_sql-3299"><span class="linenos">3299</span></a> <span class="n">model</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="Generator.predict_sql-3300"><a href="#Generator.predict_sql-3300"><span class="linenos">3300</span></a> <span class="n">model</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;MODEL </span><span class="si">{</span><span class="n">model</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.predict_sql-3301"><a href="#Generator.predict_sql-3301"><span class="linenos">3301</span></a> <span class="n">table</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="Generator.predict_sql-3302"><a href="#Generator.predict_sql-3302"><span class="linenos">3302</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;TABLE </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="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span> <span class="k">else</span> <span class="n">table</span>
-</span><span id="Generator.predict_sql-3303"><a href="#Generator.predict_sql-3303"><span class="linenos">3303</span></a> <span class="n">parameters</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;params_struct&quot;</span><span class="p">)</span>
-</span><span id="Generator.predict_sql-3304"><a href="#Generator.predict_sql-3304"><span class="linenos">3304</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;PREDICT&quot;</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">parameters</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.predict_sql-3312"><a href="#Generator.predict_sql-3312"><span class="linenos">3312</span></a> <span class="k">def</span> <span class="nf">predict_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">Predict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.predict_sql-3313"><a href="#Generator.predict_sql-3313"><span class="linenos">3313</span></a> <span class="n">model</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="Generator.predict_sql-3314"><a href="#Generator.predict_sql-3314"><span class="linenos">3314</span></a> <span class="n">model</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;MODEL </span><span class="si">{</span><span class="n">model</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.predict_sql-3315"><a href="#Generator.predict_sql-3315"><span class="linenos">3315</span></a> <span class="n">table</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="Generator.predict_sql-3316"><a href="#Generator.predict_sql-3316"><span class="linenos">3316</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;TABLE </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="ow">not</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span> <span class="k">else</span> <span class="n">table</span>
+</span><span id="Generator.predict_sql-3317"><a href="#Generator.predict_sql-3317"><span class="linenos">3317</span></a> <span class="n">parameters</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;params_struct&quot;</span><span class="p">)</span>
+</span><span id="Generator.predict_sql-3318"><a href="#Generator.predict_sql-3318"><span class="linenos">3318</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;PREDICT&quot;</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">parameters</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
</span></pre></div>
@@ -16553,10 +16606,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.forin_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.forin_sql-3306"><a href="#Generator.forin_sql-3306"><span class="linenos">3306</span></a> <span class="k">def</span> <span class="nf">forin_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">ForIn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.forin_sql-3307"><a href="#Generator.forin_sql-3307"><span class="linenos">3307</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.forin_sql-3308"><a href="#Generator.forin_sql-3308"><span class="linenos">3308</span></a> <span class="n">expression_sql</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="Generator.forin_sql-3309"><a href="#Generator.forin_sql-3309"><span class="linenos">3309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DO </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.forin_sql-3320"><a href="#Generator.forin_sql-3320"><span class="linenos">3320</span></a> <span class="k">def</span> <span class="nf">forin_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">ForIn</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.forin_sql-3321"><a href="#Generator.forin_sql-3321"><span class="linenos">3321</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.forin_sql-3322"><a href="#Generator.forin_sql-3322"><span class="linenos">3322</span></a> <span class="n">expression_sql</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="Generator.forin_sql-3323"><a href="#Generator.forin_sql-3323"><span class="linenos">3323</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> DO </span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16574,10 +16627,10 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.refresh_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.refresh_sql-3311"><a href="#Generator.refresh_sql-3311"><span class="linenos">3311</span></a> <span class="k">def</span> <span class="nf">refresh_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">Refresh</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.refresh_sql-3312"><a href="#Generator.refresh_sql-3312"><span class="linenos">3312</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.refresh_sql-3313"><a href="#Generator.refresh_sql-3313"><span class="linenos">3313</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;TABLE &quot;</span>
-</span><span id="Generator.refresh_sql-3314"><a href="#Generator.refresh_sql-3314"><span class="linenos">3314</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFRESH </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.refresh_sql-3325"><a href="#Generator.refresh_sql-3325"><span class="linenos">3325</span></a> <span class="k">def</span> <span class="nf">refresh_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">Refresh</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.refresh_sql-3326"><a href="#Generator.refresh_sql-3326"><span class="linenos">3326</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.refresh_sql-3327"><a href="#Generator.refresh_sql-3327"><span class="linenos">3327</span></a> <span class="n">table</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;TABLE &quot;</span>
+</span><span id="Generator.refresh_sql-3328"><a href="#Generator.refresh_sql-3328"><span class="linenos">3328</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;REFRESH </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -16595,8 +16648,8 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.operator_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.operator_sql-3316"><a href="#Generator.operator_sql-3316"><span class="linenos">3316</span></a> <span class="k">def</span> <span class="nf">operator_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">Operator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.operator_sql-3317"><a href="#Generator.operator_sql-3317"><span class="linenos">3317</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;OPERATOR(</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;operator&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.operator_sql-3330"><a href="#Generator.operator_sql-3330"><span class="linenos">3330</span></a> <span class="k">def</span> <span class="nf">operator_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">Operator</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.operator_sql-3331"><a href="#Generator.operator_sql-3331"><span class="linenos">3331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;OPERATOR(</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;operator&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -16614,18 +16667,18 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.toarray_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.toarray_sql-3319"><a href="#Generator.toarray_sql-3319"><span class="linenos">3319</span></a> <span class="k">def</span> <span class="nf">toarray_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">ToArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.toarray_sql-3320"><a href="#Generator.toarray_sql-3320"><span class="linenos">3320</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.toarray_sql-3321"><a href="#Generator.toarray_sql-3321"><span class="linenos">3321</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="Generator.toarray_sql-3322"><a href="#Generator.toarray_sql-3322"><span class="linenos">3322</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
-</span><span id="Generator.toarray_sql-3323"><a href="#Generator.toarray_sql-3323"><span class="linenos">3323</span></a>
-</span><span id="Generator.toarray_sql-3324"><a href="#Generator.toarray_sql-3324"><span class="linenos">3324</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator.toarray_sql-3325"><a href="#Generator.toarray_sql-3325"><span class="linenos">3325</span></a>
-</span><span id="Generator.toarray_sql-3326"><a href="#Generator.toarray_sql-3326"><span class="linenos">3326</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
-</span><span id="Generator.toarray_sql-3327"><a href="#Generator.toarray_sql-3327"><span class="linenos">3327</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="Generator.toarray_sql-3328"><a href="#Generator.toarray_sql-3328"><span class="linenos">3328</span></a>
-</span><span id="Generator.toarray_sql-3329"><a href="#Generator.toarray_sql-3329"><span class="linenos">3329</span></a> <span class="n">cond_for_null</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
-</span><span id="Generator.toarray_sql-3330"><a href="#Generator.toarray_sql-3330"><span class="linenos">3330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">cond_for_null</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">arg</span><span class="p">])))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.toarray_sql-3333"><a href="#Generator.toarray_sql-3333"><span class="linenos">3333</span></a> <span class="k">def</span> <span class="nf">toarray_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">ToArray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.toarray_sql-3334"><a href="#Generator.toarray_sql-3334"><span class="linenos">3334</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.toarray_sql-3335"><a href="#Generator.toarray_sql-3335"><span class="linenos">3335</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="Generator.toarray_sql-3336"><a href="#Generator.toarray_sql-3336"><span class="linenos">3336</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
+</span><span id="Generator.toarray_sql-3337"><a href="#Generator.toarray_sql-3337"><span class="linenos">3337</span></a>
+</span><span id="Generator.toarray_sql-3338"><a href="#Generator.toarray_sql-3338"><span class="linenos">3338</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="Generator.toarray_sql-3339"><a href="#Generator.toarray_sql-3339"><span class="linenos">3339</span></a>
+</span><span id="Generator.toarray_sql-3340"><a href="#Generator.toarray_sql-3340"><span class="linenos">3340</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
+</span><span id="Generator.toarray_sql-3341"><a href="#Generator.toarray_sql-3341"><span class="linenos">3341</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="Generator.toarray_sql-3342"><a href="#Generator.toarray_sql-3342"><span class="linenos">3342</span></a>
+</span><span id="Generator.toarray_sql-3343"><a href="#Generator.toarray_sql-3343"><span class="linenos">3343</span></a> <span class="n">cond_for_null</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">())</span>
+</span><span id="Generator.toarray_sql-3344"><a href="#Generator.toarray_sql-3344"><span class="linenos">3344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">cond_for_null</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">(),</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">arg</span><span class="p">])))</span>
</span></pre></div>
@@ -16643,12 +16696,12 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.tsordstotime_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tsordstotime_sql-3332"><a href="#Generator.tsordstotime_sql-3332"><span class="linenos">3332</span></a> <span class="k">def</span> <span class="nf">tsordstotime_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">TsOrDsToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tsordstotime_sql-3333"><a href="#Generator.tsordstotime_sql-3333"><span class="linenos">3333</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.tsordstotime_sql-3334"><a href="#Generator.tsordstotime_sql-3334"><span class="linenos">3334</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToTime</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">):</span>
-</span><span id="Generator.tsordstotime_sql-3335"><a href="#Generator.tsordstotime_sql-3335"><span class="linenos">3335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.tsordstotime_sql-3336"><a href="#Generator.tsordstotime_sql-3336"><span class="linenos">3336</span></a>
-</span><span id="Generator.tsordstotime_sql-3337"><a href="#Generator.tsordstotime_sql-3337"><span class="linenos">3337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;time&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tsordstotime_sql-3346"><a href="#Generator.tsordstotime_sql-3346"><span class="linenos">3346</span></a> <span class="k">def</span> <span class="nf">tsordstotime_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">TsOrDsToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tsordstotime_sql-3347"><a href="#Generator.tsordstotime_sql-3347"><span class="linenos">3347</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.tsordstotime_sql-3348"><a href="#Generator.tsordstotime_sql-3348"><span class="linenos">3348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToTime</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIME</span><span class="p">):</span>
+</span><span id="Generator.tsordstotime_sql-3349"><a href="#Generator.tsordstotime_sql-3349"><span class="linenos">3349</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.tsordstotime_sql-3350"><a href="#Generator.tsordstotime_sql-3350"><span class="linenos">3350</span></a>
+</span><span id="Generator.tsordstotime_sql-3351"><a href="#Generator.tsordstotime_sql-3351"><span class="linenos">3351</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;time&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -16666,19 +16719,19 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.tsordstodate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tsordstodate_sql-3339"><a href="#Generator.tsordstodate_sql-3339"><span class="linenos">3339</span></a> <span class="k">def</span> <span class="nf">tsordstodate_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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tsordstodate_sql-3340"><a href="#Generator.tsordstodate_sql-3340"><span class="linenos">3340</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Generator.tsordstodate_sql-3341"><a href="#Generator.tsordstodate_sql-3341"><span class="linenos">3341</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.tsordstodate_sql-3342"><a href="#Generator.tsordstodate_sql-3342"><span class="linenos">3342</span></a>
-</span><span id="Generator.tsordstodate_sql-3343"><a href="#Generator.tsordstodate_sql-3343"><span class="linenos">3343</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
-</span><span id="Generator.tsordstodate_sql-3344"><a href="#Generator.tsordstodate_sql-3344"><span class="linenos">3344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.tsordstodate_sql-3345"><a href="#Generator.tsordstodate_sql-3345"><span class="linenos">3345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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">expression</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 class="s2">&quot;date&quot;</span><span class="p">)</span>
-</span><span id="Generator.tsordstodate_sql-3346"><a href="#Generator.tsordstodate_sql-3346"><span class="linenos">3346</span></a> <span class="p">)</span>
-</span><span id="Generator.tsordstodate_sql-3347"><a href="#Generator.tsordstodate_sql-3347"><span class="linenos">3347</span></a>
-</span><span id="Generator.tsordstodate_sql-3348"><a href="#Generator.tsordstodate_sql-3348"><span class="linenos">3348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
-</span><span id="Generator.tsordstodate_sql-3349"><a href="#Generator.tsordstodate_sql-3349"><span class="linenos">3349</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Generator.tsordstodate_sql-3350"><a href="#Generator.tsordstodate_sql-3350"><span class="linenos">3350</span></a>
-</span><span id="Generator.tsordstodate_sql-3351"><a href="#Generator.tsordstodate_sql-3351"><span class="linenos">3351</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tsordstodate_sql-3353"><a href="#Generator.tsordstodate_sql-3353"><span class="linenos">3353</span></a> <span class="k">def</span> <span class="nf">tsordstodate_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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.tsordstodate_sql-3354"><a href="#Generator.tsordstodate_sql-3354"><span class="linenos">3354</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Generator.tsordstodate_sql-3355"><a href="#Generator.tsordstodate_sql-3355"><span class="linenos">3355</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.tsordstodate_sql-3356"><a href="#Generator.tsordstodate_sql-3356"><span class="linenos">3356</span></a>
+</span><span id="Generator.tsordstodate_sql-3357"><a href="#Generator.tsordstodate_sql-3357"><span class="linenos">3357</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
+</span><span id="Generator.tsordstodate_sql-3358"><a href="#Generator.tsordstodate_sql-3358"><span class="linenos">3358</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.tsordstodate_sql-3359"><a href="#Generator.tsordstodate_sql-3359"><span class="linenos">3359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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">expression</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 class="s2">&quot;date&quot;</span><span class="p">)</span>
+</span><span id="Generator.tsordstodate_sql-3360"><a href="#Generator.tsordstodate_sql-3360"><span class="linenos">3360</span></a> <span class="p">)</span>
+</span><span id="Generator.tsordstodate_sql-3361"><a href="#Generator.tsordstodate_sql-3361"><span class="linenos">3361</span></a>
+</span><span id="Generator.tsordstodate_sql-3362"><a href="#Generator.tsordstodate_sql-3362"><span class="linenos">3362</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
+</span><span id="Generator.tsordstodate_sql-3363"><a href="#Generator.tsordstodate_sql-3363"><span class="linenos">3363</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Generator.tsordstodate_sql-3364"><a href="#Generator.tsordstodate_sql-3364"><span class="linenos">3364</span></a>
+</span><span id="Generator.tsordstodate_sql-3365"><a href="#Generator.tsordstodate_sql-3365"><span class="linenos">3365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;date&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -16696,15 +16749,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.unixdate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unixdate_sql-3353"><a href="#Generator.unixdate_sql-3353"><span class="linenos">3353</span></a> <span class="k">def</span> <span class="nf">unixdate_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">UnixDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.unixdate_sql-3354"><a href="#Generator.unixdate_sql-3354"><span class="linenos">3354</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
-</span><span id="Generator.unixdate_sql-3355"><a href="#Generator.unixdate_sql-3355"><span class="linenos">3355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Generator.unixdate_sql-3356"><a href="#Generator.unixdate_sql-3356"><span class="linenos">3356</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
-</span><span id="Generator.unixdate_sql-3357"><a href="#Generator.unixdate_sql-3357"><span class="linenos">3357</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Generator.unixdate_sql-3358"><a href="#Generator.unixdate_sql-3358"><span class="linenos">3358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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;1970-01-01&quot;</span><span class="p">),</span> <span class="s2">&quot;date&quot;</span><span class="p">),</span>
-</span><span id="Generator.unixdate_sql-3359"><a href="#Generator.unixdate_sql-3359"><span class="linenos">3359</span></a> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
-</span><span id="Generator.unixdate_sql-3360"><a href="#Generator.unixdate_sql-3360"><span class="linenos">3360</span></a> <span class="p">)</span>
-</span><span id="Generator.unixdate_sql-3361"><a href="#Generator.unixdate_sql-3361"><span class="linenos">3361</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unixdate_sql-3367"><a href="#Generator.unixdate_sql-3367"><span class="linenos">3367</span></a> <span class="k">def</span> <span class="nf">unixdate_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">UnixDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.unixdate_sql-3368"><a href="#Generator.unixdate_sql-3368"><span class="linenos">3368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
+</span><span id="Generator.unixdate_sql-3369"><a href="#Generator.unixdate_sql-3369"><span class="linenos">3369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Generator.unixdate_sql-3370"><a href="#Generator.unixdate_sql-3370"><span class="linenos">3370</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span>
+</span><span id="Generator.unixdate_sql-3371"><a href="#Generator.unixdate_sql-3371"><span class="linenos">3371</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Generator.unixdate_sql-3372"><a href="#Generator.unixdate_sql-3372"><span class="linenos">3372</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</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;1970-01-01&quot;</span><span class="p">),</span> <span class="s2">&quot;date&quot;</span><span class="p">),</span>
+</span><span id="Generator.unixdate_sql-3373"><a href="#Generator.unixdate_sql-3373"><span class="linenos">3373</span></a> <span class="s2">&quot;day&quot;</span><span class="p">,</span>
+</span><span id="Generator.unixdate_sql-3374"><a href="#Generator.unixdate_sql-3374"><span class="linenos">3374</span></a> <span class="p">)</span>
+</span><span id="Generator.unixdate_sql-3375"><a href="#Generator.unixdate_sql-3375"><span class="linenos">3375</span></a> <span class="p">)</span>
</span></pre></div>
@@ -16722,15 +16775,15 @@ it is safer to copy.</li>
</div>
<a class="headerlink" href="#Generator.lastday_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lastday_sql-3363"><a href="#Generator.lastday_sql-3363"><span class="linenos">3363</span></a> <span class="k">def</span> <span class="nf">lastday_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">LastDay</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.lastday_sql-3364"><a href="#Generator.lastday_sql-3364"><span class="linenos">3364</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAST_DAY_SUPPORTS_DATE_PART</span><span class="p">:</span>
-</span><span id="Generator.lastday_sql-3365"><a href="#Generator.lastday_sql-3365"><span class="linenos">3365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.lastday_sql-3366"><a href="#Generator.lastday_sql-3366"><span class="linenos">3366</span></a>
-</span><span id="Generator.lastday_sql-3367"><a href="#Generator.lastday_sql-3367"><span class="linenos">3367</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="Generator.lastday_sql-3368"><a href="#Generator.lastday_sql-3368"><span class="linenos">3368</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit</span> <span class="o">!=</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="Generator.lastday_sql-3369"><a href="#Generator.lastday_sql-3369"><span class="linenos">3369</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Date parts are not supported in LAST_DAY.&quot;</span><span class="p">)</span>
-</span><span id="Generator.lastday_sql-3370"><a href="#Generator.lastday_sql-3370"><span class="linenos">3370</span></a>
-</span><span id="Generator.lastday_sql-3371"><a href="#Generator.lastday_sql-3371"><span class="linenos">3371</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;LAST_DAY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lastday_sql-3377"><a href="#Generator.lastday_sql-3377"><span class="linenos">3377</span></a> <span class="k">def</span> <span class="nf">lastday_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">LastDay</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.lastday_sql-3378"><a href="#Generator.lastday_sql-3378"><span class="linenos">3378</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAST_DAY_SUPPORTS_DATE_PART</span><span class="p">:</span>
+</span><span id="Generator.lastday_sql-3379"><a href="#Generator.lastday_sql-3379"><span class="linenos">3379</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Generator.lastday_sql-3380"><a href="#Generator.lastday_sql-3380"><span class="linenos">3380</span></a>
+</span><span id="Generator.lastday_sql-3381"><a href="#Generator.lastday_sql-3381"><span class="linenos">3381</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="Generator.lastday_sql-3382"><a href="#Generator.lastday_sql-3382"><span class="linenos">3382</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="ow">and</span> <span class="n">unit</span> <span class="o">!=</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="Generator.lastday_sql-3383"><a href="#Generator.lastday_sql-3383"><span class="linenos">3383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Date parts are not supported in LAST_DAY.&quot;</span><span class="p">)</span>
+</span><span id="Generator.lastday_sql-3384"><a href="#Generator.lastday_sql-3384"><span class="linenos">3384</span></a>
+</span><span id="Generator.lastday_sql-3385"><a href="#Generator.lastday_sql-3385"><span class="linenos">3385</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;LAST_DAY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
diff --git a/docs/sqlglot/helper.html b/docs/sqlglot/helper.html
index e7363a9..a8366bd 100644
--- a/docs/sqlglot/helper.html
+++ b/docs/sqlglot/helper.html
@@ -1808,7 +1808,7 @@ belong to some totally-ordered set.</p>
<section id="DATE_UNITS">
<div class="attr variable">
<span class="name">DATE_UNITS</span> =
-<span class="default_value">{&#39;year_month&#39;, &#39;quarter&#39;, &#39;day&#39;, &#39;week&#39;, &#39;year&#39;, &#39;month&#39;}</span>
+<span class="default_value">{&#39;year_month&#39;, &#39;quarter&#39;, &#39;month&#39;, &#39;year&#39;, &#39;week&#39;, &#39;day&#39;}</span>
</div>
diff --git a/docs/sqlglot/jsonpath.html b/docs/sqlglot/jsonpath.html
index 4fbfc67..45500bc 100644
--- a/docs/sqlglot/jsonpath.html
+++ b/docs/sqlglot/jsonpath.html
@@ -384,6 +384,8 @@
<dd id="JSONPathTokenizer.IDENTIFIERS" class="variable"><a href="tokens.html#Tokenizer.IDENTIFIERS">IDENTIFIERS</a></dd>
<dd id="JSONPathTokenizer.QUOTES" class="variable"><a href="tokens.html#Tokenizer.QUOTES">QUOTES</a></dd>
<dd id="JSONPathTokenizer.VAR_SINGLE_TOKENS" class="variable"><a href="tokens.html#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a></dd>
+ <dd id="JSONPathTokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="variable"><a href="tokens.html#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a></dd>
+ <dd id="JSONPathTokenizer.HEREDOC_STRING_ALTERNATIVE" class="variable"><a href="tokens.html#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a></dd>
<dd id="JSONPathTokenizer.WHITE_SPACE" class="variable"><a href="tokens.html#Tokenizer.WHITE_SPACE">WHITE_SPACE</a></dd>
<dd id="JSONPathTokenizer.COMMANDS" class="variable"><a href="tokens.html#Tokenizer.COMMANDS">COMMANDS</a></dd>
<dd id="JSONPathTokenizer.COMMAND_PREFIX_TOKENS" class="variable"><a href="tokens.html#Tokenizer.COMMAND_PREFIX_TOKENS">COMMAND_PREFIX_TOKENS</a></dd>
@@ -576,7 +578,7 @@
<div class="attr variable">
<span class="name">ALL_JSON_PATH_PARTS</span> =
<input id="ALL_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="ALL_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="ALL_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;}</span>
</div>
diff --git a/docs/sqlglot/optimizer/annotate_types.html b/docs/sqlglot/optimizer/annotate_types.html
index 72b4abc..de56fa9 100644
--- a/docs/sqlglot/optimizer/annotate_types.html
+++ b/docs/sqlglot/optimizer/annotate_types.html
@@ -366,334 +366,338 @@
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">_annotate_timeunit</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Div</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">_annotate_div</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">),</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">),</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">struct</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="p">}</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">NESTED_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="p">}</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="c1"># Coercion functions for binary operations.</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="c1"># Map of type pairs to a callable that takes both sides of the binary operation and returns the resulting type.</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">BINARY_COERCIONS</span><span class="p">:</span> <span class="n">BinaryCoercions</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="p">{</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date_literal</span><span class="p">(</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="L-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 class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <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="o">**</span><span class="n">swap_all</span><span class="p">(</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="p">{</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="c1"># text + numeric will yield the numeric type to match most dialects&#39; semantics</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">numeric</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</span> <span class="k">else</span> <span class="n">r</span><span class="o">.</span><span class="n">type</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="p">)</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">for</span> <span class="n">numeric</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</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 class="p">),</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="p">{</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date</span><span class="p">(</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="p">),</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="p">}</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="p">),</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="p">}</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">binary_coercions</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">BinaryCoercions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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 class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</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">binary_coercions</span> <span class="o">=</span> <span class="n">binary_coercions</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">BINARY_COERCIONS</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="c1"># Caches the ids of annotated sub-Expressions, to ensure we only visit them once</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><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="k">def</span> <span class="nf">_set_type</span><span class="p">(</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span> <span class="c1"># type: ignore</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="k">def</span> <span class="nf">annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">continue</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">UDTF</span><span class="p">):</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">Lateral</span><span class="p">):</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</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="o">.</span><span class="n">expressions</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">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">continue</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">values</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="p">)</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="p">}</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="p">}</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">continue</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">))</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">_maybe_annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">if</span> <span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</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">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</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="n">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="n">annotator</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="p">)</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">def</span> <span class="nf">_annotate_args</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</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="k">return</span> <span class="n">expression</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">_maybe_coerce</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">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</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">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">type1_value</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type1</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">type2_value</span> <span class="o">=</span> <span class="n">type2</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type2</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</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="k">if</span> <span class="n">type1_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</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="n">type1</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</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="n">type2</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="n">type2_value</span> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1_value</span> <span class="c1"># type: ignore</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</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">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Connector</span><span class="p">):</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">if</span> <span class="n">left_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">and</span> <span class="n">right_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">:</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">expression</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">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</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="s2">&quot;BOOLEAN&quot;</span><span class="p">)),</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="p">)</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Predicate</span><span class="p">):</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">:</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">[(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)](</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">))</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</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">return</span> <span class="n">expression</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</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">Paren</span><span class="p">):</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</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">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">_annotate_struct_value</span><span class="p">(</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</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">DataType</span><span class="p">]</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="c1"># Case: key = value or key := value</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">array</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">struct</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</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="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="n">arg_expr</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="n">arg</span><span class="p">)</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a> <span class="k">if</span> <span class="n">promote</span><span class="p">:</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="k">if</span> <span class="n">array</span><span class="p">:</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="p">),</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="p">)</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">struct</span><span class="p">:</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_annotate_struct_value</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">],</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="p">),</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="p">)</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a>
-</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a> <span class="k">def</span> <span class="nf">_annotate_timeunit</span><span class="p">(</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <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">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">:</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date_literal</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a>
-</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">datatype</span><span class="p">)</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a>
-</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a> <span class="k">def</span> <span class="nf">_annotate_bracket</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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">:</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a>
-</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="n">bracket_arg</span> <span class="o">=</span> <span class="n">expression</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-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a>
-</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bracket_arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">):</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="k">elif</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="n">contained_type</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">type</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">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">contained_type</span><span class="p">)</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</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">_annotate_explode</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">),</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">),</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">struct</span><span class="o">=</span><span class="kc">True</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><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">NESTED_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="p">}</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="c1"># Coercion functions for binary operations.</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="c1"># Map of type pairs to a callable that takes both sides of the binary operation and returns the resulting type.</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">BINARY_COERCIONS</span><span class="p">:</span> <span class="n">BinaryCoercions</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="p">{</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date_literal</span><span class="p">(</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="p">)</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</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="p">),</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="p">{</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="c1"># text + numeric will yield the numeric type to match most dialects&#39; semantics</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">numeric</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</span> <span class="k">else</span> <span class="n">r</span><span class="o">.</span><span class="n">type</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="p">)</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">for</span> <span class="n">numeric</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="p">}</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <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">swap_all</span><span class="p">(</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="p">{</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date</span><span class="p">(</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="p">),</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="p">}</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <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="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">binary_coercions</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">BinaryCoercions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</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">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span> <span class="o">=</span> <span class="n">binary_coercions</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">BINARY_COERCIONS</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="c1"># Caches the ids of annotated sub-Expressions, to ensure we only visit them once</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="k">def</span> <span class="nf">_set_type</span><span class="p">(</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="c1"># type: ignore</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="k">continue</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">UDTF</span><span class="p">):</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">Lateral</span><span class="p">):</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</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="o">.</span><span class="n">expressions</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="k">continue</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">values</span><span class="p">,</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="p">)</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="p">}</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="p">}</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="k">continue</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">))</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">_maybe_annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="k">if</span> <span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">annotator</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</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><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">_annotate_args</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">_maybe_coerce</span><span class="p">(</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">type1_value</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type1</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">type2_value</span> <span class="o">=</span> <span class="n">type2</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type2</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="k">if</span> <span class="n">type1_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="n">type1</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">return</span> <span class="n">type2</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="k">return</span> <span class="n">type2_value</span> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1_value</span> <span class="c1"># type: ignore</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</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">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Connector</span><span class="p">):</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="k">if</span> <span class="n">left_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">and</span> <span class="n">right_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">:</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="n">expression</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">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</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="s2">&quot;BOOLEAN&quot;</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">else</span><span class="p">:</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Predicate</span><span class="p">):</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">:</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">[(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)](</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">))</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</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">Paren</span><span class="p">):</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</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">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">_annotate_struct_value</span><span class="p">(</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</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">DataType</span><span class="p">]</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="c1"># Case: key = value or key := value</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</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="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">array</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="n">struct</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">arg_expr</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="n">arg</span><span class="p">)</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a> <span class="k">if</span> <span class="n">promote</span><span class="p">:</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="k">if</span> <span class="n">array</span><span class="p">:</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="p">),</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="p">)</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="k">if</span> <span class="n">struct</span><span class="p">:</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_annotate_struct_value</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">],</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="p">),</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="p">)</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a>
+</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a> <span class="k">def</span> <span class="nf">_annotate_timeunit</span><span class="p">(</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a> <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">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a>
+</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">:</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date_literal</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a>
+</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">datatype</span><span class="p">)</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="k">def</span> <span class="nf">_annotate_bracket</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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">:</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a>
+</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="n">bracket_arg</span> <span class="o">=</span> <span class="n">expression</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-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a>
+</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bracket_arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">):</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="k">elif</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">type</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-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">))</span> <span class="ow">and</span> <span class="n">bracket_arg</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">keys</span><span class="p">:</span>
</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="n">index</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">bracket_arg</span><span class="p">)</span>
</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="n">value_type</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">value</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">value_type</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a>
-</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a>
-</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="k">def</span> <span class="nf">_annotate_div</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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">:</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a>
-</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">type</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">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="c1"># type: ignore</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a>
-</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <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;typed&quot;</span><span class="p">)</span>
-</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="ow">and</span> <span class="n">left_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="ow">and</span> <span class="n">right_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="p">):</span>
-</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
-</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a>
-</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">value</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos">575</span></a>
+</span><span id="L-576"><a href="#L-576"><span class="linenos">576</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos">577</span></a>
+</span><span id="L-578"><a href="#L-578"><span class="linenos">578</span></a> <span class="k">def</span> <span class="nf">_annotate_div</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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">:</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos">579</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos">580</span></a>
+</span><span id="L-581"><a href="#L-581"><span class="linenos">581</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">type</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">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="c1"># type: ignore</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos">582</span></a>
+</span><span id="L-583"><a href="#L-583"><span class="linenos">583</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos">584</span></a> <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;typed&quot;</span><span class="p">)</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos">585</span></a> <span class="ow">and</span> <span class="n">left_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos">586</span></a> <span class="ow">and</span> <span class="n">right_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos">587</span></a> <span class="p">):</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a>
+</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a>
+</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="k">def</span> <span class="nf">_annotate_explode</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">Explode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</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-597"><a href="#L-597"><span class="linenos">597</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -960,334 +964,338 @@
</span><span id="TypeAnnotator-264"><a href="#TypeAnnotator-264"><span class="linenos">264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">_annotate_timeunit</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="TypeAnnotator-265"><a href="#TypeAnnotator-265"><span class="linenos">265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
</span><span id="TypeAnnotator-266"><a href="#TypeAnnotator-266"><span class="linenos">266</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Div</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">_annotate_div</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="TypeAnnotator-267"><a href="#TypeAnnotator-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-268"><a href="#TypeAnnotator-268"><span class="linenos">268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-269"><a href="#TypeAnnotator-269"><span class="linenos">269</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
-</span><span id="TypeAnnotator-270"><a href="#TypeAnnotator-270"><span class="linenos">270</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-271"><a href="#TypeAnnotator-271"><span class="linenos">271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="TypeAnnotator-272"><a href="#TypeAnnotator-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="TypeAnnotator-273"><a href="#TypeAnnotator-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-274"><a href="#TypeAnnotator-274"><span class="linenos">274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-275"><a href="#TypeAnnotator-275"><span class="linenos">275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="TypeAnnotator-276"><a href="#TypeAnnotator-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">),</span>
-</span><span id="TypeAnnotator-277"><a href="#TypeAnnotator-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">),</span>
-</span><span id="TypeAnnotator-278"><a href="#TypeAnnotator-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="TypeAnnotator-279"><a href="#TypeAnnotator-279"><span class="linenos">279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
-</span><span id="TypeAnnotator-280"><a href="#TypeAnnotator-280"><span class="linenos">280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
-</span><span id="TypeAnnotator-281"><a href="#TypeAnnotator-281"><span class="linenos">281</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">struct</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="TypeAnnotator-282"><a href="#TypeAnnotator-282"><span class="linenos">282</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-283"><a href="#TypeAnnotator-283"><span class="linenos">283</span></a>
-</span><span id="TypeAnnotator-284"><a href="#TypeAnnotator-284"><span class="linenos">284</span></a> <span class="n">NESTED_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator-285"><a href="#TypeAnnotator-285"><span class="linenos">285</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="TypeAnnotator-286"><a href="#TypeAnnotator-286"><span class="linenos">286</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-287"><a href="#TypeAnnotator-287"><span class="linenos">287</span></a>
-</span><span id="TypeAnnotator-288"><a href="#TypeAnnotator-288"><span class="linenos">288</span></a> <span class="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
-</span><span id="TypeAnnotator-289"><a href="#TypeAnnotator-289"><span class="linenos">289</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="TypeAnnotator-290"><a href="#TypeAnnotator-290"><span class="linenos">290</span></a>
-</span><span id="TypeAnnotator-291"><a href="#TypeAnnotator-291"><span class="linenos">291</span></a> <span class="c1"># Coercion functions for binary operations.</span>
-</span><span id="TypeAnnotator-292"><a href="#TypeAnnotator-292"><span class="linenos">292</span></a> <span class="c1"># Map of type pairs to a callable that takes both sides of the binary operation and returns the resulting type.</span>
-</span><span id="TypeAnnotator-293"><a href="#TypeAnnotator-293"><span class="linenos">293</span></a> <span class="n">BINARY_COERCIONS</span><span class="p">:</span> <span class="n">BinaryCoercions</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator-294"><a href="#TypeAnnotator-294"><span class="linenos">294</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
-</span><span id="TypeAnnotator-295"><a href="#TypeAnnotator-295"><span class="linenos">295</span></a> <span class="p">{</span>
-</span><span id="TypeAnnotator-296"><a href="#TypeAnnotator-296"><span class="linenos">296</span></a> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date_literal</span><span class="p">(</span>
-</span><span id="TypeAnnotator-297"><a href="#TypeAnnotator-297"><span class="linenos">297</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="TypeAnnotator-298"><a href="#TypeAnnotator-298"><span class="linenos">298</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-299"><a href="#TypeAnnotator-299"><span class="linenos">299</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span>
-</span><span id="TypeAnnotator-300"><a href="#TypeAnnotator-300"><span class="linenos">300</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-301"><a href="#TypeAnnotator-301"><span class="linenos">301</span></a> <span class="p">),</span>
-</span><span id="TypeAnnotator-302"><a href="#TypeAnnotator-302"><span class="linenos">302</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
-</span><span id="TypeAnnotator-303"><a href="#TypeAnnotator-303"><span class="linenos">303</span></a> <span class="p">{</span>
-</span><span id="TypeAnnotator-304"><a href="#TypeAnnotator-304"><span class="linenos">304</span></a> <span class="c1"># text + numeric will yield the numeric type to match most dialects&#39; semantics</span>
-</span><span id="TypeAnnotator-305"><a href="#TypeAnnotator-305"><span class="linenos">305</span></a> <span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">numeric</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="TypeAnnotator-306"><a href="#TypeAnnotator-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</span> <span class="k">else</span> <span class="n">r</span><span class="o">.</span><span class="n">type</span>
-</span><span id="TypeAnnotator-307"><a href="#TypeAnnotator-307"><span class="linenos">307</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-308"><a href="#TypeAnnotator-308"><span class="linenos">308</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span>
-</span><span id="TypeAnnotator-309"><a href="#TypeAnnotator-309"><span class="linenos">309</span></a> <span class="k">for</span> <span class="n">numeric</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</span>
-</span><span id="TypeAnnotator-310"><a href="#TypeAnnotator-310"><span class="linenos">310</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-311"><a href="#TypeAnnotator-311"><span class="linenos">311</span></a> <span class="p">),</span>
-</span><span id="TypeAnnotator-312"><a href="#TypeAnnotator-312"><span class="linenos">312</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
-</span><span id="TypeAnnotator-313"><a href="#TypeAnnotator-313"><span class="linenos">313</span></a> <span class="p">{</span>
-</span><span id="TypeAnnotator-314"><a href="#TypeAnnotator-314"><span class="linenos">314</span></a> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date</span><span class="p">(</span>
-</span><span id="TypeAnnotator-315"><a href="#TypeAnnotator-315"><span class="linenos">315</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="TypeAnnotator-316"><a href="#TypeAnnotator-316"><span class="linenos">316</span></a> <span class="p">),</span>
-</span><span id="TypeAnnotator-317"><a href="#TypeAnnotator-317"><span class="linenos">317</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-318"><a href="#TypeAnnotator-318"><span class="linenos">318</span></a> <span class="p">),</span>
-</span><span id="TypeAnnotator-319"><a href="#TypeAnnotator-319"><span class="linenos">319</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-320"><a href="#TypeAnnotator-320"><span class="linenos">320</span></a>
-</span><span id="TypeAnnotator-321"><a href="#TypeAnnotator-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="TypeAnnotator-322"><a href="#TypeAnnotator-322"><span class="linenos">322</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="TypeAnnotator-323"><a href="#TypeAnnotator-323"><span class="linenos">323</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
-</span><span id="TypeAnnotator-324"><a href="#TypeAnnotator-324"><span class="linenos">324</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator-325"><a href="#TypeAnnotator-325"><span class="linenos">325</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator-326"><a href="#TypeAnnotator-326"><span class="linenos">326</span></a> <span class="n">binary_coercions</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">BinaryCoercions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator-327"><a href="#TypeAnnotator-327"><span class="linenos">327</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="TypeAnnotator-328"><a href="#TypeAnnotator-328"><span class="linenos">328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
-</span><span id="TypeAnnotator-329"><a href="#TypeAnnotator-329"><span class="linenos">329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
-</span><span id="TypeAnnotator-330"><a href="#TypeAnnotator-330"><span class="linenos">330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
-</span><span id="TypeAnnotator-331"><a href="#TypeAnnotator-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span> <span class="o">=</span> <span class="n">binary_coercions</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">BINARY_COERCIONS</span>
-</span><span id="TypeAnnotator-332"><a href="#TypeAnnotator-332"><span class="linenos">332</span></a>
-</span><span id="TypeAnnotator-333"><a href="#TypeAnnotator-333"><span class="linenos">333</span></a> <span class="c1"># Caches the ids of annotated sub-Expressions, to ensure we only visit them once</span>
-</span><span id="TypeAnnotator-334"><a href="#TypeAnnotator-334"><span class="linenos">334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="TypeAnnotator-335"><a href="#TypeAnnotator-335"><span class="linenos">335</span></a>
-</span><span id="TypeAnnotator-336"><a href="#TypeAnnotator-336"><span class="linenos">336</span></a> <span class="k">def</span> <span class="nf">_set_type</span><span class="p">(</span>
-</span><span id="TypeAnnotator-337"><a href="#TypeAnnotator-337"><span class="linenos">337</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
-</span><span id="TypeAnnotator-338"><a href="#TypeAnnotator-338"><span class="linenos">338</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="TypeAnnotator-339"><a href="#TypeAnnotator-339"><span class="linenos">339</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span> <span class="c1"># type: ignore</span>
-</span><span id="TypeAnnotator-340"><a href="#TypeAnnotator-340"><span class="linenos">340</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="TypeAnnotator-341"><a href="#TypeAnnotator-341"><span class="linenos">341</span></a>
-</span><span id="TypeAnnotator-342"><a href="#TypeAnnotator-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-343"><a href="#TypeAnnotator-343"><span class="linenos">343</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="TypeAnnotator-344"><a href="#TypeAnnotator-344"><span class="linenos">344</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="TypeAnnotator-345"><a href="#TypeAnnotator-345"><span class="linenos">345</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="TypeAnnotator-346"><a href="#TypeAnnotator-346"><span class="linenos">346</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="TypeAnnotator-347"><a href="#TypeAnnotator-347"><span class="linenos">347</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator-348"><a href="#TypeAnnotator-348"><span class="linenos">348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">UDTF</span><span class="p">):</span>
-</span><span id="TypeAnnotator-349"><a href="#TypeAnnotator-349"><span class="linenos">349</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="TypeAnnotator-350"><a href="#TypeAnnotator-350"><span class="linenos">350</span></a>
-</span><span id="TypeAnnotator-351"><a href="#TypeAnnotator-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">Lateral</span><span class="p">):</span>
-</span><span id="TypeAnnotator-352"><a href="#TypeAnnotator-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
-</span><span id="TypeAnnotator-353"><a href="#TypeAnnotator-353"><span class="linenos">353</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
-</span><span id="TypeAnnotator-354"><a href="#TypeAnnotator-354"><span class="linenos">354</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-355"><a href="#TypeAnnotator-355"><span class="linenos">355</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</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="o">.</span><span class="n">expressions</span>
-</span><span id="TypeAnnotator-356"><a href="#TypeAnnotator-356"><span class="linenos">356</span></a>
-</span><span id="TypeAnnotator-357"><a href="#TypeAnnotator-357"><span class="linenos">357</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="TypeAnnotator-358"><a href="#TypeAnnotator-358"><span class="linenos">358</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator-359"><a href="#TypeAnnotator-359"><span class="linenos">359</span></a>
-</span><span id="TypeAnnotator-360"><a href="#TypeAnnotator-360"><span class="linenos">360</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator-361"><a href="#TypeAnnotator-361"><span class="linenos">361</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
-</span><span id="TypeAnnotator-362"><a href="#TypeAnnotator-362"><span class="linenos">362</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
-</span><span id="TypeAnnotator-363"><a href="#TypeAnnotator-363"><span class="linenos">363</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="TypeAnnotator-364"><a href="#TypeAnnotator-364"><span class="linenos">364</span></a> <span class="n">values</span><span class="p">,</span>
-</span><span id="TypeAnnotator-365"><a href="#TypeAnnotator-365"><span class="linenos">365</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-366"><a href="#TypeAnnotator-366"><span class="linenos">366</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-367"><a href="#TypeAnnotator-367"><span class="linenos">367</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-368"><a href="#TypeAnnotator-368"><span class="linenos">368</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator-369"><a href="#TypeAnnotator-369"><span class="linenos">369</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
-</span><span id="TypeAnnotator-370"><a href="#TypeAnnotator-370"><span class="linenos">370</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator-371"><a href="#TypeAnnotator-371"><span class="linenos">371</span></a>
-</span><span id="TypeAnnotator-372"><a href="#TypeAnnotator-372"><span class="linenos">372</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
-</span><span id="TypeAnnotator-373"><a href="#TypeAnnotator-373"><span class="linenos">373</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="TypeAnnotator-374"><a href="#TypeAnnotator-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
-</span><span id="TypeAnnotator-375"><a href="#TypeAnnotator-375"><span class="linenos">375</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator-376"><a href="#TypeAnnotator-376"><span class="linenos">376</span></a>
-</span><span id="TypeAnnotator-377"><a href="#TypeAnnotator-377"><span class="linenos">377</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
-</span><span id="TypeAnnotator-378"><a href="#TypeAnnotator-378"><span class="linenos">378</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="TypeAnnotator-379"><a href="#TypeAnnotator-379"><span class="linenos">379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">))</span>
-</span><span id="TypeAnnotator-380"><a href="#TypeAnnotator-380"><span class="linenos">380</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
-</span><span id="TypeAnnotator-381"><a href="#TypeAnnotator-381"><span class="linenos">381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-382"><a href="#TypeAnnotator-382"><span class="linenos">382</span></a>
-</span><span id="TypeAnnotator-383"><a href="#TypeAnnotator-383"><span class="linenos">383</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
-</span><span id="TypeAnnotator-384"><a href="#TypeAnnotator-384"><span class="linenos">384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-385"><a href="#TypeAnnotator-385"><span class="linenos">385</span></a>
-</span><span id="TypeAnnotator-386"><a href="#TypeAnnotator-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
-</span><span id="TypeAnnotator-387"><a href="#TypeAnnotator-387"><span class="linenos">387</span></a>
-</span><span id="TypeAnnotator-388"><a href="#TypeAnnotator-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">_maybe_annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-389"><a href="#TypeAnnotator-389"><span class="linenos">389</span></a> <span class="k">if</span> <span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span>
-</span><span id="TypeAnnotator-390"><a href="#TypeAnnotator-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</span>
-</span><span id="TypeAnnotator-391"><a href="#TypeAnnotator-391"><span class="linenos">391</span></a>
-</span><span id="TypeAnnotator-392"><a href="#TypeAnnotator-392"><span class="linenos">392</span></a> <span class="n">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
-</span><span id="TypeAnnotator-393"><a href="#TypeAnnotator-393"><span class="linenos">393</span></a>
-</span><span id="TypeAnnotator-394"><a href="#TypeAnnotator-394"><span class="linenos">394</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="TypeAnnotator-395"><a href="#TypeAnnotator-395"><span class="linenos">395</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-396"><a href="#TypeAnnotator-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="n">annotator</span>
-</span><span id="TypeAnnotator-397"><a href="#TypeAnnotator-397"><span class="linenos">397</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-398"><a href="#TypeAnnotator-398"><span class="linenos">398</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-399"><a href="#TypeAnnotator-399"><span class="linenos">399</span></a>
-</span><span id="TypeAnnotator-400"><a href="#TypeAnnotator-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">_annotate_args</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-401"><a href="#TypeAnnotator-401"><span class="linenos">401</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
-</span><span id="TypeAnnotator-402"><a href="#TypeAnnotator-402"><span class="linenos">402</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="TypeAnnotator-403"><a href="#TypeAnnotator-403"><span class="linenos">403</span></a>
-</span><span id="TypeAnnotator-404"><a href="#TypeAnnotator-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-405"><a href="#TypeAnnotator-405"><span class="linenos">405</span></a>
-</span><span id="TypeAnnotator-406"><a href="#TypeAnnotator-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">_maybe_coerce</span><span class="p">(</span>
-</span><span id="TypeAnnotator-407"><a href="#TypeAnnotator-407"><span class="linenos">407</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
-</span><span id="TypeAnnotator-408"><a href="#TypeAnnotator-408"><span class="linenos">408</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
-</span><span id="TypeAnnotator-409"><a href="#TypeAnnotator-409"><span class="linenos">409</span></a> <span class="n">type1_value</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type1</span>
-</span><span id="TypeAnnotator-410"><a href="#TypeAnnotator-410"><span class="linenos">410</span></a> <span class="n">type2_value</span> <span class="o">=</span> <span class="n">type2</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type2</span>
-</span><span id="TypeAnnotator-411"><a href="#TypeAnnotator-411"><span class="linenos">411</span></a>
-</span><span id="TypeAnnotator-412"><a href="#TypeAnnotator-412"><span class="linenos">412</span></a> <span class="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
-</span><span id="TypeAnnotator-413"><a href="#TypeAnnotator-413"><span class="linenos">413</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
-</span><span id="TypeAnnotator-414"><a href="#TypeAnnotator-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span>
-</span><span id="TypeAnnotator-415"><a href="#TypeAnnotator-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
-</span><span id="TypeAnnotator-416"><a href="#TypeAnnotator-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="TypeAnnotator-417"><a href="#TypeAnnotator-417"><span class="linenos">417</span></a>
-</span><span id="TypeAnnotator-418"><a href="#TypeAnnotator-418"><span class="linenos">418</span></a> <span class="k">if</span> <span class="n">type1_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-419"><a href="#TypeAnnotator-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="n">type1</span>
-</span><span id="TypeAnnotator-420"><a href="#TypeAnnotator-420"><span class="linenos">420</span></a> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-421"><a href="#TypeAnnotator-421"><span class="linenos">421</span></a> <span class="k">return</span> <span class="n">type2</span>
-</span><span id="TypeAnnotator-422"><a href="#TypeAnnotator-422"><span class="linenos">422</span></a>
-</span><span id="TypeAnnotator-423"><a href="#TypeAnnotator-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="n">type2_value</span> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1_value</span> <span class="c1"># type: ignore</span>
-</span><span id="TypeAnnotator-424"><a href="#TypeAnnotator-424"><span class="linenos">424</span></a>
-</span><span id="TypeAnnotator-425"><a href="#TypeAnnotator-425"><span class="linenos">425</span></a> <span class="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
-</span><span id="TypeAnnotator-426"><a href="#TypeAnnotator-426"><span class="linenos">426</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
-</span><span id="TypeAnnotator-427"><a href="#TypeAnnotator-427"><span class="linenos">427</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</span>
-</span><span id="TypeAnnotator-428"><a href="#TypeAnnotator-428"><span class="linenos">428</span></a>
-</span><span id="TypeAnnotator-429"><a href="#TypeAnnotator-429"><span class="linenos">429</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-430"><a href="#TypeAnnotator-430"><span class="linenos">430</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</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">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
-</span><span id="TypeAnnotator-431"><a href="#TypeAnnotator-431"><span class="linenos">431</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-432"><a href="#TypeAnnotator-432"><span class="linenos">432</span></a>
-</span><span id="TypeAnnotator-433"><a href="#TypeAnnotator-433"><span class="linenos">433</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
-</span><span id="TypeAnnotator-434"><a href="#TypeAnnotator-434"><span class="linenos">434</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span>
-</span><span id="TypeAnnotator-435"><a href="#TypeAnnotator-435"><span class="linenos">435</span></a>
-</span><span id="TypeAnnotator-436"><a href="#TypeAnnotator-436"><span class="linenos">436</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Connector</span><span class="p">):</span>
-</span><span id="TypeAnnotator-437"><a href="#TypeAnnotator-437"><span class="linenos">437</span></a> <span class="k">if</span> <span class="n">left_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">and</span> <span class="n">right_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">:</span>
-</span><span id="TypeAnnotator-438"><a href="#TypeAnnotator-438"><span class="linenos">438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="TypeAnnotator-439"><a href="#TypeAnnotator-439"><span class="linenos">439</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
-</span><span id="TypeAnnotator-440"><a href="#TypeAnnotator-440"><span class="linenos">440</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
-</span><span id="TypeAnnotator-441"><a href="#TypeAnnotator-441"><span class="linenos">441</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="TypeAnnotator-442"><a href="#TypeAnnotator-442"><span class="linenos">442</span></a> <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="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</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="s2">&quot;BOOLEAN&quot;</span><span class="p">)),</span>
-</span><span id="TypeAnnotator-443"><a href="#TypeAnnotator-443"><span class="linenos">443</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-444"><a href="#TypeAnnotator-444"><span class="linenos">444</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-445"><a href="#TypeAnnotator-445"><span class="linenos">445</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-446"><a href="#TypeAnnotator-446"><span class="linenos">446</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Predicate</span><span class="p">):</span>
-</span><span id="TypeAnnotator-447"><a href="#TypeAnnotator-447"><span class="linenos">447</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-448"><a href="#TypeAnnotator-448"><span class="linenos">448</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">:</span>
-</span><span id="TypeAnnotator-449"><a href="#TypeAnnotator-449"><span class="linenos">449</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">[(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)](</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">))</span>
-</span><span id="TypeAnnotator-450"><a href="#TypeAnnotator-450"><span class="linenos">450</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-451"><a href="#TypeAnnotator-451"><span class="linenos">451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</span>
-</span><span id="TypeAnnotator-452"><a href="#TypeAnnotator-452"><span class="linenos">452</span></a>
-</span><span id="TypeAnnotator-453"><a href="#TypeAnnotator-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-454"><a href="#TypeAnnotator-454"><span class="linenos">454</span></a>
-</span><span id="TypeAnnotator-455"><a href="#TypeAnnotator-455"><span class="linenos">455</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-456"><a href="#TypeAnnotator-456"><span class="linenos">456</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-457"><a href="#TypeAnnotator-457"><span class="linenos">457</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-458"><a href="#TypeAnnotator-458"><span class="linenos">458</span></a>
-</span><span id="TypeAnnotator-459"><a href="#TypeAnnotator-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</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">Paren</span><span class="p">):</span>
-</span><span id="TypeAnnotator-460"><a href="#TypeAnnotator-460"><span class="linenos">460</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-461"><a href="#TypeAnnotator-461"><span class="linenos">461</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-462"><a href="#TypeAnnotator-462"><span class="linenos">462</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-463"><a href="#TypeAnnotator-463"><span class="linenos">463</span></a>
-</span><span id="TypeAnnotator-464"><a href="#TypeAnnotator-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-465"><a href="#TypeAnnotator-465"><span class="linenos">465</span></a>
-</span><span id="TypeAnnotator-466"><a href="#TypeAnnotator-466"><span class="linenos">466</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-467"><a href="#TypeAnnotator-467"><span class="linenos">467</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
-</span><span id="TypeAnnotator-468"><a href="#TypeAnnotator-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="TypeAnnotator-469"><a href="#TypeAnnotator-469"><span class="linenos">469</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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="TypeAnnotator-470"><a href="#TypeAnnotator-470"><span class="linenos">470</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="TypeAnnotator-471"><a href="#TypeAnnotator-471"><span class="linenos">471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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><span id="TypeAnnotator-472"><a href="#TypeAnnotator-472"><span class="linenos">472</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-473"><a href="#TypeAnnotator-473"><span class="linenos">473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
-</span><span id="TypeAnnotator-474"><a href="#TypeAnnotator-474"><span class="linenos">474</span></a>
-</span><span id="TypeAnnotator-475"><a href="#TypeAnnotator-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-476"><a href="#TypeAnnotator-476"><span class="linenos">476</span></a>
-</span><span id="TypeAnnotator-477"><a href="#TypeAnnotator-477"><span class="linenos">477</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-478"><a href="#TypeAnnotator-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</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">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-479"><a href="#TypeAnnotator-479"><span class="linenos">479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-480"><a href="#TypeAnnotator-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-481"><a href="#TypeAnnotator-481"><span class="linenos">481</span></a>
-</span><span id="TypeAnnotator-482"><a href="#TypeAnnotator-482"><span class="linenos">482</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-483"><a href="#TypeAnnotator-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">_annotate_struct_value</span><span class="p">(</span>
-</span><span id="TypeAnnotator-484"><a href="#TypeAnnotator-484"><span class="linenos">484</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span>
-</span><span id="TypeAnnotator-485"><a href="#TypeAnnotator-485"><span class="linenos">485</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">DataType</span><span class="p">]</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span>
-</span><span id="TypeAnnotator-486"><a href="#TypeAnnotator-486"><span class="linenos">486</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
-</span><span id="TypeAnnotator-487"><a href="#TypeAnnotator-487"><span class="linenos">487</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="TypeAnnotator-488"><a href="#TypeAnnotator-488"><span class="linenos">488</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-489"><a href="#TypeAnnotator-489"><span class="linenos">489</span></a>
-</span><span id="TypeAnnotator-490"><a href="#TypeAnnotator-490"><span class="linenos">490</span></a> <span class="c1"># Case: key = value or key := value</span>
-</span><span id="TypeAnnotator-491"><a href="#TypeAnnotator-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
-</span><span id="TypeAnnotator-492"><a href="#TypeAnnotator-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-493"><a href="#TypeAnnotator-493"><span class="linenos">493</span></a>
-</span><span id="TypeAnnotator-494"><a href="#TypeAnnotator-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span>
-</span><span id="TypeAnnotator-495"><a href="#TypeAnnotator-495"><span class="linenos">495</span></a>
-</span><span id="TypeAnnotator-496"><a href="#TypeAnnotator-496"><span class="linenos">496</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
-</span><span id="TypeAnnotator-497"><a href="#TypeAnnotator-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span>
-</span><span id="TypeAnnotator-498"><a href="#TypeAnnotator-498"><span class="linenos">498</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="TypeAnnotator-499"><a href="#TypeAnnotator-499"><span class="linenos">499</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span>
-</span><span id="TypeAnnotator-500"><a href="#TypeAnnotator-500"><span class="linenos">500</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="TypeAnnotator-501"><a href="#TypeAnnotator-501"><span class="linenos">501</span></a> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TypeAnnotator-502"><a href="#TypeAnnotator-502"><span class="linenos">502</span></a> <span class="n">array</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TypeAnnotator-503"><a href="#TypeAnnotator-503"><span class="linenos">503</span></a> <span class="n">struct</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TypeAnnotator-504"><a href="#TypeAnnotator-504"><span class="linenos">504</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator-505"><a href="#TypeAnnotator-505"><span class="linenos">505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-506"><a href="#TypeAnnotator-506"><span class="linenos">506</span></a>
-</span><span id="TypeAnnotator-507"><a href="#TypeAnnotator-507"><span class="linenos">507</span></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="TypeAnnotator-508"><a href="#TypeAnnotator-508"><span class="linenos">508</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="TypeAnnotator-509"><a href="#TypeAnnotator-509"><span class="linenos">509</span></a> <span class="n">arg_expr</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="n">arg</span><span class="p">)</span>
-</span><span id="TypeAnnotator-510"><a href="#TypeAnnotator-510"><span class="linenos">510</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
-</span><span id="TypeAnnotator-511"><a href="#TypeAnnotator-511"><span class="linenos">511</span></a>
-</span><span id="TypeAnnotator-512"><a href="#TypeAnnotator-512"><span class="linenos">512</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TypeAnnotator-513"><a href="#TypeAnnotator-513"><span class="linenos">513</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="TypeAnnotator-514"><a href="#TypeAnnotator-514"><span class="linenos">514</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-515"><a href="#TypeAnnotator-515"><span class="linenos">515</span></a>
-</span><span id="TypeAnnotator-516"><a href="#TypeAnnotator-516"><span class="linenos">516</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-517"><a href="#TypeAnnotator-517"><span class="linenos">517</span></a>
-</span><span id="TypeAnnotator-518"><a href="#TypeAnnotator-518"><span class="linenos">518</span></a> <span class="k">if</span> <span class="n">promote</span><span class="p">:</span>
-</span><span id="TypeAnnotator-519"><a href="#TypeAnnotator-519"><span class="linenos">519</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-520"><a href="#TypeAnnotator-520"><span class="linenos">520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
-</span><span id="TypeAnnotator-521"><a href="#TypeAnnotator-521"><span class="linenos">521</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-522"><a href="#TypeAnnotator-522"><span class="linenos">522</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
-</span><span id="TypeAnnotator-523"><a href="#TypeAnnotator-523"><span class="linenos">523</span></a>
-</span><span id="TypeAnnotator-524"><a href="#TypeAnnotator-524"><span class="linenos">524</span></a> <span class="k">if</span> <span class="n">array</span><span class="p">:</span>
-</span><span id="TypeAnnotator-525"><a href="#TypeAnnotator-525"><span class="linenos">525</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
-</span><span id="TypeAnnotator-526"><a href="#TypeAnnotator-526"><span class="linenos">526</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="TypeAnnotator-527"><a href="#TypeAnnotator-527"><span class="linenos">527</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="TypeAnnotator-528"><a href="#TypeAnnotator-528"><span class="linenos">528</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="TypeAnnotator-529"><a href="#TypeAnnotator-529"><span class="linenos">529</span></a> <span class="p">),</span>
-</span><span id="TypeAnnotator-530"><a href="#TypeAnnotator-530"><span class="linenos">530</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-531"><a href="#TypeAnnotator-531"><span class="linenos">531</span></a>
-</span><span id="TypeAnnotator-532"><a href="#TypeAnnotator-532"><span class="linenos">532</span></a> <span class="k">if</span> <span class="n">struct</span><span class="p">:</span>
-</span><span id="TypeAnnotator-533"><a href="#TypeAnnotator-533"><span class="linenos">533</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
-</span><span id="TypeAnnotator-534"><a href="#TypeAnnotator-534"><span class="linenos">534</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="TypeAnnotator-535"><a href="#TypeAnnotator-535"><span class="linenos">535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="TypeAnnotator-536"><a href="#TypeAnnotator-536"><span class="linenos">536</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="TypeAnnotator-537"><a href="#TypeAnnotator-537"><span class="linenos">537</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_annotate_struct_value</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">],</span>
-</span><span id="TypeAnnotator-538"><a href="#TypeAnnotator-538"><span class="linenos">538</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="TypeAnnotator-539"><a href="#TypeAnnotator-539"><span class="linenos">539</span></a> <span class="p">),</span>
-</span><span id="TypeAnnotator-540"><a href="#TypeAnnotator-540"><span class="linenos">540</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator-541"><a href="#TypeAnnotator-541"><span class="linenos">541</span></a>
-</span><span id="TypeAnnotator-542"><a href="#TypeAnnotator-542"><span class="linenos">542</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-543"><a href="#TypeAnnotator-543"><span class="linenos">543</span></a>
-</span><span id="TypeAnnotator-544"><a href="#TypeAnnotator-544"><span class="linenos">544</span></a> <span class="k">def</span> <span class="nf">_annotate_timeunit</span><span class="p">(</span>
-</span><span id="TypeAnnotator-545"><a href="#TypeAnnotator-545"><span class="linenos">545</span></a> <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">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span>
-</span><span id="TypeAnnotator-546"><a href="#TypeAnnotator-546"><span class="linenos">546</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span>
-</span><span id="TypeAnnotator-547"><a href="#TypeAnnotator-547"><span class="linenos">547</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-548"><a href="#TypeAnnotator-548"><span class="linenos">548</span></a>
-</span><span id="TypeAnnotator-549"><a href="#TypeAnnotator-549"><span class="linenos">549</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-550"><a href="#TypeAnnotator-550"><span class="linenos">550</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date_literal</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="TypeAnnotator-551"><a href="#TypeAnnotator-551"><span class="linenos">551</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="TypeAnnotator-552"><a href="#TypeAnnotator-552"><span class="linenos">552</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="TypeAnnotator-553"><a href="#TypeAnnotator-553"><span class="linenos">553</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-554"><a href="#TypeAnnotator-554"><span class="linenos">554</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="TypeAnnotator-555"><a href="#TypeAnnotator-555"><span class="linenos">555</span></a>
-</span><span id="TypeAnnotator-556"><a href="#TypeAnnotator-556"><span class="linenos">556</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">datatype</span><span class="p">)</span>
-</span><span id="TypeAnnotator-557"><a href="#TypeAnnotator-557"><span class="linenos">557</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-558"><a href="#TypeAnnotator-558"><span class="linenos">558</span></a>
-</span><span id="TypeAnnotator-559"><a href="#TypeAnnotator-559"><span class="linenos">559</span></a> <span class="k">def</span> <span class="nf">_annotate_bracket</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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">:</span>
-</span><span id="TypeAnnotator-560"><a href="#TypeAnnotator-560"><span class="linenos">560</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-561"><a href="#TypeAnnotator-561"><span class="linenos">561</span></a>
-</span><span id="TypeAnnotator-562"><a href="#TypeAnnotator-562"><span class="linenos">562</span></a> <span class="n">bracket_arg</span> <span class="o">=</span> <span class="n">expression</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="TypeAnnotator-563"><a href="#TypeAnnotator-563"><span class="linenos">563</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="TypeAnnotator-564"><a href="#TypeAnnotator-564"><span class="linenos">564</span></a>
-</span><span id="TypeAnnotator-565"><a href="#TypeAnnotator-565"><span class="linenos">565</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bracket_arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">):</span>
-</span><span id="TypeAnnotator-566"><a href="#TypeAnnotator-566"><span class="linenos">566</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator-567"><a href="#TypeAnnotator-567"><span class="linenos">567</span></a> <span class="k">elif</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
-</span><span id="TypeAnnotator-568"><a href="#TypeAnnotator-568"><span class="linenos">568</span></a> <span class="n">contained_type</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">type</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">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="TypeAnnotator-569"><a href="#TypeAnnotator-569"><span class="linenos">569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">contained_type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-267"><a href="#TypeAnnotator-267"><span class="linenos">267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</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">_annotate_explode</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="TypeAnnotator-268"><a href="#TypeAnnotator-268"><span class="linenos">268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-269"><a href="#TypeAnnotator-269"><span class="linenos">269</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-270"><a href="#TypeAnnotator-270"><span class="linenos">270</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">),</span>
+</span><span id="TypeAnnotator-271"><a href="#TypeAnnotator-271"><span class="linenos">271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Least</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-272"><a href="#TypeAnnotator-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">_annotate_literal</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="TypeAnnotator-273"><a href="#TypeAnnotator-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="TypeAnnotator-274"><a href="#TypeAnnotator-274"><span class="linenos">274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-275"><a href="#TypeAnnotator-275"><span class="linenos">275</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-276"><a href="#TypeAnnotator-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Null</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="TypeAnnotator-277"><a href="#TypeAnnotator-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Nullif</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">),</span>
+</span><span id="TypeAnnotator-278"><a href="#TypeAnnotator-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</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">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">),</span>
+</span><span id="TypeAnnotator-279"><a href="#TypeAnnotator-279"><span class="linenos">279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sum</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">promote</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TypeAnnotator-280"><a href="#TypeAnnotator-280"><span class="linenos">280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">_annotate_with_type</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;to&quot;</span><span class="p">]),</span>
+</span><span id="TypeAnnotator-281"><a href="#TypeAnnotator-281"><span class="linenos">281</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">),</span>
+</span><span id="TypeAnnotator-282"><a href="#TypeAnnotator-282"><span class="linenos">282</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</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">_annotate_by_args</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">struct</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TypeAnnotator-283"><a href="#TypeAnnotator-283"><span class="linenos">283</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-284"><a href="#TypeAnnotator-284"><span class="linenos">284</span></a>
+</span><span id="TypeAnnotator-285"><a href="#TypeAnnotator-285"><span class="linenos">285</span></a> <span class="n">NESTED_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator-286"><a href="#TypeAnnotator-286"><span class="linenos">286</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="TypeAnnotator-287"><a href="#TypeAnnotator-287"><span class="linenos">287</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-288"><a href="#TypeAnnotator-288"><span class="linenos">288</span></a>
+</span><span id="TypeAnnotator-289"><a href="#TypeAnnotator-289"><span class="linenos">289</span></a> <span class="c1"># Specifies what types a given type can be coerced into (autofilled)</span>
+</span><span id="TypeAnnotator-290"><a href="#TypeAnnotator-290"><span class="linenos">290</span></a> <span class="n">COERCES_TO</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="TypeAnnotator-291"><a href="#TypeAnnotator-291"><span class="linenos">291</span></a>
+</span><span id="TypeAnnotator-292"><a href="#TypeAnnotator-292"><span class="linenos">292</span></a> <span class="c1"># Coercion functions for binary operations.</span>
+</span><span id="TypeAnnotator-293"><a href="#TypeAnnotator-293"><span class="linenos">293</span></a> <span class="c1"># Map of type pairs to a callable that takes both sides of the binary operation and returns the resulting type.</span>
+</span><span id="TypeAnnotator-294"><a href="#TypeAnnotator-294"><span class="linenos">294</span></a> <span class="n">BINARY_COERCIONS</span><span class="p">:</span> <span class="n">BinaryCoercions</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator-295"><a href="#TypeAnnotator-295"><span class="linenos">295</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
+</span><span id="TypeAnnotator-296"><a href="#TypeAnnotator-296"><span class="linenos">296</span></a> <span class="p">{</span>
+</span><span id="TypeAnnotator-297"><a href="#TypeAnnotator-297"><span class="linenos">297</span></a> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date_literal</span><span class="p">(</span>
+</span><span id="TypeAnnotator-298"><a href="#TypeAnnotator-298"><span class="linenos">298</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="TypeAnnotator-299"><a href="#TypeAnnotator-299"><span class="linenos">299</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-300"><a href="#TypeAnnotator-300"><span class="linenos">300</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span>
+</span><span id="TypeAnnotator-301"><a href="#TypeAnnotator-301"><span class="linenos">301</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-302"><a href="#TypeAnnotator-302"><span class="linenos">302</span></a> <span class="p">),</span>
+</span><span id="TypeAnnotator-303"><a href="#TypeAnnotator-303"><span class="linenos">303</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
+</span><span id="TypeAnnotator-304"><a href="#TypeAnnotator-304"><span class="linenos">304</span></a> <span class="p">{</span>
+</span><span id="TypeAnnotator-305"><a href="#TypeAnnotator-305"><span class="linenos">305</span></a> <span class="c1"># text + numeric will yield the numeric type to match most dialects&#39; semantics</span>
+</span><span id="TypeAnnotator-306"><a href="#TypeAnnotator-306"><span class="linenos">306</span></a> <span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">numeric</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="TypeAnnotator-307"><a href="#TypeAnnotator-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</span> <span class="k">else</span> <span class="n">r</span><span class="o">.</span><span class="n">type</span>
+</span><span id="TypeAnnotator-308"><a href="#TypeAnnotator-308"><span class="linenos">308</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-309"><a href="#TypeAnnotator-309"><span class="linenos">309</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span>
+</span><span id="TypeAnnotator-310"><a href="#TypeAnnotator-310"><span class="linenos">310</span></a> <span class="k">for</span> <span class="n">numeric</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">NUMERIC_TYPES</span>
+</span><span id="TypeAnnotator-311"><a href="#TypeAnnotator-311"><span class="linenos">311</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-312"><a href="#TypeAnnotator-312"><span class="linenos">312</span></a> <span class="p">),</span>
+</span><span id="TypeAnnotator-313"><a href="#TypeAnnotator-313"><span class="linenos">313</span></a> <span class="o">**</span><span class="n">swap_all</span><span class="p">(</span>
+</span><span id="TypeAnnotator-314"><a href="#TypeAnnotator-314"><span class="linenos">314</span></a> <span class="p">{</span>
+</span><span id="TypeAnnotator-315"><a href="#TypeAnnotator-315"><span class="linenos">315</span></a> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">):</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">:</span> <span class="n">_coerce_date</span><span class="p">(</span>
+</span><span id="TypeAnnotator-316"><a href="#TypeAnnotator-316"><span class="linenos">316</span></a> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="TypeAnnotator-317"><a href="#TypeAnnotator-317"><span class="linenos">317</span></a> <span class="p">),</span>
+</span><span id="TypeAnnotator-318"><a href="#TypeAnnotator-318"><span class="linenos">318</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-319"><a href="#TypeAnnotator-319"><span class="linenos">319</span></a> <span class="p">),</span>
+</span><span id="TypeAnnotator-320"><a href="#TypeAnnotator-320"><span class="linenos">320</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-321"><a href="#TypeAnnotator-321"><span class="linenos">321</span></a>
+</span><span id="TypeAnnotator-322"><a href="#TypeAnnotator-322"><span class="linenos">322</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="TypeAnnotator-323"><a href="#TypeAnnotator-323"><span class="linenos">323</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="TypeAnnotator-324"><a href="#TypeAnnotator-324"><span class="linenos">324</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
+</span><span id="TypeAnnotator-325"><a href="#TypeAnnotator-325"><span class="linenos">325</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator-326"><a href="#TypeAnnotator-326"><span class="linenos">326</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator-327"><a href="#TypeAnnotator-327"><span class="linenos">327</span></a> <span class="n">binary_coercions</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">BinaryCoercions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator-328"><a href="#TypeAnnotator-328"><span class="linenos">328</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="TypeAnnotator-329"><a href="#TypeAnnotator-329"><span class="linenos">329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
+</span><span id="TypeAnnotator-330"><a href="#TypeAnnotator-330"><span class="linenos">330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
+</span><span id="TypeAnnotator-331"><a href="#TypeAnnotator-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
+</span><span id="TypeAnnotator-332"><a href="#TypeAnnotator-332"><span class="linenos">332</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span> <span class="o">=</span> <span class="n">binary_coercions</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">BINARY_COERCIONS</span>
+</span><span id="TypeAnnotator-333"><a href="#TypeAnnotator-333"><span class="linenos">333</span></a>
+</span><span id="TypeAnnotator-334"><a href="#TypeAnnotator-334"><span class="linenos">334</span></a> <span class="c1"># Caches the ids of annotated sub-Expressions, to ensure we only visit them once</span>
+</span><span id="TypeAnnotator-335"><a href="#TypeAnnotator-335"><span class="linenos">335</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="TypeAnnotator-336"><a href="#TypeAnnotator-336"><span class="linenos">336</span></a>
+</span><span id="TypeAnnotator-337"><a href="#TypeAnnotator-337"><span class="linenos">337</span></a> <span class="k">def</span> <span class="nf">_set_type</span><span class="p">(</span>
+</span><span id="TypeAnnotator-338"><a href="#TypeAnnotator-338"><span class="linenos">338</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]</span>
+</span><span id="TypeAnnotator-339"><a href="#TypeAnnotator-339"><span class="linenos">339</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="TypeAnnotator-340"><a href="#TypeAnnotator-340"><span class="linenos">340</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">target_type</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="c1"># type: ignore</span>
+</span><span id="TypeAnnotator-341"><a href="#TypeAnnotator-341"><span class="linenos">341</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="TypeAnnotator-342"><a href="#TypeAnnotator-342"><span class="linenos">342</span></a>
+</span><span id="TypeAnnotator-343"><a href="#TypeAnnotator-343"><span class="linenos">343</span></a> <span class="k">def</span> <span class="nf">annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-344"><a href="#TypeAnnotator-344"><span class="linenos">344</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="TypeAnnotator-345"><a href="#TypeAnnotator-345"><span class="linenos">345</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="TypeAnnotator-346"><a href="#TypeAnnotator-346"><span class="linenos">346</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="TypeAnnotator-347"><a href="#TypeAnnotator-347"><span class="linenos">347</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="TypeAnnotator-348"><a href="#TypeAnnotator-348"><span class="linenos">348</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator-349"><a href="#TypeAnnotator-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">UDTF</span><span class="p">):</span>
+</span><span id="TypeAnnotator-350"><a href="#TypeAnnotator-350"><span class="linenos">350</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="TypeAnnotator-351"><a href="#TypeAnnotator-351"><span class="linenos">351</span></a>
+</span><span id="TypeAnnotator-352"><a href="#TypeAnnotator-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">Lateral</span><span class="p">):</span>
+</span><span id="TypeAnnotator-353"><a href="#TypeAnnotator-353"><span class="linenos">353</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
+</span><span id="TypeAnnotator-354"><a href="#TypeAnnotator-354"><span class="linenos">354</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
+</span><span id="TypeAnnotator-355"><a href="#TypeAnnotator-355"><span class="linenos">355</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-356"><a href="#TypeAnnotator-356"><span class="linenos">356</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</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="o">.</span><span class="n">expressions</span>
+</span><span id="TypeAnnotator-357"><a href="#TypeAnnotator-357"><span class="linenos">357</span></a>
+</span><span id="TypeAnnotator-358"><a href="#TypeAnnotator-358"><span class="linenos">358</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="TypeAnnotator-359"><a href="#TypeAnnotator-359"><span class="linenos">359</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator-360"><a href="#TypeAnnotator-360"><span class="linenos">360</span></a>
+</span><span id="TypeAnnotator-361"><a href="#TypeAnnotator-361"><span class="linenos">361</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator-362"><a href="#TypeAnnotator-362"><span class="linenos">362</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
+</span><span id="TypeAnnotator-363"><a href="#TypeAnnotator-363"><span class="linenos">363</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
+</span><span id="TypeAnnotator-364"><a href="#TypeAnnotator-364"><span class="linenos">364</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="TypeAnnotator-365"><a href="#TypeAnnotator-365"><span class="linenos">365</span></a> <span class="n">values</span><span class="p">,</span>
+</span><span id="TypeAnnotator-366"><a href="#TypeAnnotator-366"><span class="linenos">366</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-367"><a href="#TypeAnnotator-367"><span class="linenos">367</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-368"><a href="#TypeAnnotator-368"><span class="linenos">368</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-369"><a href="#TypeAnnotator-369"><span class="linenos">369</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator-370"><a href="#TypeAnnotator-370"><span class="linenos">370</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
+</span><span id="TypeAnnotator-371"><a href="#TypeAnnotator-371"><span class="linenos">371</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator-372"><a href="#TypeAnnotator-372"><span class="linenos">372</span></a>
+</span><span id="TypeAnnotator-373"><a href="#TypeAnnotator-373"><span class="linenos">373</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
+</span><span id="TypeAnnotator-374"><a href="#TypeAnnotator-374"><span class="linenos">374</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="TypeAnnotator-375"><a href="#TypeAnnotator-375"><span class="linenos">375</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
+</span><span id="TypeAnnotator-376"><a href="#TypeAnnotator-376"><span class="linenos">376</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator-377"><a href="#TypeAnnotator-377"><span class="linenos">377</span></a>
+</span><span id="TypeAnnotator-378"><a href="#TypeAnnotator-378"><span class="linenos">378</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
+</span><span id="TypeAnnotator-379"><a href="#TypeAnnotator-379"><span class="linenos">379</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="TypeAnnotator-380"><a href="#TypeAnnotator-380"><span class="linenos">380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">))</span>
+</span><span id="TypeAnnotator-381"><a href="#TypeAnnotator-381"><span class="linenos">381</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
+</span><span id="TypeAnnotator-382"><a href="#TypeAnnotator-382"><span class="linenos">382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-383"><a href="#TypeAnnotator-383"><span class="linenos">383</span></a>
+</span><span id="TypeAnnotator-384"><a href="#TypeAnnotator-384"><span class="linenos">384</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
+</span><span id="TypeAnnotator-385"><a href="#TypeAnnotator-385"><span class="linenos">385</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-386"><a href="#TypeAnnotator-386"><span class="linenos">386</span></a>
+</span><span id="TypeAnnotator-387"><a href="#TypeAnnotator-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
+</span><span id="TypeAnnotator-388"><a href="#TypeAnnotator-388"><span class="linenos">388</span></a>
+</span><span id="TypeAnnotator-389"><a href="#TypeAnnotator-389"><span class="linenos">389</span></a> <span class="k">def</span> <span class="nf">_maybe_annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-390"><a href="#TypeAnnotator-390"><span class="linenos">390</span></a> <span class="k">if</span> <span class="nb">id</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span>
+</span><span id="TypeAnnotator-391"><a href="#TypeAnnotator-391"><span class="linenos">391</span></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># We&#39;ve already inferred the expression&#39;s type</span>
+</span><span id="TypeAnnotator-392"><a href="#TypeAnnotator-392"><span class="linenos">392</span></a>
+</span><span id="TypeAnnotator-393"><a href="#TypeAnnotator-393"><span class="linenos">393</span></a> <span class="n">annotator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
+</span><span id="TypeAnnotator-394"><a href="#TypeAnnotator-394"><span class="linenos">394</span></a>
+</span><span id="TypeAnnotator-395"><a href="#TypeAnnotator-395"><span class="linenos">395</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="TypeAnnotator-396"><a href="#TypeAnnotator-396"><span class="linenos">396</span></a> <span class="n">annotator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-397"><a href="#TypeAnnotator-397"><span class="linenos">397</span></a> <span class="k">if</span> <span class="n">annotator</span>
+</span><span id="TypeAnnotator-398"><a href="#TypeAnnotator-398"><span class="linenos">398</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_with_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="TypeAnnotator-399"><a href="#TypeAnnotator-399"><span class="linenos">399</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-400"><a href="#TypeAnnotator-400"><span class="linenos">400</span></a>
+</span><span id="TypeAnnotator-401"><a href="#TypeAnnotator-401"><span class="linenos">401</span></a> <span class="k">def</span> <span class="nf">_annotate_args</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-402"><a href="#TypeAnnotator-402"><span class="linenos">402</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
+</span><span id="TypeAnnotator-403"><a href="#TypeAnnotator-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="TypeAnnotator-404"><a href="#TypeAnnotator-404"><span class="linenos">404</span></a>
+</span><span id="TypeAnnotator-405"><a href="#TypeAnnotator-405"><span class="linenos">405</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-406"><a href="#TypeAnnotator-406"><span class="linenos">406</span></a>
+</span><span id="TypeAnnotator-407"><a href="#TypeAnnotator-407"><span class="linenos">407</span></a> <span class="k">def</span> <span class="nf">_maybe_coerce</span><span class="p">(</span>
+</span><span id="TypeAnnotator-408"><a href="#TypeAnnotator-408"><span class="linenos">408</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">type1</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">type2</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span>
+</span><span id="TypeAnnotator-409"><a href="#TypeAnnotator-409"><span class="linenos">409</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">:</span>
+</span><span id="TypeAnnotator-410"><a href="#TypeAnnotator-410"><span class="linenos">410</span></a> <span class="n">type1_value</span> <span class="o">=</span> <span class="n">type1</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type1</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type1</span>
+</span><span id="TypeAnnotator-411"><a href="#TypeAnnotator-411"><span class="linenos">411</span></a> <span class="n">type2_value</span> <span class="o">=</span> <span class="n">type2</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">type2</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="k">else</span> <span class="n">type2</span>
+</span><span id="TypeAnnotator-412"><a href="#TypeAnnotator-412"><span class="linenos">412</span></a>
+</span><span id="TypeAnnotator-413"><a href="#TypeAnnotator-413"><span class="linenos">413</span></a> <span class="c1"># We propagate the NULL / UNKNOWN types upwards if found</span>
+</span><span id="TypeAnnotator-414"><a href="#TypeAnnotator-414"><span class="linenos">414</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="TypeAnnotator-415"><a href="#TypeAnnotator-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span>
+</span><span id="TypeAnnotator-416"><a href="#TypeAnnotator-416"><span class="linenos">416</span></a> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span> <span class="ow">in</span> <span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="n">type2_value</span><span class="p">):</span>
+</span><span id="TypeAnnotator-417"><a href="#TypeAnnotator-417"><span class="linenos">417</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="TypeAnnotator-418"><a href="#TypeAnnotator-418"><span class="linenos">418</span></a>
+</span><span id="TypeAnnotator-419"><a href="#TypeAnnotator-419"><span class="linenos">419</span></a> <span class="k">if</span> <span class="n">type1_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-420"><a href="#TypeAnnotator-420"><span class="linenos">420</span></a> <span class="k">return</span> <span class="n">type1</span>
+</span><span id="TypeAnnotator-421"><a href="#TypeAnnotator-421"><span class="linenos">421</span></a> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-422"><a href="#TypeAnnotator-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="n">type2</span>
+</span><span id="TypeAnnotator-423"><a href="#TypeAnnotator-423"><span class="linenos">423</span></a>
+</span><span id="TypeAnnotator-424"><a href="#TypeAnnotator-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">type2_value</span> <span class="k">if</span> <span class="n">type2_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type1_value</span><span class="p">,</span> <span class="p">{})</span> <span class="k">else</span> <span class="n">type1_value</span> <span class="c1"># type: ignore</span>
+</span><span id="TypeAnnotator-425"><a href="#TypeAnnotator-425"><span class="linenos">425</span></a>
+</span><span id="TypeAnnotator-426"><a href="#TypeAnnotator-426"><span class="linenos">426</span></a> <span class="c1"># Note: the following &quot;no_type_check&quot; decorators were added because mypy was yelling due</span>
+</span><span id="TypeAnnotator-427"><a href="#TypeAnnotator-427"><span class="linenos">427</span></a> <span class="c1"># to assigning Type values to expression.type (since its getter returns Optional[DataType]).</span>
+</span><span id="TypeAnnotator-428"><a href="#TypeAnnotator-428"><span class="linenos">428</span></a> <span class="c1"># This is a known mypy issue: https://github.com/python/mypy/issues/3004</span>
+</span><span id="TypeAnnotator-429"><a href="#TypeAnnotator-429"><span class="linenos">429</span></a>
+</span><span id="TypeAnnotator-430"><a href="#TypeAnnotator-430"><span class="linenos">430</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-431"><a href="#TypeAnnotator-431"><span class="linenos">431</span></a> <span class="k">def</span> <span class="nf">_annotate_binary</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">B</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">B</span><span class="p">:</span>
+</span><span id="TypeAnnotator-432"><a href="#TypeAnnotator-432"><span class="linenos">432</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-433"><a href="#TypeAnnotator-433"><span class="linenos">433</span></a>
+</span><span id="TypeAnnotator-434"><a href="#TypeAnnotator-434"><span class="linenos">434</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">right</span>
+</span><span id="TypeAnnotator-435"><a href="#TypeAnnotator-435"><span class="linenos">435</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span>
+</span><span id="TypeAnnotator-436"><a href="#TypeAnnotator-436"><span class="linenos">436</span></a>
+</span><span id="TypeAnnotator-437"><a href="#TypeAnnotator-437"><span class="linenos">437</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Connector</span><span class="p">):</span>
+</span><span id="TypeAnnotator-438"><a href="#TypeAnnotator-438"><span class="linenos">438</span></a> <span class="k">if</span> <span class="n">left_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">and</span> <span class="n">right_type</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">:</span>
+</span><span id="TypeAnnotator-439"><a href="#TypeAnnotator-439"><span class="linenos">439</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="TypeAnnotator-440"><a href="#TypeAnnotator-440"><span class="linenos">440</span></a> <span class="k">elif</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULL</span> <span class="ow">in</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">):</span>
+</span><span id="TypeAnnotator-441"><a href="#TypeAnnotator-441"><span class="linenos">441</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
+</span><span id="TypeAnnotator-442"><a href="#TypeAnnotator-442"><span class="linenos">442</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="TypeAnnotator-443"><a href="#TypeAnnotator-443"><span class="linenos">443</span></a> <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="s2">&quot;NULLABLE&quot;</span><span class="p">,</span> <span class="n">expressions</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="s2">&quot;BOOLEAN&quot;</span><span class="p">)),</span>
+</span><span id="TypeAnnotator-444"><a href="#TypeAnnotator-444"><span class="linenos">444</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-445"><a href="#TypeAnnotator-445"><span class="linenos">445</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-446"><a href="#TypeAnnotator-446"><span class="linenos">446</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
+</span><span id="TypeAnnotator-447"><a href="#TypeAnnotator-447"><span class="linenos">447</span></a> <span class="k">elif</span> <span class="nb">isinstance</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">Predicate</span><span class="p">):</span>
+</span><span id="TypeAnnotator-448"><a href="#TypeAnnotator-448"><span class="linenos">448</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
+</span><span id="TypeAnnotator-449"><a href="#TypeAnnotator-449"><span class="linenos">449</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">:</span>
+</span><span id="TypeAnnotator-450"><a href="#TypeAnnotator-450"><span class="linenos">450</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span><span class="p">[(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)](</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">))</span>
+</span><span id="TypeAnnotator-451"><a href="#TypeAnnotator-451"><span class="linenos">451</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-452"><a href="#TypeAnnotator-452"><span class="linenos">452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</span>
+</span><span id="TypeAnnotator-453"><a href="#TypeAnnotator-453"><span class="linenos">453</span></a>
+</span><span id="TypeAnnotator-454"><a href="#TypeAnnotator-454"><span class="linenos">454</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-455"><a href="#TypeAnnotator-455"><span class="linenos">455</span></a>
+</span><span id="TypeAnnotator-456"><a href="#TypeAnnotator-456"><span class="linenos">456</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-457"><a href="#TypeAnnotator-457"><span class="linenos">457</span></a> <span class="k">def</span> <span class="nf">_annotate_unary</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-458"><a href="#TypeAnnotator-458"><span class="linenos">458</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-459"><a href="#TypeAnnotator-459"><span class="linenos">459</span></a>
+</span><span id="TypeAnnotator-460"><a href="#TypeAnnotator-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Condition</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</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">Paren</span><span class="p">):</span>
+</span><span id="TypeAnnotator-461"><a href="#TypeAnnotator-461"><span class="linenos">461</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">)</span>
+</span><span id="TypeAnnotator-462"><a href="#TypeAnnotator-462"><span class="linenos">462</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-463"><a href="#TypeAnnotator-463"><span class="linenos">463</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-464"><a href="#TypeAnnotator-464"><span class="linenos">464</span></a>
+</span><span id="TypeAnnotator-465"><a href="#TypeAnnotator-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-466"><a href="#TypeAnnotator-466"><span class="linenos">466</span></a>
+</span><span id="TypeAnnotator-467"><a href="#TypeAnnotator-467"><span class="linenos">467</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-468"><a href="#TypeAnnotator-468"><span class="linenos">468</span></a> <span class="k">def</span> <span class="nf">_annotate_literal</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">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">:</span>
+</span><span id="TypeAnnotator-469"><a href="#TypeAnnotator-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="TypeAnnotator-470"><a href="#TypeAnnotator-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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="TypeAnnotator-471"><a href="#TypeAnnotator-471"><span class="linenos">471</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="TypeAnnotator-472"><a href="#TypeAnnotator-472"><span class="linenos">472</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">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><span id="TypeAnnotator-473"><a href="#TypeAnnotator-473"><span class="linenos">473</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-474"><a href="#TypeAnnotator-474"><span class="linenos">474</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
+</span><span id="TypeAnnotator-475"><a href="#TypeAnnotator-475"><span class="linenos">475</span></a>
+</span><span id="TypeAnnotator-476"><a href="#TypeAnnotator-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-477"><a href="#TypeAnnotator-477"><span class="linenos">477</span></a>
+</span><span id="TypeAnnotator-478"><a href="#TypeAnnotator-478"><span class="linenos">478</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-479"><a href="#TypeAnnotator-479"><span class="linenos">479</span></a> <span class="k">def</span> <span class="nf">_annotate_with_type</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">E</span><span class="p">,</span> <span class="n">target_type</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-480"><a href="#TypeAnnotator-480"><span class="linenos">480</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">target_type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-481"><a href="#TypeAnnotator-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-482"><a href="#TypeAnnotator-482"><span class="linenos">482</span></a>
+</span><span id="TypeAnnotator-483"><a href="#TypeAnnotator-483"><span class="linenos">483</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-484"><a href="#TypeAnnotator-484"><span class="linenos">484</span></a> <span class="k">def</span> <span class="nf">_annotate_struct_value</span><span class="p">(</span>
+</span><span id="TypeAnnotator-485"><a href="#TypeAnnotator-485"><span class="linenos">485</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span>
+</span><span id="TypeAnnotator-486"><a href="#TypeAnnotator-486"><span class="linenos">486</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">DataType</span><span class="p">]</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span>
+</span><span id="TypeAnnotator-487"><a href="#TypeAnnotator-487"><span class="linenos">487</span></a> <span class="n">alias</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;alias&quot;</span><span class="p">)</span>
+</span><span id="TypeAnnotator-488"><a href="#TypeAnnotator-488"><span class="linenos">488</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="TypeAnnotator-489"><a href="#TypeAnnotator-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-490"><a href="#TypeAnnotator-490"><span class="linenos">490</span></a>
+</span><span id="TypeAnnotator-491"><a href="#TypeAnnotator-491"><span class="linenos">491</span></a> <span class="c1"># Case: key = value or key := value</span>
+</span><span id="TypeAnnotator-492"><a href="#TypeAnnotator-492"><span class="linenos">492</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
+</span><span id="TypeAnnotator-493"><a href="#TypeAnnotator-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-494"><a href="#TypeAnnotator-494"><span class="linenos">494</span></a>
+</span><span id="TypeAnnotator-495"><a href="#TypeAnnotator-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span>
+</span><span id="TypeAnnotator-496"><a href="#TypeAnnotator-496"><span class="linenos">496</span></a>
+</span><span id="TypeAnnotator-497"><a href="#TypeAnnotator-497"><span class="linenos">497</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">no_type_check</span>
+</span><span id="TypeAnnotator-498"><a href="#TypeAnnotator-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">_annotate_by_args</span><span class="p">(</span>
+</span><span id="TypeAnnotator-499"><a href="#TypeAnnotator-499"><span class="linenos">499</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="TypeAnnotator-500"><a href="#TypeAnnotator-500"><span class="linenos">500</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">,</span>
+</span><span id="TypeAnnotator-501"><a href="#TypeAnnotator-501"><span class="linenos">501</span></a> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="TypeAnnotator-502"><a href="#TypeAnnotator-502"><span class="linenos">502</span></a> <span class="n">promote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TypeAnnotator-503"><a href="#TypeAnnotator-503"><span class="linenos">503</span></a> <span class="n">array</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TypeAnnotator-504"><a href="#TypeAnnotator-504"><span class="linenos">504</span></a> <span class="n">struct</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TypeAnnotator-505"><a href="#TypeAnnotator-505"><span class="linenos">505</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator-506"><a href="#TypeAnnotator-506"><span class="linenos">506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-507"><a href="#TypeAnnotator-507"><span class="linenos">507</span></a>
+</span><span id="TypeAnnotator-508"><a href="#TypeAnnotator-508"><span class="linenos">508</span></a> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="TypeAnnotator-509"><a href="#TypeAnnotator-509"><span class="linenos">509</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="TypeAnnotator-510"><a href="#TypeAnnotator-510"><span class="linenos">510</span></a> <span class="n">arg_expr</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="n">arg</span><span class="p">)</span>
+</span><span id="TypeAnnotator-511"><a href="#TypeAnnotator-511"><span class="linenos">511</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expr</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_expr</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span><span class="p">)</span>
+</span><span id="TypeAnnotator-512"><a href="#TypeAnnotator-512"><span class="linenos">512</span></a>
+</span><span id="TypeAnnotator-513"><a href="#TypeAnnotator-513"><span class="linenos">513</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TypeAnnotator-514"><a href="#TypeAnnotator-514"><span class="linenos">514</span></a> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="TypeAnnotator-515"><a href="#TypeAnnotator-515"><span class="linenos">515</span></a> <span class="n">last_datatype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-516"><a href="#TypeAnnotator-516"><span class="linenos">516</span></a>
+</span><span id="TypeAnnotator-517"><a href="#TypeAnnotator-517"><span class="linenos">517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">last_datatype</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="TypeAnnotator-518"><a href="#TypeAnnotator-518"><span class="linenos">518</span></a>
+</span><span id="TypeAnnotator-519"><a href="#TypeAnnotator-519"><span class="linenos">519</span></a> <span class="k">if</span> <span class="n">promote</span><span class="p">:</span>
+</span><span id="TypeAnnotator-520"><a href="#TypeAnnotator-520"><span class="linenos">520</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-521"><a href="#TypeAnnotator-521"><span class="linenos">521</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
+</span><span id="TypeAnnotator-522"><a href="#TypeAnnotator-522"><span class="linenos">522</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">FLOAT_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-523"><a href="#TypeAnnotator-523"><span class="linenos">523</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">)</span>
+</span><span id="TypeAnnotator-524"><a href="#TypeAnnotator-524"><span class="linenos">524</span></a>
+</span><span id="TypeAnnotator-525"><a href="#TypeAnnotator-525"><span class="linenos">525</span></a> <span class="k">if</span> <span class="n">array</span><span class="p">:</span>
+</span><span id="TypeAnnotator-526"><a href="#TypeAnnotator-526"><span class="linenos">526</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
+</span><span id="TypeAnnotator-527"><a href="#TypeAnnotator-527"><span class="linenos">527</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="TypeAnnotator-528"><a href="#TypeAnnotator-528"><span class="linenos">528</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="TypeAnnotator-529"><a href="#TypeAnnotator-529"><span class="linenos">529</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="TypeAnnotator-530"><a href="#TypeAnnotator-530"><span class="linenos">530</span></a> <span class="p">),</span>
+</span><span id="TypeAnnotator-531"><a href="#TypeAnnotator-531"><span class="linenos">531</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-532"><a href="#TypeAnnotator-532"><span class="linenos">532</span></a>
+</span><span id="TypeAnnotator-533"><a href="#TypeAnnotator-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="n">struct</span><span class="p">:</span>
+</span><span id="TypeAnnotator-534"><a href="#TypeAnnotator-534"><span class="linenos">534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span>
+</span><span id="TypeAnnotator-535"><a href="#TypeAnnotator-535"><span class="linenos">535</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="TypeAnnotator-536"><a href="#TypeAnnotator-536"><span class="linenos">536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="TypeAnnotator-537"><a href="#TypeAnnotator-537"><span class="linenos">537</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="TypeAnnotator-538"><a href="#TypeAnnotator-538"><span class="linenos">538</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_annotate_struct_value</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">],</span>
+</span><span id="TypeAnnotator-539"><a href="#TypeAnnotator-539"><span class="linenos">539</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="TypeAnnotator-540"><a href="#TypeAnnotator-540"><span class="linenos">540</span></a> <span class="p">),</span>
+</span><span id="TypeAnnotator-541"><a href="#TypeAnnotator-541"><span class="linenos">541</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator-542"><a href="#TypeAnnotator-542"><span class="linenos">542</span></a>
+</span><span id="TypeAnnotator-543"><a href="#TypeAnnotator-543"><span class="linenos">543</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-544"><a href="#TypeAnnotator-544"><span class="linenos">544</span></a>
+</span><span id="TypeAnnotator-545"><a href="#TypeAnnotator-545"><span class="linenos">545</span></a> <span class="k">def</span> <span class="nf">_annotate_timeunit</span><span class="p">(</span>
+</span><span id="TypeAnnotator-546"><a href="#TypeAnnotator-546"><span class="linenos">546</span></a> <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">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span>
+</span><span id="TypeAnnotator-547"><a href="#TypeAnnotator-547"><span class="linenos">547</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeUnit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span>
+</span><span id="TypeAnnotator-548"><a href="#TypeAnnotator-548"><span class="linenos">548</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-549"><a href="#TypeAnnotator-549"><span class="linenos">549</span></a>
+</span><span id="TypeAnnotator-550"><a href="#TypeAnnotator-550"><span class="linenos">550</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-551"><a href="#TypeAnnotator-551"><span class="linenos">551</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date_literal</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="TypeAnnotator-552"><a href="#TypeAnnotator-552"><span class="linenos">552</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="TypeAnnotator-553"><a href="#TypeAnnotator-553"><span class="linenos">553</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">_coerce_date</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="TypeAnnotator-554"><a href="#TypeAnnotator-554"><span class="linenos">554</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-555"><a href="#TypeAnnotator-555"><span class="linenos">555</span></a> <span class="n">datatype</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
+</span><span id="TypeAnnotator-556"><a href="#TypeAnnotator-556"><span class="linenos">556</span></a>
+</span><span id="TypeAnnotator-557"><a href="#TypeAnnotator-557"><span class="linenos">557</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">datatype</span><span class="p">)</span>
+</span><span id="TypeAnnotator-558"><a href="#TypeAnnotator-558"><span class="linenos">558</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-559"><a href="#TypeAnnotator-559"><span class="linenos">559</span></a>
+</span><span id="TypeAnnotator-560"><a href="#TypeAnnotator-560"><span class="linenos">560</span></a> <span class="k">def</span> <span class="nf">_annotate_bracket</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">Bracket</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">:</span>
+</span><span id="TypeAnnotator-561"><a href="#TypeAnnotator-561"><span class="linenos">561</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-562"><a href="#TypeAnnotator-562"><span class="linenos">562</span></a>
+</span><span id="TypeAnnotator-563"><a href="#TypeAnnotator-563"><span class="linenos">563</span></a> <span class="n">bracket_arg</span> <span class="o">=</span> <span class="n">expression</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="TypeAnnotator-564"><a href="#TypeAnnotator-564"><span class="linenos">564</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="TypeAnnotator-565"><a href="#TypeAnnotator-565"><span class="linenos">565</span></a>
+</span><span id="TypeAnnotator-566"><a href="#TypeAnnotator-566"><span class="linenos">566</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bracket_arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">):</span>
+</span><span id="TypeAnnotator-567"><a href="#TypeAnnotator-567"><span class="linenos">567</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator-568"><a href="#TypeAnnotator-568"><span class="linenos">568</span></a> <span class="k">elif</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">):</span>
+</span><span id="TypeAnnotator-569"><a href="#TypeAnnotator-569"><span class="linenos">569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">type</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="TypeAnnotator-570"><a href="#TypeAnnotator-570"><span class="linenos">570</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">))</span> <span class="ow">and</span> <span class="n">bracket_arg</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">keys</span><span class="p">:</span>
</span><span id="TypeAnnotator-571"><a href="#TypeAnnotator-571"><span class="linenos">571</span></a> <span class="n">index</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">keys</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">bracket_arg</span><span class="p">)</span>
</span><span id="TypeAnnotator-572"><a href="#TypeAnnotator-572"><span class="linenos">572</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
-</span><span id="TypeAnnotator-573"><a href="#TypeAnnotator-573"><span class="linenos">573</span></a> <span class="n">value_type</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">value</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span>
-</span><span id="TypeAnnotator-574"><a href="#TypeAnnotator-574"><span class="linenos">574</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">value_type</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-575"><a href="#TypeAnnotator-575"><span class="linenos">575</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-576"><a href="#TypeAnnotator-576"><span class="linenos">576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="TypeAnnotator-577"><a href="#TypeAnnotator-577"><span class="linenos">577</span></a>
-</span><span id="TypeAnnotator-578"><a href="#TypeAnnotator-578"><span class="linenos">578</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="TypeAnnotator-579"><a href="#TypeAnnotator-579"><span class="linenos">579</span></a>
-</span><span id="TypeAnnotator-580"><a href="#TypeAnnotator-580"><span class="linenos">580</span></a> <span class="k">def</span> <span class="nf">_annotate_div</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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">:</span>
-</span><span id="TypeAnnotator-581"><a href="#TypeAnnotator-581"><span class="linenos">581</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator-582"><a href="#TypeAnnotator-582"><span class="linenos">582</span></a>
-</span><span id="TypeAnnotator-583"><a href="#TypeAnnotator-583"><span class="linenos">583</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">type</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">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="c1"># type: ignore</span>
-</span><span id="TypeAnnotator-584"><a href="#TypeAnnotator-584"><span class="linenos">584</span></a>
-</span><span id="TypeAnnotator-585"><a href="#TypeAnnotator-585"><span class="linenos">585</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="TypeAnnotator-586"><a href="#TypeAnnotator-586"><span class="linenos">586</span></a> <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;typed&quot;</span><span class="p">)</span>
-</span><span id="TypeAnnotator-587"><a href="#TypeAnnotator-587"><span class="linenos">587</span></a> <span class="ow">and</span> <span class="n">left_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
-</span><span id="TypeAnnotator-588"><a href="#TypeAnnotator-588"><span class="linenos">588</span></a> <span class="ow">and</span> <span class="n">right_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
-</span><span id="TypeAnnotator-589"><a href="#TypeAnnotator-589"><span class="linenos">589</span></a> <span class="p">):</span>
-</span><span id="TypeAnnotator-590"><a href="#TypeAnnotator-590"><span class="linenos">590</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
-</span><span id="TypeAnnotator-591"><a href="#TypeAnnotator-591"><span class="linenos">591</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator-592"><a href="#TypeAnnotator-592"><span class="linenos">592</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</span>
-</span><span id="TypeAnnotator-593"><a href="#TypeAnnotator-593"><span class="linenos">593</span></a>
-</span><span id="TypeAnnotator-594"><a href="#TypeAnnotator-594"><span class="linenos">594</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-573"><a href="#TypeAnnotator-573"><span class="linenos">573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">value</span><span class="o">.</span><span class="n">type</span> <span class="k">if</span> <span class="n">value</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="TypeAnnotator-574"><a href="#TypeAnnotator-574"><span class="linenos">574</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-575"><a href="#TypeAnnotator-575"><span class="linenos">575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="TypeAnnotator-576"><a href="#TypeAnnotator-576"><span class="linenos">576</span></a>
+</span><span id="TypeAnnotator-577"><a href="#TypeAnnotator-577"><span class="linenos">577</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-578"><a href="#TypeAnnotator-578"><span class="linenos">578</span></a>
+</span><span id="TypeAnnotator-579"><a href="#TypeAnnotator-579"><span class="linenos">579</span></a> <span class="k">def</span> <span class="nf">_annotate_div</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">Div</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">:</span>
+</span><span id="TypeAnnotator-580"><a href="#TypeAnnotator-580"><span class="linenos">580</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-581"><a href="#TypeAnnotator-581"><span class="linenos">581</span></a>
+</span><span id="TypeAnnotator-582"><a href="#TypeAnnotator-582"><span class="linenos">582</span></a> <span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">type</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">right</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="c1"># type: ignore</span>
+</span><span id="TypeAnnotator-583"><a href="#TypeAnnotator-583"><span class="linenos">583</span></a>
+</span><span id="TypeAnnotator-584"><a href="#TypeAnnotator-584"><span class="linenos">584</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="TypeAnnotator-585"><a href="#TypeAnnotator-585"><span class="linenos">585</span></a> <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;typed&quot;</span><span class="p">)</span>
+</span><span id="TypeAnnotator-586"><a href="#TypeAnnotator-586"><span class="linenos">586</span></a> <span class="ow">and</span> <span class="n">left_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
+</span><span id="TypeAnnotator-587"><a href="#TypeAnnotator-587"><span class="linenos">587</span></a> <span class="ow">and</span> <span class="n">right_type</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span>
+</span><span id="TypeAnnotator-588"><a href="#TypeAnnotator-588"><span class="linenos">588</span></a> <span class="p">):</span>
+</span><span id="TypeAnnotator-589"><a href="#TypeAnnotator-589"><span class="linenos">589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">)</span>
+</span><span id="TypeAnnotator-590"><a href="#TypeAnnotator-590"><span class="linenos">590</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator-591"><a href="#TypeAnnotator-591"><span class="linenos">591</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_coerce</span><span class="p">(</span><span class="n">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">))</span>
+</span><span id="TypeAnnotator-592"><a href="#TypeAnnotator-592"><span class="linenos">592</span></a>
+</span><span id="TypeAnnotator-593"><a href="#TypeAnnotator-593"><span class="linenos">593</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="TypeAnnotator-594"><a href="#TypeAnnotator-594"><span class="linenos">594</span></a>
+</span><span id="TypeAnnotator-595"><a href="#TypeAnnotator-595"><span class="linenos">595</span></a> <span class="k">def</span> <span class="nf">_annotate_explode</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">Explode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">:</span>
+</span><span id="TypeAnnotator-596"><a href="#TypeAnnotator-596"><span class="linenos">596</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_annotate_args</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator-597"><a href="#TypeAnnotator-597"><span class="linenos">597</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">type</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="TypeAnnotator-598"><a href="#TypeAnnotator-598"><span class="linenos">598</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1303,20 +1311,20 @@
</div>
<a class="headerlink" href="#TypeAnnotator.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.__init__-321"><a href="#TypeAnnotator.__init__-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="TypeAnnotator.__init__-322"><a href="#TypeAnnotator.__init__-322"><span class="linenos">322</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-323"><a href="#TypeAnnotator.__init__-323"><span class="linenos">323</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-324"><a href="#TypeAnnotator.__init__-324"><span class="linenos">324</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-325"><a href="#TypeAnnotator.__init__-325"><span class="linenos">325</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-326"><a href="#TypeAnnotator.__init__-326"><span class="linenos">326</span></a> <span class="n">binary_coercions</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">BinaryCoercions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="TypeAnnotator.__init__-327"><a href="#TypeAnnotator.__init__-327"><span class="linenos">327</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="TypeAnnotator.__init__-328"><a href="#TypeAnnotator.__init__-328"><span class="linenos">328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
-</span><span id="TypeAnnotator.__init__-329"><a href="#TypeAnnotator.__init__-329"><span class="linenos">329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
-</span><span id="TypeAnnotator.__init__-330"><a href="#TypeAnnotator.__init__-330"><span class="linenos">330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
-</span><span id="TypeAnnotator.__init__-331"><a href="#TypeAnnotator.__init__-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span> <span class="o">=</span> <span class="n">binary_coercions</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">BINARY_COERCIONS</span>
-</span><span id="TypeAnnotator.__init__-332"><a href="#TypeAnnotator.__init__-332"><span class="linenos">332</span></a>
-</span><span id="TypeAnnotator.__init__-333"><a href="#TypeAnnotator.__init__-333"><span class="linenos">333</span></a> <span class="c1"># Caches the ids of annotated sub-Expressions, to ensure we only visit them once</span>
-</span><span id="TypeAnnotator.__init__-334"><a href="#TypeAnnotator.__init__-334"><span class="linenos">334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.__init__-322"><a href="#TypeAnnotator.__init__-322"><span class="linenos">322</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="TypeAnnotator.__init__-323"><a href="#TypeAnnotator.__init__-323"><span class="linenos">323</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-324"><a href="#TypeAnnotator.__init__-324"><span class="linenos">324</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-325"><a href="#TypeAnnotator.__init__-325"><span class="linenos">325</span></a> <span class="n">annotators</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">TypeAnnotator</span><span class="p">,</span> <span class="n">E</span><span class="p">],</span> <span class="n">E</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-326"><a href="#TypeAnnotator.__init__-326"><span class="linenos">326</span></a> <span class="n">coerces_to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-327"><a href="#TypeAnnotator.__init__-327"><span class="linenos">327</span></a> <span class="n">binary_coercions</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">BinaryCoercions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="TypeAnnotator.__init__-328"><a href="#TypeAnnotator.__init__-328"><span class="linenos">328</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="TypeAnnotator.__init__-329"><a href="#TypeAnnotator.__init__-329"><span class="linenos">329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
+</span><span id="TypeAnnotator.__init__-330"><a href="#TypeAnnotator.__init__-330"><span class="linenos">330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">annotators</span> <span class="o">=</span> <span class="n">annotators</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANNOTATORS</span>
+</span><span id="TypeAnnotator.__init__-331"><a href="#TypeAnnotator.__init__-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">coerces_to</span> <span class="o">=</span> <span class="n">coerces_to</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">COERCES_TO</span>
+</span><span id="TypeAnnotator.__init__-332"><a href="#TypeAnnotator.__init__-332"><span class="linenos">332</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">binary_coercions</span> <span class="o">=</span> <span class="n">binary_coercions</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">BINARY_COERCIONS</span>
+</span><span id="TypeAnnotator.__init__-333"><a href="#TypeAnnotator.__init__-333"><span class="linenos">333</span></a>
+</span><span id="TypeAnnotator.__init__-334"><a href="#TypeAnnotator.__init__-334"><span class="linenos">334</span></a> <span class="c1"># Caches the ids of annotated sub-Expressions, to ensure we only visit them once</span>
+</span><span id="TypeAnnotator.__init__-335"><a href="#TypeAnnotator.__init__-335"><span class="linenos">335</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_visited</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
</span></pre></div>
@@ -1327,7 +1335,7 @@
<div class="attr variable">
<span class="name">TYPE_TO_EXPRESSIONS</span><span class="annotation">: Dict[<a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>, Set[Type[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>]]]</span> =
<input id="TypeAnnotator.TYPE_TO_EXPRESSIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TypeAnnotator.TYPE_TO_EXPRESSIONS-view-value"></label><span class="default_value">{&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;}, &lt;Type.BOOLEAN: &#39;BOOLEAN&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;}, &lt;Type.JSON: &#39;JSON&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;}}</span>
+ <label class="view-value-button pdoc-button" for="TypeAnnotator.TYPE_TO_EXPRESSIONS-view-value"></label><span class="default_value">{&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;}, &lt;Type.BOOLEAN: &#39;BOOLEAN&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;}, &lt;Type.JSON: &#39;JSON&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;}}</span>
</div>
@@ -1340,7 +1348,7 @@
<div class="attr variable">
<span class="name">ANNOTATORS</span><span class="annotation">: Dict</span> =
<input id="TypeAnnotator.ANNOTATORS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TypeAnnotator.ANNOTATORS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Neg">sqlglot.expressions.Neg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Not">sqlglot.expressions.Not</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Paren">sqlglot.expressions.Paren</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PivotAlias">sqlglot.expressions.PivotAlias</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Unary">sqlglot.expressions.Unary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Add">sqlglot.expressions.Add</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Binary">sqlglot.expressions.Binary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Connector">sqlglot.expressions.Connector</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DPipe">sqlglot.expressions.DPipe</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distance">sqlglot.expressions.Distance</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Dot">sqlglot.expressions.Dot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Escape">sqlglot.expressions.Escape</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Glob">sqlglot.expressions.Glob</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILikeAny">sqlglot.expressions.ILikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Kwarg">sqlglot.expressions.Kwarg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Like">sqlglot.expressions.Like</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LikeAny">sqlglot.expressions.LikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mod">sqlglot.expressions.Mod</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mul">sqlglot.expressions.Mul</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Operator">sqlglot.expressions.Operator</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Overlaps">sqlglot.expressions.Overlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PropertyEQ">sqlglot.expressions.PropertyEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SimilarTo">sqlglot.expressions.SimilarTo</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Slice">sqlglot.expressions.Slice</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sub">sqlglot.expressions.Sub</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Anonymous">sqlglot.expressions.Anonymous</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Bracket">sqlglot.expressions.Bracket</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distinct">sqlglot.expressions.Distinct</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Filter">sqlglot.expressions.Filter</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Interval">sqlglot.expressions.Interval</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Literal">sqlglot.expressions.Literal</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Null">sqlglot.expressions.Null</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TypeAnnotator.ANNOTATORS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseNot">sqlglot.expressions.BitwiseNot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Neg">sqlglot.expressions.Neg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Not">sqlglot.expressions.Not</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Paren">sqlglot.expressions.Paren</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PivotAlias">sqlglot.expressions.PivotAlias</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Unary">sqlglot.expressions.Unary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Add">sqlglot.expressions.Add</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContained">sqlglot.expressions.ArrayContained</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Binary">sqlglot.expressions.Binary</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseLeftShift">sqlglot.expressions.BitwiseLeftShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseRightShift">sqlglot.expressions.BitwiseRightShift</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Connector">sqlglot.expressions.Connector</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DPipe">sqlglot.expressions.DPipe</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distance">sqlglot.expressions.Distance</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Dot">sqlglot.expressions.Dot</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Escape">sqlglot.expressions.Escape</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Glob">sqlglot.expressions.Glob</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILike">sqlglot.expressions.ILike</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ILikeAny">sqlglot.expressions.ILikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Is">sqlglot.expressions.Is</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtract">sqlglot.expressions.JSONExtract</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#JSONExtractScalar">sqlglot.expressions.JSONExtractScalar</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Kwarg">sqlglot.expressions.Kwarg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Like">sqlglot.expressions.Like</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#LikeAny">sqlglot.expressions.LikeAny</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mod">sqlglot.expressions.Mod</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Mul">sqlglot.expressions.Mul</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#NullSafeNEQ">sqlglot.expressions.NullSafeNEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Operator">sqlglot.expressions.Operator</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Overlaps">sqlglot.expressions.Overlaps</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#PropertyEQ">sqlglot.expressions.PropertyEQ</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SimilarTo">sqlglot.expressions.SimilarTo</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Slice">sqlglot.expressions.Slice</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sub">sqlglot.expressions.Sub</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Count">sqlglot.expressions.Count</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Between">sqlglot.expressions.Between</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Boolean">sqlglot.expressions.Boolean</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log2">sqlglot.expressions.Log2</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log">sqlglot.expressions.Log</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Log10">sqlglot.expressions.Log10</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ConcatWs">sqlglot.expressions.ConcatWs</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Concat">sqlglot.expressions.Concat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TsOrDsToDateStr">sqlglot.expressions.TsOrDsToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateToDateStr">sqlglot.expressions.DateToDateStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TimeToTimeStr">sqlglot.expressions.TimeToTimeStr</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;: &lt;function _annotate_with_type_lambda.&lt;locals&gt;.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Anonymous">sqlglot.expressions.Anonymous</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Bracket">sqlglot.expressions.Bracket</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Distinct">sqlglot.expressions.Distinct</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Filter">sqlglot.expressions.Filter</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Interval">sqlglot.expressions.Interval</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Literal">sqlglot.expressions.Literal</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Null">sqlglot.expressions.Null</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#VarMap">sqlglot.expressions.VarMap</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;: &lt;function TypeAnnotator.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1365,7 +1373,7 @@
<div class="attr variable">
<span class="name">COERCES_TO</span><span class="annotation">: Dict[<a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>, Set[<a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>]]</span> =
<input id="TypeAnnotator.COERCES_TO-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TypeAnnotator.COERCES_TO-view-value"></label><span class="default_value">{&lt;Type.TEXT: &#39;TEXT&#39;&gt;: set(), &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: {&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.CHAR: &#39;CHAR&#39;&gt;: {&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: set(), &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;}, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;}, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;: {&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;}, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;: set(), &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;}}</span>
+ <label class="view-value-button pdoc-button" for="TypeAnnotator.COERCES_TO-view-value"></label><span class="default_value">{&lt;Type.TEXT: &#39;TEXT&#39;&gt;: set(), &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;}, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.CHAR: &#39;CHAR&#39;&gt;: {&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;}, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;: set(), &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;}, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;}, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;}, &lt;Type.INT: &#39;INT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;}, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;}, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;: {&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.DECIMAL: &#39;DECIMAL&#39;&gt;}, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;: set(), &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}, &lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;: {&lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;}, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;: {&lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;}, &lt;Type.DATE: &#39;DATE&#39;&gt;: {&lt;Type.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;Type.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;Type.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;Type.DATETIME: &#39;DATETIME&#39;&gt;}}</span>
</div>
@@ -1378,7 +1386,7 @@
<div class="attr variable">
<span class="name">BINARY_COERCIONS</span><span class="annotation">: Dict[Tuple[<a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>, <a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>], Callable[[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>, <a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>], <a href="../expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>]]</span> =
<input id="TypeAnnotator.BINARY_COERCIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TypeAnnotator.BINARY_COERCIONS-view-value"></label><span class="default_value">{(&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DATE: &#39;DATE&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.DATE: &#39;DATE&#39;&gt;): &lt;function TypeAnnotator.&lt;lambda&gt;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="TypeAnnotator.BINARY_COERCIONS-view-value"></label><span class="default_value">{(&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TEXT: &#39;TEXT&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NCHAR: &#39;NCHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.CHAR: &#39;CHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INT256: &#39;INT256&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INT: &#39;INT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.FLOAT: &#39;FLOAT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.TINYINT: &#39;TINYINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.BIT: &#39;BIT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.INT128: &#39;INT128&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;Type.BIGINT: &#39;BIGINT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.TEXT: &#39;TEXT&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.NCHAR: &#39;NCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.CHAR: &#39;CHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.VARCHAR: &#39;VARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT256: &#39;INT256&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT: &#39;INT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.FLOAT: &#39;FLOAT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.TINYINT: &#39;TINYINT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIT: &#39;BIT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.INT128: &#39;INT128&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.BIGINT: &#39;BIGINT&#39;&gt;, &lt;Type.NVARCHAR: &#39;NVARCHAR&#39;&gt;): &lt;function TypeAnnotator.&lt;dictcomp&gt;.&lt;lambda&gt;&gt;, (&lt;Type.DATE: &#39;DATE&#39;&gt;, &lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;): &lt;function TypeAnnotator.&lt;lambda&gt;&gt;, (&lt;Type.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;Type.DATE: &#39;DATE&#39;&gt;): &lt;function TypeAnnotator.&lt;lambda&gt;&gt;}</span>
</div>
@@ -1442,51 +1450,51 @@
</div>
<a class="headerlink" href="#TypeAnnotator.annotate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.annotate-342"><a href="#TypeAnnotator.annotate-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-343"><a href="#TypeAnnotator.annotate-343"><span class="linenos">343</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-344"><a href="#TypeAnnotator.annotate-344"><span class="linenos">344</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="TypeAnnotator.annotate-345"><a href="#TypeAnnotator.annotate-345"><span class="linenos">345</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="TypeAnnotator.annotate-346"><a href="#TypeAnnotator.annotate-346"><span class="linenos">346</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-347"><a href="#TypeAnnotator.annotate-347"><span class="linenos">347</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator.annotate-348"><a href="#TypeAnnotator.annotate-348"><span class="linenos">348</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">UDTF</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-349"><a href="#TypeAnnotator.annotate-349"><span class="linenos">349</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="TypeAnnotator.annotate-350"><a href="#TypeAnnotator.annotate-350"><span class="linenos">350</span></a>
-</span><span id="TypeAnnotator.annotate-351"><a href="#TypeAnnotator.annotate-351"><span class="linenos">351</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">Lateral</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-352"><a href="#TypeAnnotator.annotate-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-353"><a href="#TypeAnnotator.annotate-353"><span class="linenos">353</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
-</span><span id="TypeAnnotator.annotate-354"><a href="#TypeAnnotator.annotate-354"><span class="linenos">354</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-355"><a href="#TypeAnnotator.annotate-355"><span class="linenos">355</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</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="o">.</span><span class="n">expressions</span>
-</span><span id="TypeAnnotator.annotate-356"><a href="#TypeAnnotator.annotate-356"><span class="linenos">356</span></a>
-</span><span id="TypeAnnotator.annotate-357"><a href="#TypeAnnotator.annotate-357"><span class="linenos">357</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-358"><a href="#TypeAnnotator.annotate-358"><span class="linenos">358</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator.annotate-359"><a href="#TypeAnnotator.annotate-359"><span class="linenos">359</span></a>
-</span><span id="TypeAnnotator.annotate-360"><a href="#TypeAnnotator.annotate-360"><span class="linenos">360</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator.annotate-361"><a href="#TypeAnnotator.annotate-361"><span class="linenos">361</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
-</span><span id="TypeAnnotator.annotate-362"><a href="#TypeAnnotator.annotate-362"><span class="linenos">362</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
-</span><span id="TypeAnnotator.annotate-363"><a href="#TypeAnnotator.annotate-363"><span class="linenos">363</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
-</span><span id="TypeAnnotator.annotate-364"><a href="#TypeAnnotator.annotate-364"><span class="linenos">364</span></a> <span class="n">values</span><span class="p">,</span>
-</span><span id="TypeAnnotator.annotate-365"><a href="#TypeAnnotator.annotate-365"><span class="linenos">365</span></a> <span class="p">)</span>
-</span><span id="TypeAnnotator.annotate-366"><a href="#TypeAnnotator.annotate-366"><span class="linenos">366</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator.annotate-367"><a href="#TypeAnnotator.annotate-367"><span class="linenos">367</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-368"><a href="#TypeAnnotator.annotate-368"><span class="linenos">368</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TypeAnnotator.annotate-369"><a href="#TypeAnnotator.annotate-369"><span class="linenos">369</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
-</span><span id="TypeAnnotator.annotate-370"><a href="#TypeAnnotator.annotate-370"><span class="linenos">370</span></a> <span class="p">}</span>
-</span><span id="TypeAnnotator.annotate-371"><a href="#TypeAnnotator.annotate-371"><span class="linenos">371</span></a>
-</span><span id="TypeAnnotator.annotate-372"><a href="#TypeAnnotator.annotate-372"><span class="linenos">372</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
-</span><span id="TypeAnnotator.annotate-373"><a href="#TypeAnnotator.annotate-373"><span class="linenos">373</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-374"><a href="#TypeAnnotator.annotate-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
-</span><span id="TypeAnnotator.annotate-375"><a href="#TypeAnnotator.annotate-375"><span class="linenos">375</span></a> <span class="k">continue</span>
-</span><span id="TypeAnnotator.annotate-376"><a href="#TypeAnnotator.annotate-376"><span class="linenos">376</span></a>
-</span><span id="TypeAnnotator.annotate-377"><a href="#TypeAnnotator.annotate-377"><span class="linenos">377</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
-</span><span id="TypeAnnotator.annotate-378"><a href="#TypeAnnotator.annotate-378"><span class="linenos">378</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
-</span><span id="TypeAnnotator.annotate-379"><a href="#TypeAnnotator.annotate-379"><span class="linenos">379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">))</span>
-</span><span id="TypeAnnotator.annotate-380"><a href="#TypeAnnotator.annotate-380"><span class="linenos">380</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
-</span><span id="TypeAnnotator.annotate-381"><a href="#TypeAnnotator.annotate-381"><span class="linenos">381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
-</span><span id="TypeAnnotator.annotate-382"><a href="#TypeAnnotator.annotate-382"><span class="linenos">382</span></a>
-</span><span id="TypeAnnotator.annotate-383"><a href="#TypeAnnotator.annotate-383"><span class="linenos">383</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
-</span><span id="TypeAnnotator.annotate-384"><a href="#TypeAnnotator.annotate-384"><span class="linenos">384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="TypeAnnotator.annotate-385"><a href="#TypeAnnotator.annotate-385"><span class="linenos">385</span></a>
-</span><span id="TypeAnnotator.annotate-386"><a href="#TypeAnnotator.annotate-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TypeAnnotator.annotate-343"><a href="#TypeAnnotator.annotate-343"><span class="linenos">343</span></a> <span class="k">def</span> <span class="nf">annotate</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">E</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-344"><a href="#TypeAnnotator.annotate-344"><span class="linenos">344</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-345"><a href="#TypeAnnotator.annotate-345"><span class="linenos">345</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="TypeAnnotator.annotate-346"><a href="#TypeAnnotator.annotate-346"><span class="linenos">346</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="TypeAnnotator.annotate-347"><a href="#TypeAnnotator.annotate-347"><span class="linenos">347</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-348"><a href="#TypeAnnotator.annotate-348"><span class="linenos">348</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator.annotate-349"><a href="#TypeAnnotator.annotate-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">UDTF</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-350"><a href="#TypeAnnotator.annotate-350"><span class="linenos">350</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="TypeAnnotator.annotate-351"><a href="#TypeAnnotator.annotate-351"><span class="linenos">351</span></a>
+</span><span id="TypeAnnotator.annotate-352"><a href="#TypeAnnotator.annotate-352"><span class="linenos">352</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</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">Lateral</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-353"><a href="#TypeAnnotator.annotate-353"><span class="linenos">353</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-354"><a href="#TypeAnnotator.annotate-354"><span class="linenos">354</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">]</span>
+</span><span id="TypeAnnotator.annotate-355"><a href="#TypeAnnotator.annotate-355"><span class="linenos">355</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-356"><a href="#TypeAnnotator.annotate-356"><span class="linenos">356</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</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="o">.</span><span class="n">expressions</span>
+</span><span id="TypeAnnotator.annotate-357"><a href="#TypeAnnotator.annotate-357"><span class="linenos">357</span></a>
+</span><span id="TypeAnnotator.annotate-358"><a href="#TypeAnnotator.annotate-358"><span class="linenos">358</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-359"><a href="#TypeAnnotator.annotate-359"><span class="linenos">359</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator.annotate-360"><a href="#TypeAnnotator.annotate-360"><span class="linenos">360</span></a>
+</span><span id="TypeAnnotator.annotate-361"><a href="#TypeAnnotator.annotate-361"><span class="linenos">361</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator.annotate-362"><a href="#TypeAnnotator.annotate-362"><span class="linenos">362</span></a> <span class="n">alias</span><span class="p">:</span> <span class="n">column</span>
+</span><span id="TypeAnnotator.annotate-363"><a href="#TypeAnnotator.annotate-363"><span class="linenos">363</span></a> <span class="k">for</span> <span class="n">alias</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
+</span><span id="TypeAnnotator.annotate-364"><a href="#TypeAnnotator.annotate-364"><span class="linenos">364</span></a> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span><span class="p">,</span>
+</span><span id="TypeAnnotator.annotate-365"><a href="#TypeAnnotator.annotate-365"><span class="linenos">365</span></a> <span class="n">values</span><span class="p">,</span>
+</span><span id="TypeAnnotator.annotate-366"><a href="#TypeAnnotator.annotate-366"><span class="linenos">366</span></a> <span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-367"><a href="#TypeAnnotator.annotate-367"><span class="linenos">367</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator.annotate-368"><a href="#TypeAnnotator.annotate-368"><span class="linenos">368</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-369"><a href="#TypeAnnotator.annotate-369"><span class="linenos">369</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TypeAnnotator.annotate-370"><a href="#TypeAnnotator.annotate-370"><span class="linenos">370</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span>
+</span><span id="TypeAnnotator.annotate-371"><a href="#TypeAnnotator.annotate-371"><span class="linenos">371</span></a> <span class="p">}</span>
+</span><span id="TypeAnnotator.annotate-372"><a href="#TypeAnnotator.annotate-372"><span class="linenos">372</span></a>
+</span><span id="TypeAnnotator.annotate-373"><a href="#TypeAnnotator.annotate-373"><span class="linenos">373</span></a> <span class="c1"># First annotate the current scope&#39;s column references</span>
+</span><span id="TypeAnnotator.annotate-374"><a href="#TypeAnnotator.annotate-374"><span class="linenos">374</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-375"><a href="#TypeAnnotator.annotate-375"><span class="linenos">375</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
+</span><span id="TypeAnnotator.annotate-376"><a href="#TypeAnnotator.annotate-376"><span class="linenos">376</span></a> <span class="k">continue</span>
+</span><span id="TypeAnnotator.annotate-377"><a href="#TypeAnnotator.annotate-377"><span class="linenos">377</span></a>
+</span><span id="TypeAnnotator.annotate-378"><a href="#TypeAnnotator.annotate-378"><span class="linenos">378</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-379"><a href="#TypeAnnotator.annotate-379"><span class="linenos">379</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
+</span><span id="TypeAnnotator.annotate-380"><a href="#TypeAnnotator.annotate-380"><span class="linenos">380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">get_column_type</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">col</span><span class="p">))</span>
+</span><span id="TypeAnnotator.annotate-381"><a href="#TypeAnnotator.annotate-381"><span class="linenos">381</span></a> <span class="k">elif</span> <span class="n">source</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">selects</span> <span class="ow">and</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">]:</span>
+</span><span id="TypeAnnotator.annotate-382"><a href="#TypeAnnotator.annotate-382"><span class="linenos">382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_set_type</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">selects</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">][</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-383"><a href="#TypeAnnotator.annotate-383"><span class="linenos">383</span></a>
+</span><span id="TypeAnnotator.annotate-384"><a href="#TypeAnnotator.annotate-384"><span class="linenos">384</span></a> <span class="c1"># Then (possibly) annotate the remaining expressions in the scope</span>
+</span><span id="TypeAnnotator.annotate-385"><a href="#TypeAnnotator.annotate-385"><span class="linenos">385</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="TypeAnnotator.annotate-386"><a href="#TypeAnnotator.annotate-386"><span class="linenos">386</span></a>
+</span><span id="TypeAnnotator.annotate-387"><a href="#TypeAnnotator.annotate-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maybe_annotate</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="c1"># This takes care of non-traversable expressions</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/merge_subqueries.html b/docs/sqlglot/optimizer/merge_subqueries.html
index a7f7d10..adcafcd 100644
--- a/docs/sqlglot/optimizer/merge_subqueries.html
+++ b/docs/sqlglot/optimizer/merge_subqueries.html
@@ -585,7 +585,7 @@ queries if it would result in multiple table selects in a single query:</p>
<div class="attr variable">
<span class="name">UNMERGABLE_ARGS</span> =
<input id="UNMERGABLE_ARGS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{&#39;distribute&#39;, &#39;settings&#39;, &#39;windows&#39;, &#39;format&#39;, &#39;group&#39;, &#39;having&#39;, &#39;limit&#39;, &#39;laterals&#39;, &#39;with&#39;, &#39;offset&#39;, &#39;into&#39;, &#39;cluster&#39;, &#39;locks&#39;, &#39;distinct&#39;, &#39;match&#39;, &#39;connect&#39;, &#39;kind&#39;, &#39;sample&#39;, &#39;qualify&#39;, &#39;sort&#39;, &#39;pivots&#39;}</span>
+ <label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{&#39;match&#39;, &#39;format&#39;, &#39;having&#39;, &#39;windows&#39;, &#39;settings&#39;, &#39;laterals&#39;, &#39;connect&#39;, &#39;qualify&#39;, &#39;group&#39;, &#39;cluster&#39;, &#39;distribute&#39;, &#39;kind&#39;, &#39;sample&#39;, &#39;sort&#39;, &#39;locks&#39;, &#39;offset&#39;, &#39;with&#39;, &#39;pivots&#39;, &#39;into&#39;, &#39;distinct&#39;, &#39;limit&#39;}</span>
</div>
diff --git a/docs/sqlglot/optimizer/simplify.html b/docs/sqlglot/optimizer/simplify.html
index 81c4541..2d3fe29 100644
--- a/docs/sqlglot/optimizer/simplify.html
+++ b/docs/sqlglot/optimizer/simplify.html
@@ -2546,7 +2546,7 @@ prefix are statically known.</p>
<div class="attr variable">
<span class="name">DATETRUNC_COMPARISONS</span> =
<input id="DATETRUNC_COMPARISONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#In">sqlglot.expressions.In</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;}</span>
</div>
@@ -2626,7 +2626,7 @@ prefix are statically known.</p>
<section id="JOINS">
<div class="attr variable">
<span class="name">JOINS</span> =
-<span class="default_value">{(&#39;RIGHT&#39;, &#39;OUTER&#39;), (&#39;RIGHT&#39;, &#39;&#39;), (&#39;&#39;, &#39;INNER&#39;), (&#39;&#39;, &#39;&#39;)}</span>
+<span class="default_value">{(&#39;&#39;, &#39;&#39;), (&#39;&#39;, &#39;INNER&#39;), (&#39;RIGHT&#39;, &#39;&#39;), (&#39;RIGHT&#39;, &#39;OUTER&#39;)}</span>
</div>
diff --git a/docs/sqlglot/parser.html b/docs/sqlglot/parser.html
index ebc3c62..1dcdc17 100644
--- a/docs/sqlglot/parser.html
+++ b/docs/sqlglot/parser.html
@@ -2847,3361 +2847,3374 @@
</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a> <span class="n">offset</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">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</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="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
-</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="k">continue</span>
-</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="k">break</span>
-</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a>
-</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
-</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a>
+</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a>
+</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a> <span class="n">limit_by_expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="n">offset</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">limit_by_expressions</span><span class="p">)</span>
+</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="k">continue</span>
+</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="k">break</span>
+</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a>
-</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a>
-</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</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">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
-</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a>
-</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a>
-</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="k">def</span> <span class="nf">_parse_into</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">Into</span><span class="p">]:</span>
-</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
-</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
+</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
+</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a>
+</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
+</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
+</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</span></a>
+</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</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">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</span></a>
-</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="n">temp</span> <span class="o">=</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">TEMPORARY</span><span class="p">)</span>
-</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
-</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</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">TABLE</span><span class="p">)</span>
-</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a>
-</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</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-2496"><a href="#L-2496"><span class="linenos">2496</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
-</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="p">)</span>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a>
-</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
-</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</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">From</span><span class="p">]:</span>
-</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</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">FROM</span><span class="p">):</span>
-</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a>
+</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="k">def</span> <span class="nf">_parse_into</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">Into</span><span class="p">]:</span>
+</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
+</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a>
+</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="n">temp</span> <span class="o">=</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">TEMPORARY</span><span class="p">)</span>
+</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
+</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</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">TABLE</span><span class="p">)</span>
+</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a>
+</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</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-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
+</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="p">)</span>
</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a>
-</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</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-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
-</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="p">)</span>
-</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a>
-</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</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">MatchRecognize</span><span class="p">]:</span>
-</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
-</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a>
-</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
+</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</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">From</span><span class="p">]:</span>
+</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</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">FROM</span><span class="p">):</span>
+</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a>
+</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</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-2512"><a href="#L-2512"><span class="linenos">2512</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
+</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="p">)</span>
</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a>
-</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
-</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <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;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</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">MatchRecognize</span><span class="p">]:</span>
+</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
+</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a>
-</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</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;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</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;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</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;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
-</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</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;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
-</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
-</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
-</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a>
-</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
-</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</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;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
-</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
-</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
-</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
-</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a>
-</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</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;PATTERN&quot;</span><span class="p">):</span>
-</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a>
-</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a>
+</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
+</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <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;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a>
+</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</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;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</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;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
+</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</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;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
+</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</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;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
+</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
+</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
+</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a>
+</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
+</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</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;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
+</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
+</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
+</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
+</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a>
-</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</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;PATTERN&quot;</span><span class="p">):</span>
+</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a>
-</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
-</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a>
+</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a>
-</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a>
-</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
+</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a>
-</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a>
-</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a> <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_name_as_expression</span><span class="p">)</span>
-</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</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;DEFINE&quot;</span><span class="p">)</span>
-</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="p">)</span>
+</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a>
+</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a>
+</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2577"><a href="#L-2577"><span class="linenos">2577</span></a>
-</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a>
-</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</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-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="p">)</span>
-</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a>
-</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</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">Lateral</span><span class="p">]:</span>
-</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
-</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
-</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a>
-</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</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">LATERAL</span><span class="p">):</span>
-</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="n">view</span> <span class="o">=</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">VIEW</span><span class="p">)</span>
-</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="n">outer</span> <span class="o">=</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">OUTER</span><span class="p">)</span>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a>
-</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="ow">or</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><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="p">)</span>
-</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a>
-</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
-</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</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><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a> <span class="p">)</span>
+</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <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_name_as_expression</span><span class="p">)</span>
+</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</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;DEFINE&quot;</span><span class="p">)</span>
+</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="p">)</span>
+</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a>
+</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a>
+</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</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-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
+</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a> <span class="p">)</span>
+</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</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">Lateral</span><span class="p">]:</span>
+</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
+</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
+</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a>
+</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</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">LATERAL</span><span class="p">):</span>
+</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="n">view</span> <span class="o">=</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">VIEW</span><span class="p">)</span>
+</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="n">outer</span> <span class="o">=</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">OUTER</span><span class="p">)</span>
+</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a>
+</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="ow">or</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><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a> <span class="p">)</span>
</span><span id="L-2620"><a href="#L-2620"><span class="linenos">2620</span></a>
-</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</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><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <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">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</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-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
-</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a> <span class="p">)</span>
-</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
-</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a>
-</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</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-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
-</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
-</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
-</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
-</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="p">)</span>
-</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a>
-</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
-</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="p">)</span>
-</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a>
-</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</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">Join</span><span class="p">]:</span>
-</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</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-2655"><a href="#L-2655"><span class="linenos">2655</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">Join</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_table</span><span class="p">())</span>
+</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
+</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</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><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="p">)</span>
+</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a>
+</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</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><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <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">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</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-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
+</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a> <span class="p">)</span>
+</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
+</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a>
+</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</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-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
+</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
+</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
+</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
+</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a> <span class="p">)</span>
+</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
+</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="p">)</span>
</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a>
-</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
-</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="n">hint</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 class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
-</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a>
-</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</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">Join</span><span class="p">]:</span>
+</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</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-2661"><a href="#L-2661"><span class="linenos">2661</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">Join</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_table</span><span class="p">())</span>
+</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a>
+</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
+</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="n">hint</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 class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a>
-</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a>
-</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a>
-</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
-</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a>
-</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
-</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a>
-</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</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">ON</span><span class="p">):</span>
-</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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-2687"><a href="#L-2687"><span class="linenos">2687</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">USING</span><span class="p">):</span>
-</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
-</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
-</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a>
-</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</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">ON</span><span class="p">):</span>
-</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</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">USING</span><span class="p">):</span>
-</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a>
-</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a>
-</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
-</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</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">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a>
-</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</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-2707"><a href="#L-2707"><span class="linenos">2707</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-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</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-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a>
-</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</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-2712"><a href="#L-2712"><span class="linenos">2712</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">Opclass</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
-</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</span></a>
-</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a>
-</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
-</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</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">Index</span><span class="p">]:</span>
-</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a>
-</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</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">ON</span><span class="p">)</span>
-</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</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">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
-</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</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="kc">True</span><span class="p">)</span>
-</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="n">unique</span> <span class="o">=</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">UNIQUE</span><span class="p">)</span>
-</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
-</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
-</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a>
-</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
-</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a>
-</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="n">index</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><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a>
+</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
+</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a>
+</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
+</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a>
+</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
+</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a>
+</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</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">ON</span><span class="p">):</span>
+</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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-2693"><a href="#L-2693"><span class="linenos">2693</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">USING</span><span class="p">):</span>
+</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
+</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
+</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a>
+</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</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">ON</span><span class="p">):</span>
+</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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-2701"><a href="#L-2701"><span class="linenos">2701</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</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">USING</span><span class="p">):</span>
+</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a>
+</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a>
+</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
+</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</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">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a>
+</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</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-2713"><a href="#L-2713"><span class="linenos">2713</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-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</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-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a>
+</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</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-2718"><a href="#L-2718"><span class="linenos">2718</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">Opclass</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
+</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a>
+</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a>
+</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
+</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</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">Index</span><span class="p">]:</span>
+</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a>
+</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</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">ON</span><span class="p">)</span>
+</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</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">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
+</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</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="kc">True</span><span class="p">)</span>
+</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="n">unique</span> <span class="o">=</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">UNIQUE</span><span class="p">)</span>
+</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
+</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a>
-</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span 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">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a>
-</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</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">L_PAREN</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-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="n">columns</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
-</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a>
-</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <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;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a>
-</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</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-2749"><a href="#L-2749"><span class="linenos">2749</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
-</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
-</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
-</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a> <span class="p">)</span>
-</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a>
-</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</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">t</span><span class="o">.</span><span class="n">List</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-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
-</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
-</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</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><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="p">),</span>
-</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="p">)</span>
-</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="p">)</span>
-</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
-</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
-</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a>
-</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</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;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
-</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</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">FOR</span><span class="p">):</span>
-</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a>
-</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
-</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a>
-</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a>
-</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</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">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-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a> <span class="ow">or</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><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="p">)</span>
-</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a>
-</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</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="n">is_db_reference</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">Table</span><span class="p">:</span>
-</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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-2801"><a href="#L-2801"><span class="linenos">2801</span></a>
-</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a> <span class="n">table</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-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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-2807"><a href="#L-2807"><span class="linenos">2807</span></a> <span class="p">)</span>
-</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a>
-</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a>
-</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a>
-</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</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-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
-</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="p">)</span>
-</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a>
-</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <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><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</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-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
-</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a>
-</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a>
-</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
-</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="k">return</span> <span class="n">values</span>
-</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a>
-</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</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;pivots&quot;</span><span class="p">):</span>
-</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
+</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a>
+</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="n">index</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><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a>
+</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span 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">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a>
+</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</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">L_PAREN</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-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="n">columns</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
+</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a>
+</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <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;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a>
+</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</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-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
+</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
+</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
+</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="p">)</span>
+</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a>
+</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</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">t</span><span class="o">.</span><span class="n">List</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-2769"><a href="#L-2769"><span class="linenos">2769</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
+</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
+</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</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><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="p">),</span>
+</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="p">)</span>
+</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="p">)</span>
+</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
+</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
+</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a>
+</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</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;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
+</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</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">FOR</span><span class="p">):</span>
+</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a>
+</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
+</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a>
+</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a>
+</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</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">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-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="ow">or</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><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <span class="p">)</span>
+</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a>
+</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</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="n">is_db_reference</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">Table</span><span class="p">:</span>
+</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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-2807"><a href="#L-2807"><span class="linenos">2807</span></a>
+</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="n">table</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-2812"><a href="#L-2812"><span class="linenos">2812</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="p">)</span>
+</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a>
+</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a>
+</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a>
+</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</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-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
+</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="p">)</span>
+</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a>
+</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <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><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</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-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
+</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="k">return</span> <span class="n">lateral</span>
+</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a>
+</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="k">return</span> <span class="n">unnest</span>
+</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a>
+</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
+</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a>
-</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="n">bracket</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">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
-</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="n">bracket</span>
-</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
-</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="bp">self</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 class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
-</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="p">),</span>
-</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="p">)</span>
-</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a>
-</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a>
-</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
-</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a>
-</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
-</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
-</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a>
-</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</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;pivots&quot;</span><span class="p">):</span>
+</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a>
+</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="n">bracket</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">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
+</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="n">bracket</span>
+</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
+</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="bp">self</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 class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
+</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="p">),</span>
+</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="p">)</span>
+</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a>
+</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a>
+</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a>
-</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
-</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a>
-</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</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;AT&quot;</span><span class="p">):</span>
-</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</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-2880"><a href="#L-2880"><span class="linenos">2880</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</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><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="p">)</span>
-</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a>
-</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
-</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a>
-</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</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;pivots&quot;</span><span class="p">):</span>
-</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a>
-</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a>
+</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a>
+</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
+</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a>
+</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</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;AT&quot;</span><span class="p">):</span>
+</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</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-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</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><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="p">)</span>
+</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a>
+</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a>
-</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
-</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a>
-</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
-</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
-</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a>
-</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
-</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a>
-</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</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;pivots&quot;</span><span class="p">):</span>
+</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a>
+</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a>
+</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
+</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a>
+</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
+</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a>
-</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="k">def</span> <span class="nf">_parse_version</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">Version</span><span class="p">]:</span>
-</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</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">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
-</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</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">VERSION_SNAPSHOT</span><span class="p">):</span>
-</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
-</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a>
-</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="k">if</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-2914"><a href="#L-2914"><span class="linenos">2914</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="n">start</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-2916"><a href="#L-2916"><span class="linenos">2916</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-2917"><a href="#L-2917"><span class="linenos">2917</span></a> <span class="n">end</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-2918"><a href="#L-2918"><span class="linenos">2918</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
-</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="p">)</span>
-</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</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-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
-</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="n">expression</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-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</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-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="p">)</span>
-</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</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-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
-</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
-</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a>
-</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</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">Version</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 class="p">)</span>
-</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a>
-</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Unnest</span><span class="p">]:</span>
-</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
-</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
+</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a>
+</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a>
+</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a> <span class="k">def</span> <span class="nf">_parse_version</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">Version</span><span class="p">]:</span>
+</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</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">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
+</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</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">VERSION_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
+</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</span></a>
+</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="k">if</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-2920"><a href="#L-2920"><span class="linenos">2920</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="n">start</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-2922"><a href="#L-2922"><span class="linenos">2922</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-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="n">end</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-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
+</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="p">)</span>
+</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</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-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
+</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="n">expression</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-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</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-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="p">)</span>
+</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</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-2933"><a href="#L-2933"><span class="linenos">2933</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
+</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
+</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a>
-</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a> <span class="n">expressions</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_equality</span><span class="p">)</span>
-</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
-</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a>
-</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a>
-</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="k">if</span> <span class="n">alias</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;columns&quot;</span><span class="p">):</span>
-</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</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;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
-</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a>
-</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
-</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a>
-</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</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;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
-</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a>
-</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</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">ALIAS</span><span class="p">)</span>
-</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="n">offset</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><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <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">UNNEST_OFFSET_ALIAS_TOKENS</span>
-</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</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">Version</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 class="p">)</span>
+</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a>
+</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Unnest</span><span class="p">]:</span>
+</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
+</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a>
+</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="n">expressions</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_equality</span><span class="p">)</span>
+</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
+</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a>
+</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a>
+</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="k">if</span> <span class="n">alias</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;columns&quot;</span><span class="p">):</span>
+</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</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;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
+</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a>
+</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
+</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a>
+</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</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;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
+</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a>
-</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</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">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
-</span><span id="L-2964"><a href="#L-2964"><span class="linenos">2964</span></a>
-</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</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">Values</span><span class="p">]:</span>
-</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
-</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</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">VALUES</span><span class="p">):</span>
-</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</span></a>
-</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</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_value</span><span class="p">)</span>
-</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a>
-</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="L-2964"><a href="#L-2964"><span class="linenos">2964</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">ALIAS</span><span class="p">)</span>
+</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="n">offset</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><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <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">UNNEST_OFFSET_ALIAS_TOKENS</span>
+</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a>
+</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</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">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a>
+</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</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">Values</span><span class="p">]:</span>
+</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
+</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</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">VALUES</span><span class="p">):</span>
+</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a>
-</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</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-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a> <span class="p">)</span>
-</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a>
-</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</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">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">TableSample</span><span class="p">]:</span>
-</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="n">as_modifier</span> <span class="ow">and</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;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
-</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="p">):</span>
-</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</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_value</span><span class="p">)</span>
+</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a>
+</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</span></a>
+</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</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-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a> <span class="p">)</span>
</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a>
-</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a>
-</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">matched_l_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
-</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a>
-</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
-</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</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_primary</span><span class="p">)</span>
-</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
-</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</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">NUMBER</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-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="p">)</span>
-</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a>
-</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</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;BUCKET&quot;</span><span class="p">):</span>
-</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="n">bucket_numerator</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-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</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-3011"><a href="#L-3011"><span class="linenos">3011</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">ON</span><span class="p">)</span>
-</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</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">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
-</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</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">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
-</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a>
-</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a>
-</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="n">seed</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
-</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
-</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a>
-</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</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-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
-</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
-</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
-</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="p">)</span>
-</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a>
-</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
-</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a>
-</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="k">def</span> <span class="nf">_parse_joins</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
-</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</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">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">TableSample</span><span class="p">]:</span>
+</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
+</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="n">as_modifier</span> <span class="ow">and</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;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
+</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="p">):</span>
+</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a>
+</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a>
+</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="n">matched_l_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
+</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a>
+</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
+</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</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_primary</span><span class="p">)</span>
+</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
+</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</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">NUMBER</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-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="p">)</span>
+</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a>
+</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</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;BUCKET&quot;</span><span class="p">):</span>
+</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="n">bucket_numerator</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-3015"><a href="#L-3015"><span class="linenos">3015</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</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-3017"><a href="#L-3017"><span class="linenos">3017</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">ON</span><span class="p">)</span>
+</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</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">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
+</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</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">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
+</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a>
+</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a>
+</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="n">seed</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
+</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
+</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a>
+</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</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-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
+</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
+</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
+</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="p">)</span>
</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a>
-</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
-</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</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">Pivot</span><span class="p">:</span>
-</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a> <span class="k">def</span> <span class="nf">_parse_on</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-3051"><a href="#L-3051"><span class="linenos">3051</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-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="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">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
+</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a>
+</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="k">def</span> <span class="nf">_parse_joins</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
+</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</span></a>
-</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="n">expressions</span> <span class="o">=</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">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
-</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a> <span class="n">using</span> <span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
-</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="p">)</span>
-</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
-</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</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-3061"><a href="#L-3061"><span class="linenos">3061</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</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 class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
-</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="p">)</span>
-</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a>
-</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</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">In</span><span class="p">:</span>
-</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</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-3066"><a href="#L-3066"><span class="linenos">3066</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-3067"><a href="#L-3067"><span class="linenos">3067</span></a>
-</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</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">ALIAS</span><span class="p">)</span>
-</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</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">PivotAlias</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a>
-</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a>
-</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a>
-</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</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;Expecting IN (&quot;</span><span class="p">)</span>
-</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a>
-</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="n">aliased_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="n">_parse_aliased_expression</span><span class="p">)</span>
-</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a>
-</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</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">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
-</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a>
-</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</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">Pivot</span><span class="p">]:</span>
-</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a>
-</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</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">PIVOT</span><span class="p">):</span>
-</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</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">UNPIVOT</span><span class="p">):</span>
-</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a>
-</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
-</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</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;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</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;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a>
-</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a>
-</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
+</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</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">Pivot</span><span class="p">:</span>
+</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">_parse_on</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-3057"><a href="#L-3057"><span class="linenos">3057</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-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="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">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a>
+</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a> <span class="n">expressions</span> <span class="o">=</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">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
+</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="n">using</span> <span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
+</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="p">)</span>
+</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</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-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</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 class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
+</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a> <span class="p">)</span>
+</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a>
+</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</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">In</span><span class="p">:</span>
+</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</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-3072"><a href="#L-3072"><span class="linenos">3072</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-3073"><a href="#L-3073"><span class="linenos">3073</span></a>
+</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</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">ALIAS</span><span class="p">)</span>
+</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</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">PivotAlias</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a>
+</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a>
+</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a>
+</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</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;Expecting IN (&quot;</span><span class="p">)</span>
+</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a>
+</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <span class="n">aliased_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="n">_parse_aliased_expression</span><span class="p">)</span>
+</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a>
+</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</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">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
+</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a>
+</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</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">Pivot</span><span class="p">]:</span>
+</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a>
+</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</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">PIVOT</span><span class="p">):</span>
+</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</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">UNPIVOT</span><span class="p">):</span>
+</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a>
+</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
+</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</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;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</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;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</span></a>
-</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</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_column</span><span class="p">)</span>
-</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
-</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a>
-</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</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;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
-</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a>
-</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</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;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a>
+</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a>
+</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</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_column</span><span class="p">)</span>
+</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a>
-</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
-</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a>
-</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a>
-</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a> <span class="n">pivot</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-3124"><a href="#L-3124"><span class="linenos">3124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
-</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
-</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
-</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="p">)</span>
-</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a>
-</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</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-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a>
-</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</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;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
+</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a>
+</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</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;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a>
+</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
+</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a>
+</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a>
+</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="n">pivot</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-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
+</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
+</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
+</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="p">)</span>
</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a>
-</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
-</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
-</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a>
-</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
-</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a>
-</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
-</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a>
-</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</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-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a>
+</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a>
+</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
+</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
+</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="L-3151"><a href="#L-3151"><span class="linenos">3151</span></a>
-</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
-</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a>
-</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">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">Where</span><span class="p">]:</span>
-</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</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">WHERE</span><span class="p">):</span>
-</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a>
-</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</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-3160"><a href="#L-3160"><span class="linenos">3160</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_conjunction</span><span class="p">()</span>
-</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="p">)</span>
-</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a>
-</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</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">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">Group</span><span class="p">]:</span>
-</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</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">GROUP_BY</span><span class="p">):</span>
-</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a>
-</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a>
+</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
+</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a>
+</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a>
+</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
+</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a>
+</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">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">Where</span><span class="p">]:</span>
+</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</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">WHERE</span><span class="p">):</span>
+</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a>
+</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</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-3166"><a href="#L-3166"><span class="linenos">3166</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_conjunction</span><span class="p">()</span>
+</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="p">)</span>
</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a>
-</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</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">ALL</span><span class="p">):</span>
-</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</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">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</span></a>
-</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</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_conjunction</span><span class="p">)</span>
-</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a>
-</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
-</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
-</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a>
-</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a>
-</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a> <span class="n">with_</span> <span class="o">=</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">WITH</span><span class="p">)</span>
-</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</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">ROLLUP</span><span class="p">):</span>
-</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
-</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</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">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">Group</span><span class="p">]:</span>
+</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</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">GROUP_BY</span><span class="p">):</span>
+</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a>
+</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a>
+</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</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">ALL</span><span class="p">):</span>
+</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</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">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a>
+</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</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_conjunction</span><span class="p">)</span>
+</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a>
+</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
+</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
+</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a>
+</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3190"><a href="#L-3190"><span class="linenos">3190</span></a>
-</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</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">CUBE</span><span class="p">):</span>
-</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
-</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
-</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a>
-</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</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;TOTALS&quot;</span><span class="p">):</span>
-</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a>
-</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
-</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a> <span class="k">break</span>
-</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a>
-</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</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">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a>
-</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</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">t</span><span class="o">.</span><span class="n">List</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-3207"><a href="#L-3207"><span class="linenos">3207</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
-</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="n">with_</span> <span class="o">=</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">WITH</span><span class="p">)</span>
+</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</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">ROLLUP</span><span class="p">):</span>
+</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
+</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a>
+</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</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">CUBE</span><span class="p">):</span>
+</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
+</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
+</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a>
+</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</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;TOTALS&quot;</span><span class="p">):</span>
+</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
+</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a>
+</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
+</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="k">break</span>
</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</span></a>
-</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="k">return</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_grouping_set</span><span class="p">)</span>
+</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</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">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</span></a>
-</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</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-3213"><a href="#L-3213"><span class="linenos">3213</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</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">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</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">t</span><span class="o">.</span><span class="n">List</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-3213"><a href="#L-3213"><span class="linenos">3213</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
+</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a>
+</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</span></a> <span class="k">return</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_grouping_set</span><span class="p">)</span>
</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a>
-</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a>
-</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</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">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">Having</span><span class="p">]:</span>
-</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</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">HAVING</span><span class="p">):</span>
-</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</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">Having</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_conjunction</span><span class="p">())</span>
-</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a>
-</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</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">Qualify</span><span class="p">]:</span>
-</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
-</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</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">Qualify</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_conjunction</span><span class="p">())</span>
-</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a>
-</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</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">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">Connect</span><span class="p">]:</span>
-</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
-</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</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">START_WITH</span><span class="p">):</span>
-</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="n">start</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-3235"><a href="#L-3235"><span class="linenos">3235</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a>
-</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</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">CONNECT_BY</span><span class="p">)</span>
-</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</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">expression</span><span class="p">(</span>
-</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</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><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="p">)</span>
-</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="n">connect</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-3243"><a href="#L-3243"><span class="linenos">3243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
-</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a>
-</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</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">START_WITH</span><span class="p">):</span>
-</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="n">start</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-3247"><a href="#L-3247"><span class="linenos">3247</span></a>
-</span><span id="L-3248"><a href="#L-3248"><span class="linenos">3248</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">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
-</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a>
-</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</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">Alias</span><span class="p">:</span>
-</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</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-3252"><a href="#L-3252"><span class="linenos">3252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="n">alias</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">True</span><span class="p">),</span>
-</span><span id="L-3254"><a href="#L-3254"><span class="linenos">3254</span></a> <span class="n">this</span><span class="o">=</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="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="p">)</span>
-</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a>
-</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</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">t</span><span class="o">.</span><span class="n">List</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-3258"><a href="#L-3258"><span class="linenos">3258</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;INTERPOLATE&quot;</span><span class="p">):</span>
-</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="k">return</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_name_as_expression</span><span class="p">)</span>
-</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a>
-</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</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-3265"><a href="#L-3265"><span class="linenos">3265</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</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">ORDER_BY</span><span class="p">):</span>
-</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
-</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a>
-</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a>
-</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</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-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</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_ordered</span><span class="p">),</span>
-</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
-</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
-</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a> <span class="p">)</span>
-</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a>
-</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</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</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
-</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</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_class</span><span class="p">,</span> <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_ordered</span><span class="p">))</span>
-</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a>
-</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
-</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a>
-</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="n">asc</span> <span class="o">=</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">ASC</span><span class="p">)</span>
-</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="n">desc</span> <span class="o">=</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">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</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-3219"><a href="#L-3219"><span class="linenos">3219</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</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">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</span></a>
+</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a>
+</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</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">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">Having</span><span class="p">]:</span>
+</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</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">HAVING</span><span class="p">):</span>
+</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</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">Having</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_conjunction</span><span class="p">())</span>
+</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a>
+</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</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">Qualify</span><span class="p">]:</span>
+</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
+</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</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">Qualify</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_conjunction</span><span class="p">())</span>
+</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a>
+</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</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">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">Connect</span><span class="p">]:</span>
+</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
+</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</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">START_WITH</span><span class="p">):</span>
+</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="n">start</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-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a>
+</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</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">CONNECT_BY</span><span class="p">)</span>
+</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</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">expression</span><span class="p">(</span>
+</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</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><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a> <span class="p">)</span>
+</span><span id="L-3248"><a href="#L-3248"><span class="linenos">3248</span></a> <span class="n">connect</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-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
+</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a>
+</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</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">START_WITH</span><span class="p">):</span>
+</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a> <span class="n">start</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-3253"><a href="#L-3253"><span class="linenos">3253</span></a>
+</span><span id="L-3254"><a href="#L-3254"><span class="linenos">3254</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">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
+</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a>
+</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</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">Alias</span><span class="p">:</span>
+</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</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-3258"><a href="#L-3258"><span class="linenos">3258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
+</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="n">alias</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">True</span><span class="p">),</span>
+</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="n">this</span><span class="o">=</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="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a> <span class="p">)</span>
+</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a>
+</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</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">t</span><span class="o">.</span><span class="n">List</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-3264"><a href="#L-3264"><span class="linenos">3264</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;INTERPOLATE&quot;</span><span class="p">):</span>
+</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a> <span class="k">return</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_name_as_expression</span><span class="p">)</span>
+</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</span></a>
+</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
+</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</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-3271"><a href="#L-3271"><span class="linenos">3271</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</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">ORDER_BY</span><span class="p">):</span>
+</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
+</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a>
+</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a>
+</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</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-3279"><a href="#L-3279"><span class="linenos">3279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</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_ordered</span><span class="p">),</span>
+</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
+</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
+</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a> <span class="p">)</span>
+</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a>
+</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</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</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
+</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</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_class</span><span class="p">,</span> <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_ordered</span><span class="p">))</span>
</span><span id="L-3290"><a href="#L-3290"><span class="linenos">3290</span></a>
-</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
-</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
+</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a>
-</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="n">asc</span> <span class="o">=</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">ASC</span><span class="p">)</span>
+</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="n">desc</span> <span class="o">=</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">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a>
-</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a> <span class="p">)</span>
-</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a> <span class="p">):</span>
-</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a>
-</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
-</span><span id="L-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="n">with_fill</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-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
-</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</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;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</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;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a> <span class="p">},</span>
-</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="p">)</span>
-</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a>
-</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</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-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</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">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
-</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="p">)</span>
-</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a>
-</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
-</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</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-3326"><a href="#L-3326"><span class="linenos">3326</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">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
-</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
-</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="n">limit_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
-</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a>
-</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a>
-</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</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-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
+</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a>
+</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
+</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a>
+</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="L-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="p">)</span>
+</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="p">):</span>
+</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a>
+</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
+</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a> <span class="n">with_fill</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-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
+</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</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;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</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;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="p">},</span>
+</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="p">)</span>
+</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a>
+</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</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-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</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">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
+</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="p">)</span>
+</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a>
+</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</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-3332"><a href="#L-3332"><span class="linenos">3332</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">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
+</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
+</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a> <span class="n">limit_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
+</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a>
+</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
+</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</span></a>
-</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="n">limit_exp</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-3344"><a href="#L-3344"><span class="linenos">3344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
-</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="p">)</span>
-</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a>
-</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</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-3344"><a href="#L-3344"><span class="linenos">3344</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3348"><a href="#L-3348"><span class="linenos">3348</span></a>
-</span><span id="L-3349"><a href="#L-3349"><span class="linenos">3349</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">FETCH</span><span class="p">):</span>
-</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="n">direction</span> <span class="o">=</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">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
-</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a> <span class="n">direction</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 class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
-</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a>
-</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</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">FETCH_TOKENS</span><span class="p">)</span>
-</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">percent</span> <span class="o">=</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">PERCENT</span><span class="p">)</span>
-</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a>
-</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="L-3349"><a href="#L-3349"><span class="linenos">3349</span></a> <span class="n">limit_exp</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-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">(),</span>
+</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <span class="p">)</span>
</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</span></a>
-</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
-</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</span></a>
-</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
-</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</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;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</span></a>
+</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</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">FETCH</span><span class="p">):</span>
+</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a> <span class="n">direction</span> <span class="o">=</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">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
+</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="n">direction</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 class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
</span><span id="L-3363"><a href="#L-3363"><span class="linenos">3363</span></a>
-</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</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-3365"><a href="#L-3365"><span class="linenos">3365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
-</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="p">)</span>
+</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</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">FETCH_TOKENS</span><span class="p">)</span>
+</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</span></a> <span class="n">percent</span> <span class="o">=</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">PERCENT</span><span class="p">)</span>
+</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a>
+</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a>
+</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a>
-</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</span></a>
-</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-3375"><a href="#L-3375"><span class="linenos">3375</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a>
-</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
-</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</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">Offset</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">count</span><span class="p">)</span>
-</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a>
-</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="k">def</span> <span class="nf">_parse_locks</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
-</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3384"><a href="#L-3384"><span class="linenos">3384</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
-</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
-</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
-</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="p">):</span>
-</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a> <span class="k">break</span>
-</span><span id="L-3393"><a href="#L-3393"><span class="linenos">3393</span></a>
-</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</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;OF&quot;</span><span class="p">):</span>
-</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-3397"><a href="#L-3397"><span class="linenos">3397</span></a>
-</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</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;NOWAIT&quot;</span><span class="p">):</span>
-</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</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;WAIT&quot;</span><span class="p">):</span>
-</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</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;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
-</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a>
-</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <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">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
-</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="p">)</span>
-</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a>
-</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a> <span class="k">return</span> <span class="n">locks</span>
-</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a>
-</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3413"><a href="#L-3413"><span class="linenos">3413</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
-</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a> <span class="n">token_type</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">token_type</span>
-</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a>
-</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
-</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
-</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
-</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
-</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
+</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
+</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</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;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a>
+</span><span id="L-3375"><a href="#L-3375"><span class="linenos">3375</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-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
+</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a> <span class="p">)</span>
+</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</span></a>
+</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3384"><a href="#L-3384"><span class="linenos">3384</span></a>
+</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-3386"><a href="#L-3386"><span class="linenos">3386</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a>
+</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a>
+</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</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-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</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">count</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">()</span>
+</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a> <span class="p">)</span>
+</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</span></a>
+</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="k">def</span> <span class="nf">_parse_limit_by</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">t</span><span class="o">.</span><span class="n">List</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-3397"><a href="#L-3397"><span class="linenos">3397</span></a> <span class="k">return</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;BY&quot;</span><span class="p">)</span> <span class="ow">and</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_bitwise</span><span class="p">)</span>
+</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a>
+</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="k">def</span> <span class="nf">_parse_locks</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
+</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
+</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
+</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
+</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a> <span class="p">):</span>
+</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a> <span class="k">break</span>
+</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a>
+</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</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;OF&quot;</span><span class="p">):</span>
+</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a>
+</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</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;NOWAIT&quot;</span><span class="p">):</span>
+</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</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;WAIT&quot;</span><span class="p">):</span>
+</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</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;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
+</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3422"><a href="#L-3422"><span class="linenos">3422</span></a>
-</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</span></a> <span class="n">comments</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">comments</span>
-</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <span class="n">distinct</span> <span class="o">=</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">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</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-3425"><a href="#L-3425"><span class="linenos">3425</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
-</span><span id="L-3426"><a href="#L-3426"><span class="linenos">3426</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a>
-</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</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><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a> <span class="n">operation</span><span class="p">,</span>
-</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="L-3433"><a href="#L-3433"><span class="linenos">3433</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
-</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="p">)</span>
-</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a>
-</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
-</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <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">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
+</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</span></a> <span class="p">)</span>
+</span><span id="L-3426"><a href="#L-3426"><span class="linenos">3426</span></a>
+</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a> <span class="k">return</span> <span class="n">locks</span>
+</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</span></a>
+</span><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
+</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a> <span class="n">token_type</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">token_type</span>
+</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a>
+</span><span id="L-3433"><a href="#L-3433"><span class="linenos">3433</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
+</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
+</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
+</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
+</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
</span><span id="L-3439"><a href="#L-3439"><span class="linenos">3439</span></a>
-</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
-</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="n">expr</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="n">arg</span><span class="p">)</span>
-</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
-</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
-</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a>
-</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</span></a>
-</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="k">def</span> <span class="nf">_parse_expression</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-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a>
-</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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-3452"><a href="#L-3452"><span class="linenos">3452</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</span></a> <span class="n">comments</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">comments</span>
+</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="n">distinct</span> <span class="o">=</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">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</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-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
+</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a>
+</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</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><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="n">operation</span><span class="p">,</span>
+</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
+</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</span></a> <span class="p">)</span>
</span><span id="L-3453"><a href="#L-3453"><span class="linenos">3453</span></a>
-</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</span></a> <span class="k">def</span> <span class="nf">_parse_equality</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-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
+</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="L-3456"><a href="#L-3456"><span class="linenos">3456</span></a>
-</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</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-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
-</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</span></a>
-</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-3461"><a href="#L-3461"><span class="linenos">3461</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-3462"><a href="#L-3462"><span class="linenos">3462</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
-</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a>
-</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
-</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a>
-</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</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">ISNULL</span><span class="p">):</span>
-</span><span id="L-3471"><a href="#L-3471"><span class="linenos">3471</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="L-3472"><a href="#L-3472"><span class="linenos">3472</span></a>
-</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</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">NOTNULL</span><span class="p">):</span>
-</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3478"><a href="#L-3478"><span class="linenos">3478</span></a>
-</span><span id="L-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
-</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a>
-</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</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">IS</span><span class="p">):</span>
-</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a>
-</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</span></a>
-</span><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
-</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a>
-</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</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;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
-</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
-</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</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">klass</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</span></a>
-</span><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
-</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3498"><a href="#L-3498"><span class="linenos">3498</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</span></a>
-</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</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">Is</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><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</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">Not</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="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a>
-</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</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">In</span><span class="p">:</span>
-</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</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">In</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">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
-</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</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">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
-</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="n">matched_l_paren</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
-</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
-</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</span></a>
-</span><span id="L-3511"><a href="#L-3511"><span class="linenos">3511</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</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">In</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">query</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-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</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">In</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-3515"><a href="#L-3515"><span class="linenos">3515</span></a>
-</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
-</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</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;Expecting ]&quot;</span><span class="p">)</span>
-</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</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">In</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">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
-</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</span></a>
-</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3524"><a href="#L-3524"><span class="linenos">3524</span></a>
-</span><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
-</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="n">low</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-3527"><a href="#L-3527"><span class="linenos">3527</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">AND</span><span class="p">)</span>
-</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a> <span class="n">high</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-3529"><a href="#L-3529"><span class="linenos">3529</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">Between</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">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
-</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</span></a>
-</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3532"><a href="#L-3532"><span class="linenos">3532</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
-</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</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">Escape</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-3535"><a href="#L-3535"><span class="linenos">3535</span></a>
-</span><span id="L-3536"><a href="#L-3536"><span class="linenos">3536</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Interval</span><span class="p">]:</span>
-</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a>
-</span><span id="L-3539"><a href="#L-3539"><span class="linenos">3539</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
-</span><span id="L-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
+</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</span></a> <span class="n">expr</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="n">arg</span><span class="p">)</span>
+</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
+</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
+</span><span id="L-3462"><a href="#L-3462"><span class="linenos">3462</span></a>
+</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a>
+</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="k">def</span> <span class="nf">_parse_expression</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-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a>
+</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a>
+</span><span id="L-3471"><a href="#L-3471"><span class="linenos">3471</span></a> <span class="k">def</span> <span class="nf">_parse_equality</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-3472"><a href="#L-3472"><span class="linenos">3472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a>
+</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</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-3475"><a href="#L-3475"><span class="linenos">3475</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
+</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a>
+</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-3478"><a href="#L-3478"><span class="linenos">3478</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
+</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</span></a>
+</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
+</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a>
+</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</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">ISNULL</span><span class="p">):</span>
+</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a>
+</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</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">NOTNULL</span><span class="p">):</span>
+</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a>
+</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
+</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3498"><a href="#L-3498"><span class="linenos">3498</span></a>
+</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</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">IS</span><span class="p">):</span>
+</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</span></a>
+</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a>
+</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3505"><a href="#L-3505"><span class="linenos">3505</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
+</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</span></a>
+</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</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;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
+</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
+</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</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">klass</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-3511"><a href="#L-3511"><span class="linenos">3511</span></a>
+</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
+</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3515"><a href="#L-3515"><span class="linenos">3515</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a>
+</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</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">Is</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><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</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">Not</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="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a>
+</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</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">In</span><span class="p">:</span>
+</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</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">In</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">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
+</span><span id="L-3524"><a href="#L-3524"><span class="linenos">3524</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">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
+</span><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a> <span class="n">matched_l_paren</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
+</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-3527"><a href="#L-3527"><span class="linenos">3527</span></a>
+</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</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">In</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">query</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-3530"><a href="#L-3530"><span class="linenos">3530</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</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">In</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-3532"><a href="#L-3532"><span class="linenos">3532</span></a>
+</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3535"><a href="#L-3535"><span class="linenos">3535</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
+</span><span id="L-3536"><a href="#L-3536"><span class="linenos">3536</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;Expecting ]&quot;</span><span class="p">)</span>
+</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</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">In</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">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
+</span><span id="L-3539"><a href="#L-3539"><span class="linenos">3539</span></a>
+</span><span id="L-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a>
-</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</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">STRING</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-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a>
-</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a> <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">Column</span><span class="p">)</span>
-</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
-</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a> <span class="ow">and</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;IS&quot;</span>
-</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</span></a> <span class="p">):</span>
-</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
+</span><span id="L-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="n">low</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-3544"><a href="#L-3544"><span class="linenos">3544</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">AND</span><span class="p">)</span>
+</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a> <span class="n">high</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-3546"><a href="#L-3546"><span class="linenos">3546</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">Between</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">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
+</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</span></a>
+</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3549"><a href="#L-3549"><span class="linenos">3549</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
+</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</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">Escape</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</span></a>
+</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Interval</span><span class="p">]:</span>
+</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3555"><a href="#L-3555"><span class="linenos">3555</span></a>
-</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="ow">not</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-3558"><a href="#L-3558"><span class="linenos">3558</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a> <span class="p">)</span>
-</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</span></a>
-</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
-</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
-</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a>
-</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
-</span><span id="L-3571"><a href="#L-3571"><span class="linenos">3571</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</span></a>
-</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="n">this</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">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="L-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <span class="n">unit</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">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-3576"><a href="#L-3576"><span class="linenos">3576</span></a>
-</span><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</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">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a>
-</span><span id="L-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</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-3580"><a href="#L-3580"><span class="linenos">3580</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</span></a>
-</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
-</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</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><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3587"><a href="#L-3587"><span class="linenos">3587</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="p">)</span>
-</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</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">DPIPE</span><span class="p">):</span>
-</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</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><span id="L-3591"><a href="#L-3591"><span class="linenos">3591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
-</span><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
-</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</span></a> <span class="p">)</span>
-</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</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">DQMARK</span><span class="p">):</span>
-</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</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">Coalesce</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
-</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
-</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</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><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a> <span class="p">)</span>
-</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</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><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
+</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a>
+</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</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">STRING</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-3560"><a href="#L-3560"><span class="linenos">3560</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</span></a>
+</span><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a> <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">Column</span><span class="p">)</span>
+</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
+</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="ow">and</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;IS&quot;</span>
+</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="p">):</span>
+</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3571"><a href="#L-3571"><span class="linenos">3571</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a>
+</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="ow">not</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-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3576"><a href="#L-3576"><span class="linenos">3576</span></a> <span class="p">)</span>
+</span><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</span></a>
+</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
+</span><span id="L-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
+</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</span></a>
+</span><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-3587"><a href="#L-3587"><span class="linenos">3587</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
+</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</span></a>
+</span><span id="L-3591"><a href="#L-3591"><span class="linenos">3591</span></a> <span class="n">this</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">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</span></a> <span class="n">unit</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">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</span></a>
+</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</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">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</span></a>
+</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</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-3597"><a href="#L-3597"><span class="linenos">3597</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a>
+</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
+</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</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><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="L-3605"><a href="#L-3605"><span class="linenos">3605</span></a> <span class="p">)</span>
-</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a> <span class="k">break</span>
-</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a>
-</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a>
-</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a> <span class="k">def</span> <span class="nf">_parse_term</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-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
-</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a>
-</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a> <span class="k">def</span> <span class="nf">_parse_factor</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-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
-</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-3617"><a href="#L-3617"><span class="linenos">3617</span></a>
-</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
-</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</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><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a> <span class="p">)</span>
-</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">):</span>
-</span><span id="L-3626"><a href="#L-3626"><span class="linenos">3626</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
-</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
-</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a>
-</span><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</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">DPIPE</span><span class="p">):</span>
+</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</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><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
+</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
+</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="p">)</span>
+</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</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">DQMARK</span><span class="p">):</span>
+</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</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">Coalesce</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
+</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</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><span id="L-3617"><a href="#L-3617"><span class="linenos">3617</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="p">)</span>
+</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</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><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="p">)</span>
+</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a> <span class="k">break</span>
+</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</span></a>
+</span><span id="L-3626"><a href="#L-3626"><span class="linenos">3626</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a>
+</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a> <span class="k">def</span> <span class="nf">_parse_term</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-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
</span><span id="L-3630"><a href="#L-3630"><span class="linenos">3630</span></a>
-</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</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-3632"><a href="#L-3632"><span class="linenos">3632</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
-</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</span></a>
-</span><span id="L-3634"><a href="#L-3634"><span class="linenos">3634</span></a> <span class="k">def</span> <span class="nf">_parse_unary</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-3635"><a href="#L-3635"><span class="linenos">3635</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
-</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
-</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a>
-</span><span id="L-3639"><a href="#L-3639"><span class="linenos">3639</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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-3640"><a href="#L-3640"><span class="linenos">3640</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
-</span><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
-</span><span id="L-3642"><a href="#L-3642"><span class="linenos">3642</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
-</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="k">while</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</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-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="n">interval</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="c1"># type: ignore</span>
-</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="p">)</span>
+</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</span></a> <span class="k">def</span> <span class="nf">_parse_factor</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-3632"><a href="#L-3632"><span class="linenos">3632</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
+</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-3634"><a href="#L-3634"><span class="linenos">3634</span></a>
+</span><span id="L-3635"><a href="#L-3635"><span class="linenos">3635</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
+</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</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><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3639"><a href="#L-3639"><span class="linenos">3639</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</span></a> <span class="p">)</span>
+</span><span id="L-3642"><a href="#L-3642"><span class="linenos">3642</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">):</span>
+</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
+</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
+</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a>
+</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a>
-</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="k">return</span> <span class="n">interval</span>
-</span><span id="L-3649"><a href="#L-3649"><span class="linenos">3649</span></a>
-</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a> <span class="n">data_type</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 class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a>
-</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
-</span><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</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="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">data_type</span><span class="p">)</span>
-</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3661"><a href="#L-3661"><span class="linenos">3661</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3662"><a href="#L-3662"><span class="linenos">3662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</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-3649"><a href="#L-3649"><span class="linenos">3649</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
+</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a>
+</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a> <span class="k">def</span> <span class="nf">_parse_unary</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-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
+</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
+</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</span></a>
+</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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-3657"><a href="#L-3657"><span class="linenos">3657</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
+</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
+</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="k">while</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</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-3661"><a href="#L-3661"><span class="linenos">3661</span></a> <span class="n">interval</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="c1"># type: ignore</span>
+</span><span id="L-3662"><a href="#L-3662"><span class="linenos">3662</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a> <span class="p">)</span>
</span><span id="L-3664"><a href="#L-3664"><span class="linenos">3664</span></a>
-</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</span></a>
-</span><span id="L-3667"><a href="#L-3667"><span class="linenos">3667</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</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">DataTypeParam</span><span class="p">]:</span>
-</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3670"><a href="#L-3670"><span class="linenos">3670</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3671"><a href="#L-3671"><span class="linenos">3671</span></a>
-</span><span id="L-3672"><a href="#L-3672"><span class="linenos">3672</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-3673"><a href="#L-3673"><span class="linenos">3673</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3674"><a href="#L-3674"><span class="linenos">3674</span></a> <span class="p">)</span>
-</span><span id="L-3675"><a href="#L-3675"><span class="linenos">3675</span></a>
-</span><span id="L-3676"><a href="#L-3676"><span class="linenos">3676</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</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-3679"><a href="#L-3679"><span class="linenos">3679</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a>
-</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="L-3682"><a href="#L-3682"><span class="linenos">3682</span></a>
-</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
-</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a> <span class="p">)</span>
-</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</span></a>
-</span><span id="L-3690"><a href="#L-3690"><span class="linenos">3690</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</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;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-3667"><a href="#L-3667"><span class="linenos">3667</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a> <span class="n">data_type</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 class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3670"><a href="#L-3670"><span class="linenos">3670</span></a>
+</span><span id="L-3671"><a href="#L-3671"><span class="linenos">3671</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="L-3672"><a href="#L-3672"><span class="linenos">3672</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3674"><a href="#L-3674"><span class="linenos">3674</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-3675"><a href="#L-3675"><span class="linenos">3675</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-3676"><a href="#L-3676"><span class="linenos">3676</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="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">data_type</span><span class="p">)</span>
+</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a>
+</span><span id="L-3682"><a href="#L-3682"><span class="linenos">3682</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a>
+</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</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">DataTypeParam</span><span class="p">]:</span>
+</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a>
+</span><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</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-3690"><a href="#L-3690"><span class="linenos">3690</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</span></a> <span class="p">)</span>
</span><span id="L-3692"><a href="#L-3692"><span class="linenos">3692</span></a>
-</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
-</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</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-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3697"><a href="#L-3697"><span class="linenos">3697</span></a>
-</span><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </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 class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</span></a>
-</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</span></a> <span class="k">return</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">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3707"><a href="#L-3707"><span class="linenos">3707</span></a>
-</span><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</span></a> <span class="n">type_token</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">token_type</span>
+</span><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a>
+</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
+</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a> <span class="p">)</span>
+</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</span></a>
+</span><span id="L-3707"><a href="#L-3707"><span class="linenos">3707</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</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;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</span></a>
-</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
-</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</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">PseudoType</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a>
-</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
-</span><span id="L-3714"><a href="#L-3714"><span class="linenos">3714</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">ObjectIdentifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-3715"><a href="#L-3715"><span class="linenos">3715</span></a>
-</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
-</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
-</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
-</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a>
-</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</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_struct_types</span><span class="p">)</span>
-</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="L-3726"><a href="#L-3726"><span class="linenos">3726</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><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</span></a> <span class="p">)</span>
-</span><span id="L-3730"><a href="#L-3730"><span class="linenos">3730</span></a> <span class="p">)</span>
-</span><span id="L-3731"><a href="#L-3731"><span class="linenos">3731</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</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_equality</span><span class="p">)</span>
-</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
-</span><span id="L-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a> <span class="p">)</span>
-</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</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-3738"><a href="#L-3738"><span class="linenos">3738</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</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><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</span></a> <span class="p">)</span>
-</span><span id="L-3743"><a href="#L-3743"><span class="linenos">3743</span></a> <span class="p">)</span>
-</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
-</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</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_type_size</span><span class="p">)</span>
-</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a>
-</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</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">R_PAREN</span><span class="p">):</span>
-</span><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</span></a>
-</span><span id="L-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a>
-</span><span id="L-3754"><a href="#L-3754"><span class="linenos">3754</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</span></a>
-</span><span id="L-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</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">LT</span><span class="p">):</span>
-</span><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</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><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</span></a> <span class="p">)</span>
-</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="p">)</span>
-</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</span></a>
-</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="L-3768"><a href="#L-3768"><span class="linenos">3768</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;Expecting &gt;&quot;</span><span class="p">)</span>
-</span><span id="L-3769"><a href="#L-3769"><span class="linenos">3769</span></a>
-</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a> <span class="k">if</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">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
-</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="n">values</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_conjunction</span><span class="p">)</span>
-</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a> <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">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
+</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
+</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-3714"><a href="#L-3714"><span class="linenos">3714</span></a>
+</span><span id="L-3715"><a href="#L-3715"><span class="linenos">3715</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </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 class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</span></a>
+</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="k">return</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">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a>
+</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</span></a> <span class="n">type_token</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">token_type</span>
+</span><span id="L-3726"><a href="#L-3726"><span class="linenos">3726</span></a>
+</span><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
+</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</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">PseudoType</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</span></a>
+</span><span id="L-3730"><a href="#L-3730"><span class="linenos">3730</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
+</span><span id="L-3731"><a href="#L-3731"><span class="linenos">3731</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">ObjectIdentifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a>
+</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
+</span><span id="L-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
+</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
+</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3738"><a href="#L-3738"><span class="linenos">3738</span></a>
+</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</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_struct_types</span><span class="p">)</span>
+</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="L-3743"><a href="#L-3743"><span class="linenos">3743</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><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</span></a> <span class="p">)</span>
+</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a> <span class="p">)</span>
+</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</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_equality</span><span class="p">)</span>
+</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
+</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a> <span class="p">)</span>
+</span><span id="L-3754"><a href="#L-3754"><span class="linenos">3754</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</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-3755"><a href="#L-3755"><span class="linenos">3755</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</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><span id="L-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</span></a> <span class="p">)</span>
+</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</span></a> <span class="p">)</span>
+</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
+</span><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</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_type_size</span><span class="p">)</span>
+</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</span></a>
+</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</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">R_PAREN</span><span class="p">):</span>
+</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3768"><a href="#L-3768"><span class="linenos">3768</span></a>
+</span><span id="L-3769"><a href="#L-3769"><span class="linenos">3769</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a>
+</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3773"><a href="#L-3773"><span class="linenos">3773</span></a>
-</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
-</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3776"><a href="#L-3776"><span class="linenos">3776</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
-</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
-</span><span id="L-3780"><a href="#L-3780"><span class="linenos">3780</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
-</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a> <span class="p">)</span>
-</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</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-3783"><a href="#L-3783"><span class="linenos">3783</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3785"><a href="#L-3785"><span class="linenos">3785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</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-3786"><a href="#L-3786"><span class="linenos">3786</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
-</span><span id="L-3789"><a href="#L-3789"><span class="linenos">3789</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</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">LT</span><span class="p">):</span>
+</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-3776"><a href="#L-3776"><span class="linenos">3776</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</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><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3780"><a href="#L-3780"><span class="linenos">3780</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a> <span class="p">)</span>
+</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a> <span class="p">)</span>
+</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a>
+</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="L-3785"><a href="#L-3785"><span class="linenos">3785</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;Expecting &gt;&quot;</span><span class="p">)</span>
+</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a>
+</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a> <span class="k">if</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">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
+</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</span></a> <span class="n">values</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_conjunction</span><span class="p">)</span>
+</span><span id="L-3789"><a href="#L-3789"><span class="linenos">3789</span></a> <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">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
</span><span id="L-3790"><a href="#L-3790"><span class="linenos">3790</span></a>
-</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</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;TO&quot;</span><span class="p">):</span>
-</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
-</span><span id="L-3793"><a href="#L-3793"><span class="linenos">3793</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a>
-</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</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><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
-</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</span></a> <span class="p">)</span>
-</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</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">DataType</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
-</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a>
-</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
-</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a>
-</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a>
-</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
+</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3793"><a href="#L-3793"><span class="linenos">3793</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
+</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
+</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
+</span><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a> <span class="p">)</span>
+</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</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-3800"><a href="#L-3800"><span class="linenos">3800</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</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-3803"><a href="#L-3803"><span class="linenos">3803</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a>
+</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</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;TO&quot;</span><span class="p">):</span>
+</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
+</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3812"><a href="#L-3812"><span class="linenos">3812</span></a>
-</span><span id="L-3813"><a href="#L-3813"><span class="linenos">3813</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3814"><a href="#L-3814"><span class="linenos">3814</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;UNSIGNED&quot;</span><span class="p">):</span>
-</span><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
-</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
-</span><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
-</span><span id="L-3818"><a href="#L-3818"><span class="linenos">3818</span></a>
-</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
-</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a>
-</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</span></a> <span class="p">)</span>
-</span><span id="L-3828"><a href="#L-3828"><span class="linenos">3828</span></a>
-</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
-</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</span></a>
-</span><span id="L-3832"><a href="#L-3832"><span class="linenos">3832</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3833"><a href="#L-3833"><span class="linenos">3833</span></a>
-</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</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">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-3835"><a href="#L-3835"><span class="linenos">3835</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3836"><a href="#L-3836"><span class="linenos">3836</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</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">COLON</span><span class="p">)</span>
-</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a>
-</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="p">(</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
-</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a> <span class="p">):</span>
-</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-3813"><a href="#L-3813"><span class="linenos">3813</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-3814"><a href="#L-3814"><span class="linenos">3814</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><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
+</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</span></a> <span class="p">)</span>
+</span><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3818"><a href="#L-3818"><span class="linenos">3818</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">DataType</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
+</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a>
+</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a>
+</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
+</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</span></a>
+</span><span id="L-3828"><a href="#L-3828"><span class="linenos">3828</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</span></a>
+</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</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;UNSIGNED&quot;</span><span class="p">):</span>
+</span><span id="L-3832"><a href="#L-3832"><span class="linenos">3832</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
+</span><span id="L-3833"><a href="#L-3833"><span class="linenos">3833</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
+</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
+</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</span></a>
+</span><span id="L-3836"><a href="#L-3836"><span class="linenos">3836</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
+</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</span></a>
+</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
+</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a> <span class="p">)</span>
</span><span id="L-3845"><a href="#L-3845"><span class="linenos">3845</span></a>
-</span><span id="L-3846"><a href="#L-3846"><span class="linenos">3846</span></a> <span class="k">return</span> <span class="n">column_def</span>
-</span><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a>
-</span><span id="L-3848"><a href="#L-3848"><span class="linenos">3848</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3849"><a href="#L-3849"><span class="linenos">3849</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</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">AtTimeZone</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">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
-</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a>
-</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</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">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3859"><a href="#L-3859"><span class="linenos">3859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a>
-</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3862"><a href="#L-3862"><span class="linenos">3862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a>
-</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
-</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="n">op_token</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">token_type</span>
-</span><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
-</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a>
-</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
-</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="n">field</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-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
-</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="n">value</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-3875"><a href="#L-3875"><span class="linenos">3875</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span>
-</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</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">value</span><span class="p">)</span>
-</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a> <span class="p">)</span>
-</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3846"><a href="#L-3846"><span class="linenos">3846</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
+</span><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3848"><a href="#L-3848"><span class="linenos">3848</span></a>
+</span><span id="L-3849"><a href="#L-3849"><span class="linenos">3849</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a>
+</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</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">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-3852"><a href="#L-3852"><span class="linenos">3852</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</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">COLON</span><span class="p">)</span>
+</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</span></a>
+</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</span></a> <span class="p">(</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
+</span><span id="L-3859"><a href="#L-3859"><span class="linenos">3859</span></a> <span class="p">):</span>
+</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a>
+</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="k">return</span> <span class="n">column_def</span>
+</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a>
+</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3866"><a href="#L-3866"><span class="linenos">3866</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</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">AtTimeZone</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">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
+</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a>
+</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</span></a>
+</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="k">def</span> <span class="nf">_parse_column_reference</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-3875"><a href="#L-3875"><span class="linenos">3875</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</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">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a>
+</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a>
-</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a>
-</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
-</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a> <span class="k">elif</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</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;catalog&quot;</span><span class="p">):</span>
-</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</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><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="n">table</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-3896"><a href="#L-3896"><span class="linenos">3896</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</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-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</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;db&quot;</span><span class="p">),</span>
-</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="p">)</span>
-</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</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">Dot</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">field</span><span class="p">)</span>
-</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a>
-</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a> <span class="k">def</span> <span class="nf">_parse_primary</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-3905"><a href="#L-3905"><span class="linenos">3905</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
-</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a> <span class="n">token_type</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">token_type</span>
-</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a>
-</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
-</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
-</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="k">while</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">STRING</span><span class="p">):</span>
-</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
-</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a>
-</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</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">Concat</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-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
+</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a> <span class="n">op_token</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">token_type</span>
+</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
+</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a>
+</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
+</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a> <span class="n">field</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-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
+</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a>
+</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
+</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a>
+</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
+</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a> <span class="k">elif</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</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;catalog&quot;</span><span class="p">):</span>
+</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</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><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a> <span class="n">table</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-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</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-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</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;db&quot;</span><span class="p">),</span>
+</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="p">)</span>
+</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</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">Dot</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">field</span><span class="p">)</span>
+</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a>
-</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="k">return</span> <span class="n">primary</span>
-</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a>
-</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
-</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a> <span class="k">return</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="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</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 class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="k">def</span> <span class="nf">_parse_primary</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-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
+</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a> <span class="n">token_type</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">token_type</span>
+</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a>
-</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
-</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a>
-</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
-</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
-</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a>
-</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a>
-</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</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">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="p">)</span>
-</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</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">Tuple</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-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</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">Paren</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_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a>
-</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a>
-</span><span id="L-3945"><a href="#L-3945"><span class="linenos">3945</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a>
-</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3949"><a href="#L-3949"><span class="linenos">3949</span></a>
-</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</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-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
-</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a> <span class="ow">or</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="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
-</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a> <span class="p">)</span>
-</span><span id="L-3961"><a href="#L-3961"><span class="linenos">3961</span></a>
-</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</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-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
-</span><span id="L-3969"><a href="#L-3969"><span class="linenos">3969</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
-</span><span id="L-3970"><a href="#L-3970"><span class="linenos">3970</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</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">L_BRACE</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-3973"><a href="#L-3973"><span class="linenos">3973</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
-</span><span id="L-3974"><a href="#L-3974"><span class="linenos">3974</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
-</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a> <span class="p">):</span>
-</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</span></a>
-</span><span id="L-3979"><a href="#L-3979"><span class="linenos">3979</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
-</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</span></a> <span class="p">)</span>
-</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</span></a>
-</span><span id="L-3983"><a href="#L-3983"><span class="linenos">3983</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
-</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</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">R_BRACE</span><span class="p">)</span>
-</span><span id="L-3985"><a href="#L-3985"><span class="linenos">3985</span></a>
-</span><span id="L-3986"><a href="#L-3986"><span class="linenos">3986</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a>
-</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
-</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</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-3994"><a href="#L-3994"><span class="linenos">3994</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a>
-</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4001"><a href="#L-4001"><span class="linenos">4001</span></a>
-</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
-</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</span></a>
-</span><span id="L-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
-</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</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="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
-</span><span id="L-4011"><a href="#L-4011"><span class="linenos">4011</span></a>
-</span><span id="L-4012"><a href="#L-4012"><span class="linenos">4012</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</span></a>
-</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
-</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a>
-</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-4018"><a href="#L-4018"><span class="linenos">4018</span></a>
-</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
+</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
+</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="k">while</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">STRING</span><span class="p">):</span>
+</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a>
+</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</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">Concat</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-3929"><a href="#L-3929"><span class="linenos">3929</span></a>
+</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a> <span class="k">return</span> <span class="n">primary</span>
+</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a>
+</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
+</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a> <span class="k">return</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="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</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 class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a>
+</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
+</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a>
+</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
+</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a>
+</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-3945"><a href="#L-3945"><span class="linenos">3945</span></a>
+</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</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">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3949"><a href="#L-3949"><span class="linenos">3949</span></a> <span class="p">)</span>
+</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</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">Tuple</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-3952"><a href="#L-3952"><span class="linenos">3952</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</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">Paren</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_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a>
+</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</span></a>
+</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a>
+</span><span id="L-3961"><a href="#L-3961"><span class="linenos">3961</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a>
+</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
+</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3968"><a href="#L-3968"><span class="linenos">3968</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-3969"><a href="#L-3969"><span class="linenos">3969</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-3970"><a href="#L-3970"><span class="linenos">3970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
+</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</span></a> <span class="ow">or</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="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
+</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</span></a> <span class="p">)</span>
+</span><span id="L-3974"><a href="#L-3974"><span class="linenos">3974</span></a>
+</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3979"><a href="#L-3979"><span class="linenos">3979</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</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-3981"><a href="#L-3981"><span class="linenos">3981</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
+</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
+</span><span id="L-3983"><a href="#L-3983"><span class="linenos">3983</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-3985"><a href="#L-3985"><span class="linenos">3985</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">L_BRACE</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-3986"><a href="#L-3986"><span class="linenos">3986</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
+</span><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
+</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="p">):</span>
+</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a>
+</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
+</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a> <span class="p">)</span>
+</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a>
+</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
+</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</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">R_BRACE</span><span class="p">)</span>
+</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a>
+</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a> <span class="k">return</span> <span class="n">func</span>
+</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</span></a>
+</span><span id="L-4001"><a href="#L-4001"><span class="linenos">4001</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
+</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</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-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a>
+</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="L-4011"><a href="#L-4011"><span class="linenos">4011</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-4012"><a href="#L-4012"><span class="linenos">4012</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</span></a>
+</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
+</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4018"><a href="#L-4018"><span class="linenos">4018</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a>
+</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
+</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</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="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
</span><span id="L-4024"><a href="#L-4024"><span class="linenos">4024</span></a>
-</span><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="L-4026"><a href="#L-4026"><span class="linenos">4026</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">subquery_predicate</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_select</span><span class="p">())</span>
-</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4026"><a href="#L-4026"><span class="linenos">4026</span></a>
+</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
+</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4029"><a href="#L-4029"><span class="linenos">4029</span></a>
-</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
-</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a>
-</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="L-4034"><a href="#L-4034"><span class="linenos">4034</span></a>
-</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
-</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a>
+</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="L-4034"><a href="#L-4034"><span class="linenos">4034</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="L-4037"><a href="#L-4037"><span class="linenos">4037</span></a>
-</span><span id="L-4038"><a href="#L-4038"><span class="linenos">4038</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
-</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a>
-</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-4045"><a href="#L-4045"><span class="linenos">4045</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
-</span><span id="L-4046"><a href="#L-4046"><span class="linenos">4046</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
+</span><span id="L-4038"><a href="#L-4038"><span class="linenos">4038</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</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">subquery_predicate</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_select</span><span class="p">())</span>
+</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a>
+</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
+</span><span id="L-4045"><a href="#L-4045"><span class="linenos">4045</span></a>
+</span><span id="L-4046"><a href="#L-4046"><span class="linenos">4046</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</span></a>
-</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
-</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4050"><a href="#L-4050"><span class="linenos">4050</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">Anonymous</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">args</span><span class="p">)</span>
-</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a>
-</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a>
-</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a>
-</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</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-4059"><a href="#L-4059"><span class="linenos">4059</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
+</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-4050"><a href="#L-4050"><span class="linenos">4050</span></a>
+</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
+</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</span></a>
+</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
+</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="L-4060"><a href="#L-4060"><span class="linenos">4060</span></a>
-</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</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-4063"><a href="#L-4063"><span class="linenos">4063</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-4064"><a href="#L-4064"><span class="linenos">4064</span></a> <span class="n">this</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><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</span></a>
-</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</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">Dot</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
-</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a>
-</span><span id="L-4069"><a href="#L-4069"><span class="linenos">4069</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4071"><a href="#L-4071"><span class="linenos">4071</span></a>
-</span><span id="L-4072"><a href="#L-4072"><span class="linenos">4072</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-4073"><a href="#L-4073"><span class="linenos">4073</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4074"><a href="#L-4074"><span class="linenos">4074</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-4075"><a href="#L-4075"><span class="linenos">4075</span></a> <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 class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</span></a> <span class="p">)</span>
-</span><span id="L-4077"><a href="#L-4077"><span class="linenos">4077</span></a>
-</span><span id="L-4078"><a href="#L-4078"><span class="linenos">4078</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
-</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</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">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
-</span><span id="L-4082"><a href="#L-4082"><span class="linenos">4082</span></a>
-</span><span id="L-4083"><a href="#L-4083"><span class="linenos">4083</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">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
+</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4063"><a href="#L-4063"><span class="linenos">4063</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">Anonymous</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">args</span><span class="p">)</span>
+</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</span></a>
+</span><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</span></a>
+</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4069"><a href="#L-4069"><span class="linenos">4069</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a>
+</span><span id="L-4071"><a href="#L-4071"><span class="linenos">4071</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</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-4072"><a href="#L-4072"><span class="linenos">4072</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="L-4073"><a href="#L-4073"><span class="linenos">4073</span></a>
+</span><span id="L-4074"><a href="#L-4074"><span class="linenos">4074</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</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-4076"><a href="#L-4076"><span class="linenos">4076</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-4077"><a href="#L-4077"><span class="linenos">4077</span></a> <span class="n">this</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><span id="L-4078"><a href="#L-4078"><span class="linenos">4078</span></a>
+</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</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">Dot</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</span></a>
+</span><span id="L-4082"><a href="#L-4082"><span class="linenos">4082</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4083"><a href="#L-4083"><span class="linenos">4083</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4084"><a href="#L-4084"><span class="linenos">4084</span></a>
-</span><span id="L-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</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">SessionParameter</span><span class="p">:</span>
-</span><span id="L-4086"><a href="#L-4086"><span class="linenos">4086</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</span></a> <span class="n">this</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4088"><a href="#L-4088"><span class="linenos">4088</span></a>
-</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</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">DOT</span><span class="p">):</span>
-</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-4091"><a href="#L-4091"><span class="linenos">4091</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a>
-</span><span id="L-4093"><a href="#L-4093"><span class="linenos">4093</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">SessionParameter</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-4094"><a href="#L-4094"><span class="linenos">4094</span></a>
-</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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-4096"><a href="#L-4096"><span class="linenos">4096</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-4085"><a href="#L-4085"><span class="linenos">4085</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-4086"><a href="#L-4086"><span class="linenos">4086</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</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-4088"><a href="#L-4088"><span class="linenos">4088</span></a> <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 class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a> <span class="p">)</span>
+</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a>
+</span><span id="L-4091"><a href="#L-4091"><span class="linenos">4091</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
+</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4093"><a href="#L-4093"><span class="linenos">4093</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
+</span><span id="L-4094"><a href="#L-4094"><span class="linenos">4094</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">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
+</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</span></a>
+</span><span id="L-4096"><a href="#L-4096"><span class="linenos">4096</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">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-4097"><a href="#L-4097"><span class="linenos">4097</span></a>
-</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_id_var</span><span class="p">)</span>
-</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a> <span class="p">)</span>
-</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a>
-</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</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">SessionParameter</span><span class="p">:</span>
+</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a> <span class="n">this</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a>
+</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</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">DOT</span><span class="p">):</span>
+</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</span></a>
+</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</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">SessionParameter</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</span></a>
-</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
-</span><span id="L-4109"><a href="#L-4109"><span class="linenos">4109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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-4109"><a href="#L-4109"><span class="linenos">4109</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4110"><a href="#L-4110"><span class="linenos">4110</span></a>
-</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4112"><a href="#L-4112"><span class="linenos">4112</span></a>
-</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a>
-</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</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">DISTINCT</span><span class="p">):</span>
-</span><span id="L-4116"><a href="#L-4116"><span class="linenos">4116</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><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="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_conjunction</span><span class="p">)</span>
-</span><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</span></a> <span class="p">)</span>
-</span><span id="L-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a>
-</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
+</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4112"><a href="#L-4112"><span class="linenos">4112</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_id_var</span><span class="p">)</span>
+</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a> <span class="p">)</span>
+</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</span></a>
+</span><span id="L-4116"><a href="#L-4116"><span class="linenos">4116</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</span></a>
+</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
+</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</span></a>
-</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-4125"><a href="#L-4125"><span class="linenos">4125</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-4126"><a href="#L-4126"><span class="linenos">4126</span></a>
-</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</span></a> <span class="k">pass</span>
-</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
-</span><span id="L-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4125"><a href="#L-4125"><span class="linenos">4125</span></a>
+</span><span id="L-4126"><a href="#L-4126"><span class="linenos">4126</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</span></a>
+</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</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">DISTINCT</span><span class="p">):</span>
+</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</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><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="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_conjunction</span><span class="p">)</span>
+</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</span></a> <span class="p">)</span>
+</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a>
+</span><span id="L-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
</span><span id="L-4136"><a href="#L-4136"><span class="linenos">4136</span></a>
-</span><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-4138"><a href="#L-4138"><span class="linenos">4138</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4139"><a href="#L-4139"><span class="linenos">4139</span></a>
-</span><span id="L-4140"><a href="#L-4140"><span class="linenos">4140</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
-</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</span></a>
-</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</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">Schema</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">args</span><span class="p">)</span>
-</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a>
-</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</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-4146"><a href="#L-4146"><span class="linenos">4146</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-4147"><a href="#L-4147"><span class="linenos">4147</span></a>
-</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4149"><a href="#L-4149"><span class="linenos">4149</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
-</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-4140"><a href="#L-4140"><span class="linenos">4140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="k">pass</span>
+</span><span id="L-4146"><a href="#L-4146"><span class="linenos">4146</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="L-4147"><a href="#L-4147"><span class="linenos">4147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
+</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4149"><a href="#L-4149"><span class="linenos">4149</span></a>
+</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4152"><a href="#L-4152"><span class="linenos">4152</span></a>
-</span><span id="L-4153"><a href="#L-4153"><span class="linenos">4153</span></a> <span class="n">kind</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 class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4153"><a href="#L-4153"><span class="linenos">4153</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
</span><span id="L-4154"><a href="#L-4154"><span class="linenos">4154</span></a>
-</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
-</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</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">ColumnDef</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">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</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">Schema</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">args</span><span class="p">)</span>
</span><span id="L-4157"><a href="#L-4157"><span class="linenos">4157</span></a>
-</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a>
-</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</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><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4162"><a href="#L-4162"><span class="linenos">4162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
-</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</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-4165"><a href="#L-4165"><span class="linenos">4165</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
-</span><span id="L-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a> <span class="p">)</span>
-</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</span></a> <span class="p">)</span>
-</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</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-4170"><a href="#L-4170"><span class="linenos">4170</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">ALIAS</span><span class="p">)</span>
-</span><span id="L-4171"><a href="#L-4171"><span class="linenos">4171</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a> <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">TransformColumnConstraint</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_field</span><span class="p">())</span>
-</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a> <span class="p">)</span>
-</span><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</span></a>
-</span><span id="L-4175"><a href="#L-4175"><span class="linenos">4175</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
-</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="k">break</span>
-</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
-</span><span id="L-4180"><a href="#L-4180"><span class="linenos">4180</span></a>
-</span><span id="L-4181"><a href="#L-4181"><span class="linenos">4181</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
-</span><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4183"><a href="#L-4183"><span class="linenos">4183</span></a>
-</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</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">ColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
-</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a>
-</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
-</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</span></a>
-</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</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">L_PAREN</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-4193"><a href="#L-4193"><span class="linenos">4193</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-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="n">start</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-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="n">increment</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-4196"><a href="#L-4196"><span class="linenos">4196</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;START&quot;</span><span class="p">):</span>
-</span><span id="L-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="n">start</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-4198"><a href="#L-4198"><span class="linenos">4198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
-</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a> <span class="n">increment</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-4200"><a href="#L-4200"><span class="linenos">4200</span></a>
-</span><span id="L-4201"><a href="#L-4201"><span class="linenos">4201</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
-</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
-</span><span id="L-4203"><a href="#L-4203"><span class="linenos">4203</span></a>
-</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
-</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</span></a>
-</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</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">AutoRefreshProperty</span><span class="p">]:</span>
-</span><span id="L-4207"><a href="#L-4207"><span class="linenos">4207</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;REFRESH&quot;</span><span class="p">):</span>
-</span><span id="L-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</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">AutoRefreshProperty</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_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</span></a>
-</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="k">def</span> <span class="nf">_parse_compress</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">CompressColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4213"><a href="#L-4213"><span class="linenos">4213</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">L_PAREN</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-4214"><a href="#L-4214"><span class="linenos">4214</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-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</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_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-4216"><a href="#L-4216"><span class="linenos">4216</span></a> <span class="p">)</span>
-</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a>
-</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</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">CompressColumnConstraint</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><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</span></a>
-</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
-</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
-</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
-</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
-</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a> <span class="p">):</span>
-</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
-</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="L-4229"><a href="#L-4229"><span class="linenos">4229</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><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
-</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a> <span class="p">)</span>
-</span><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</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">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a>
-</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</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">ALIAS</span><span class="p">)</span>
-</span><span id="L-4237"><a href="#L-4237"><span class="linenos">4237</span></a>
-</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</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;ROW&quot;</span><span class="p">):</span>
-</span><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
-</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
-</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</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">END</span><span class="p">)</span>
-</span><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
-</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</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">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
-</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a>
-</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
-</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a>
-</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</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">START_WITH</span><span class="p">):</span>
-</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</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-4250"><a href="#L-4250"><span class="linenos">4250</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;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</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-4252"><a href="#L-4252"><span class="linenos">4252</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;MINVALUE&quot;</span><span class="p">):</span>
-</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</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-4254"><a href="#L-4254"><span class="linenos">4254</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;MAXVALUE&quot;</span><span class="p">):</span>
-</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</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-4256"><a href="#L-4256"><span class="linenos">4256</span></a>
-</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</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;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</span></a>
-</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
-</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</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-4264"><a href="#L-4264"><span class="linenos">4264</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</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;start&quot;</span><span class="p">)</span> <span class="ow">and</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">NUMBER</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-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
-</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</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-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</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-4268"><a href="#L-4268"><span class="linenos">4268</span></a>
-</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</span></a>
-</span><span id="L-4271"><a href="#L-4271"><span class="linenos">4271</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4272"><a href="#L-4272"><span class="linenos">4272</span></a>
-</span><span id="L-4273"><a href="#L-4273"><span class="linenos">4273</span></a> <span class="k">def</span> <span class="nf">_parse_inline</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">InlineLengthColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
-</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</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">InlineLengthColumnConstraint</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><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</span></a>
-</span><span id="L-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
-</span><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-4279"><a href="#L-4279"><span class="linenos">4279</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-4280"><a href="#L-4280"><span class="linenos">4280</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;NULL&quot;</span><span class="p">):</span>
-</span><span id="L-4281"><a href="#L-4281"><span class="linenos">4281</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">NotNullColumnConstraint</span><span class="p">)</span>
-</span><span id="L-4282"><a href="#L-4282"><span class="linenos">4282</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;CASESPECIFIC&quot;</span><span class="p">):</span>
-</span><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
-</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</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">NotForReplicationColumnConstraint</span><span class="p">)</span>
-</span><span id="L-4286"><a href="#L-4286"><span class="linenos">4286</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a>
-</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</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-4289"><a href="#L-4289"><span class="linenos">4289</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">CONSTRAINT</span><span class="p">):</span>
-</span><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a> <span class="n">this</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><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4293"><a href="#L-4293"><span class="linenos">4293</span></a>
-</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
-</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</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-4296"><a href="#L-4296"><span class="linenos">4296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4298"><a href="#L-4298"><span class="linenos">4298</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</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 class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
-</span><span id="L-4299"><a href="#L-4299"><span class="linenos">4299</span></a> <span class="p">)</span>
+</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</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-4159"><a href="#L-4159"><span class="linenos">4159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a>
+</span><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4162"><a href="#L-4162"><span class="linenos">4162</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
+</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-4165"><a href="#L-4165"><span class="linenos">4165</span></a>
+</span><span id="L-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="n">kind</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 class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a>
+</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
+</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</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">ColumnDef</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">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4170"><a href="#L-4170"><span class="linenos">4170</span></a>
+</span><span id="L-4171"><a href="#L-4171"><span class="linenos">4171</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a>
+</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</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><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4175"><a href="#L-4175"><span class="linenos">4175</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
+</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</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-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
+</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="L-4180"><a href="#L-4180"><span class="linenos">4180</span></a> <span class="p">)</span>
+</span><span id="L-4181"><a href="#L-4181"><span class="linenos">4181</span></a> <span class="p">)</span>
+</span><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</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-4183"><a href="#L-4183"><span class="linenos">4183</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">ALIAS</span><span class="p">)</span>
+</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a> <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">TransformColumnConstraint</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_field</span><span class="p">())</span>
+</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="p">)</span>
+</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a>
+</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
+</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</span></a> <span class="k">break</span>
+</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="L-4193"><a href="#L-4193"><span class="linenos">4193</span></a>
+</span><span id="L-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
+</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4196"><a href="#L-4196"><span class="linenos">4196</span></a>
+</span><span id="L-4197"><a href="#L-4197"><span class="linenos">4197</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">ColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
+</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</span></a>
+</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
+</span><span id="L-4200"><a href="#L-4200"><span class="linenos">4200</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4201"><a href="#L-4201"><span class="linenos">4201</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4203"><a href="#L-4203"><span class="linenos">4203</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a>
+</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</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">L_PAREN</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-4206"><a href="#L-4206"><span class="linenos">4206</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-4207"><a href="#L-4207"><span class="linenos">4207</span></a> <span class="n">start</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-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="n">increment</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-4209"><a href="#L-4209"><span class="linenos">4209</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;START&quot;</span><span class="p">):</span>
+</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="n">start</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-4211"><a href="#L-4211"><span class="linenos">4211</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
+</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="n">increment</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-4213"><a href="#L-4213"><span class="linenos">4213</span></a>
+</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
+</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
+</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a>
+</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
+</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</span></a>
+</span><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</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">AutoRefreshProperty</span><span class="p">]:</span>
+</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</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;REFRESH&quot;</span><span class="p">):</span>
+</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</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">AutoRefreshProperty</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_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a>
+</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a> <span class="k">def</span> <span class="nf">_parse_compress</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">CompressColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</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">L_PAREN</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-4227"><a href="#L-4227"><span class="linenos">4227</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-4228"><a href="#L-4228"><span class="linenos">4228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</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_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-4229"><a href="#L-4229"><span class="linenos">4229</span></a> <span class="p">)</span>
+</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a>
+</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</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">CompressColumnConstraint</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><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a>
+</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
+</span><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
+</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="L-4237"><a href="#L-4237"><span class="linenos">4237</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
+</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
+</span><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="p">):</span>
+</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
+</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</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><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
+</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a> <span class="p">)</span>
+</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
+</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</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">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</span></a>
+</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</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">ALIAS</span><span class="p">)</span>
+</span><span id="L-4250"><a href="#L-4250"><span class="linenos">4250</span></a>
+</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</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;ROW&quot;</span><span class="p">):</span>
+</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
+</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
+</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</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">END</span><span class="p">)</span>
+</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
+</span><span id="L-4256"><a href="#L-4256"><span class="linenos">4256</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">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
+</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a>
+</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
+</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a>
+</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</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">START_WITH</span><span class="p">):</span>
+</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</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-4263"><a href="#L-4263"><span class="linenos">4263</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;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</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-4265"><a href="#L-4265"><span class="linenos">4265</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;MINVALUE&quot;</span><span class="p">):</span>
+</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</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-4267"><a href="#L-4267"><span class="linenos">4267</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;MAXVALUE&quot;</span><span class="p">):</span>
+</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</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-4269"><a href="#L-4269"><span class="linenos">4269</span></a>
+</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</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;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="L-4271"><a href="#L-4271"><span class="linenos">4271</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4272"><a href="#L-4272"><span class="linenos">4272</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="L-4273"><a href="#L-4273"><span class="linenos">4273</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</span></a>
+</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
+</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</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-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</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;start&quot;</span><span class="p">)</span> <span class="ow">and</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">NUMBER</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-4278"><a href="#L-4278"><span class="linenos">4278</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
+</span><span id="L-4279"><a href="#L-4279"><span class="linenos">4279</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</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-4280"><a href="#L-4280"><span class="linenos">4280</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</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-4281"><a href="#L-4281"><span class="linenos">4281</span></a>
+</span><span id="L-4282"><a href="#L-4282"><span class="linenos">4282</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</span></a>
+</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a>
+</span><span id="L-4286"><a href="#L-4286"><span class="linenos">4286</span></a> <span class="k">def</span> <span class="nf">_parse_inline</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">InlineLengthColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
+</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</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">InlineLengthColumnConstraint</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><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</span></a>
+</span><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
+</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</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-4293"><a href="#L-4293"><span class="linenos">4293</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;NULL&quot;</span><span class="p">):</span>
+</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</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">NotNullColumnConstraint</span><span class="p">)</span>
+</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</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;CASESPECIFIC&quot;</span><span class="p">):</span>
+</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
+</span><span id="L-4298"><a href="#L-4298"><span class="linenos">4298</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">NotForReplicationColumnConstraint</span><span class="p">)</span>
+</span><span id="L-4299"><a href="#L-4299"><span class="linenos">4299</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</span></a>
-</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a>
-</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</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-4304"><a href="#L-4304"><span class="linenos">4304</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
-</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</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-4302"><a href="#L-4302"><span class="linenos">4302</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">CONSTRAINT</span><span class="p">):</span>
+</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</span></a> <span class="n">this</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><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4306"><a href="#L-4306"><span class="linenos">4306</span></a>
-</span><span id="L-4307"><a href="#L-4307"><span class="linenos">4307</span></a> <span class="n">this</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><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</span></a>
-</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="L-4312"><a href="#L-4312"><span class="linenos">4312</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a> <span class="k">break</span>
-</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="L-4307"><a href="#L-4307"><span class="linenos">4307</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
+</span><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</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-4309"><a href="#L-4309"><span class="linenos">4309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</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 class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
+</span><span id="L-4312"><a href="#L-4312"><span class="linenos">4312</span></a> <span class="p">)</span>
+</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a>
+</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</span></a>
-</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</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">Constraint</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-4317"><a href="#L-4317"><span class="linenos">4317</span></a>
-</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
-</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</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-4321"><a href="#L-4321"><span class="linenos">4321</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">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
-</span><span id="L-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
-</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</span></a> <span class="p">):</span>
-</span><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a>
-</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="n">constraint</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
-</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</span></a>
-</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</span></a>
-</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a> <span class="k">def</span> <span class="nf">_parse_unique</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">UniqueColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</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-4335"><a href="#L-4335"><span class="linenos">4335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
-</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</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><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a> <span class="n">index_type</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="p">,</span>
-</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a> <span class="p">)</span>
-</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a>
-</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4343"><a href="#L-4343"><span class="linenos">4343</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a> <span class="k">break</span>
-</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</span></a>
-</span><span id="L-4346"><a href="#L-4346"><span class="linenos">4346</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">ON</span><span class="p">):</span>
-</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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-4349"><a href="#L-4349"><span class="linenos">4349</span></a>
-</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</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;CASCADE&quot;</span><span class="p">):</span>
-</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</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;RESTRICT&quot;</span><span class="p">):</span>
-</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
-</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
-</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</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;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</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-4317"><a href="#L-4317"><span class="linenos">4317</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
+</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a>
+</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a> <span class="n">this</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><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4322"><a href="#L-4322"><span class="linenos">4322</span></a>
+</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="k">break</span>
+</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</span></a>
+</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</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">Constraint</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-4330"><a href="#L-4330"><span class="linenos">4330</span></a>
+</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</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-4334"><a href="#L-4334"><span class="linenos">4334</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">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
+</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
+</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a> <span class="p">):</span>
+</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a>
+</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a> <span class="n">constraint</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
+</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a>
+</span><span id="L-4343"><a href="#L-4343"><span class="linenos">4343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a>
+</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</span></a> <span class="k">def</span> <span class="nf">_parse_unique</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">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4346"><a href="#L-4346"><span class="linenos">4346</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</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-4348"><a href="#L-4348"><span class="linenos">4348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
+</span><span id="L-4349"><a href="#L-4349"><span class="linenos">4349</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</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><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a> <span class="n">index_type</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="p">,</span>
+</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="p">)</span>
+</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</span></a>
+</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</span></a> <span class="k">break</span>
+</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</span></a>
+</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</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">ON</span><span class="p">):</span>
+</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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-4362"><a href="#L-4362"><span class="linenos">4362</span></a>
-</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</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;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
-</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
-</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</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;DEFERRABLE&quot;</span><span class="p">):</span>
-</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
-</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</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;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
-</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
-</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</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;NORELY&quot;</span><span class="p">):</span>
-</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
-</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</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;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
-</span><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
-</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a> <span class="k">break</span>
-</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a>
-</span><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</span></a> <span class="k">return</span> <span class="n">options</span>
-</span><span id="L-4378"><a href="#L-4378"><span class="linenos">4378</span></a>
-</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Reference</span><span class="p">]:</span>
-</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</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">REFERENCES</span><span class="p">):</span>
-</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</span></a>
-</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="L-4386"><a href="#L-4386"><span class="linenos">4386</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">Reference</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 class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a>
-</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</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">ForeignKey</span><span class="p">:</span>
-</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-4390"><a href="#L-4390"><span class="linenos">4390</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
-</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a>
-</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">while</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">ON</span><span class="p">):</span>
-</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
-</span><span id="L-4395"><a href="#L-4395"><span class="linenos">4395</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
-</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a>
-</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</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 class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a>
-</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</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">SET</span><span class="p">):</span>
-</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <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">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
-</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a> <span class="n">action</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a>
-</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</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;CASCADE&quot;</span><span class="p">):</span>
+</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</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;RESTRICT&quot;</span><span class="p">):</span>
+</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
+</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
+</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</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;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a>
+</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</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;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
+</span><span id="L-4378"><a href="#L-4378"><span class="linenos">4378</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
+</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</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;DEFERRABLE&quot;</span><span class="p">):</span>
+</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
+</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</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;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
+</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
+</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</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;NORELY&quot;</span><span class="p">):</span>
+</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
+</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</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;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
+</span><span id="L-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
+</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="k">break</span>
+</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</span></a>
+</span><span id="L-4390"><a href="#L-4390"><span class="linenos">4390</span></a> <span class="k">return</span> <span class="n">options</span>
+</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a>
+</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Reference</span><span class="p">]:</span>
+</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</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">REFERENCES</span><span class="p">):</span>
+</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4395"><a href="#L-4395"><span class="linenos">4395</span></a>
+</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</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">Reference</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 class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a>
+</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</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">ForeignKey</span><span class="p">:</span>
+</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
+</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a>
+</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a> <span class="k">while</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">ON</span><span class="p">):</span>
+</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
+</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
</span><span id="L-4409"><a href="#L-4409"><span class="linenos">4409</span></a>
-</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</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-4411"><a href="#L-4411"><span class="linenos">4411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
-</span><span id="L-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
-</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</span></a> <span class="p">)</span>
-</span><span id="L-4416"><a href="#L-4416"><span class="linenos">4416</span></a>
-</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</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-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a>
-</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_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">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
-</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="L-4422"><a href="#L-4422"><span class="linenos">4422</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a>
-</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</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-4427"><a href="#L-4427"><span class="linenos">4427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
-</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a> <span class="p">)</span>
-</span><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</span></a>
-</span><span id="L-4432"><a href="#L-4432"><span class="linenos">4432</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <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">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
-</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
-</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</span></a> <span class="p">)</span>
-</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</span></a>
-</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</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">L_PAREN</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-4441"><a href="#L-4441"><span class="linenos">4441</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">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
-</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a>
-</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a> <span class="n">expressions</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><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
-</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="p">)</span>
-</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</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">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a>
-</span><span id="L-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</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">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-4450"><a href="#L-4450"><span class="linenos">4450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a>
-</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4453"><a href="#L-4453"><span class="linenos">4453</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
-</span><span id="L-4454"><a href="#L-4454"><span class="linenos">4454</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</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 class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</span></a>
+</span><span id="L-4412"><a href="#L-4412"><span class="linenos">4412</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</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">SET</span><span class="p">):</span>
+</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</span></a> <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">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
+</span><span id="L-4416"><a href="#L-4416"><span class="linenos">4416</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a> <span class="n">action</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a>
+</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="L-4422"><a href="#L-4422"><span class="linenos">4422</span></a>
+</span><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</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-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
+</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
+</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="p">)</span>
+</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a>
+</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</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-4431"><a href="#L-4431"><span class="linenos">4431</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-4432"><a href="#L-4432"><span class="linenos">4432</span></a>
+</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_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">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
+</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</span></a>
+</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</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-4440"><a href="#L-4440"><span class="linenos">4440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
+</span><span id="L-4441"><a href="#L-4441"><span class="linenos">4441</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a> <span class="p">)</span>
+</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a>
+</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <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">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
+</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
+</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a> <span class="p">)</span>
+</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a>
+</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</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">L_PAREN</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-4454"><a href="#L-4454"><span class="linenos">4454</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">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</span></a>
-</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a> <span class="n">bracket_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">token_type</span>
-</span><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</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><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
-</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a> <span class="p">)</span>
-</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</span></a>
-</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
-</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
-</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
-</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a>
-</span><span id="L-4466"><a href="#L-4466"><span class="linenos">4466</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="L-4467"><a href="#L-4467"><span class="linenos">4467</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</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">Struct</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-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
-</span><span id="L-4470"><a href="#L-4470"><span class="linenos">4470</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">Array</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-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
-</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</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">Bracket</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-4474"><a href="#L-4474"><span class="linenos">4474</span></a>
-</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4477"><a href="#L-4477"><span class="linenos">4477</span></a>
-</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4479"><a href="#L-4479"><span class="linenos">4479</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">COLON</span><span class="p">):</span>
-</span><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</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">Slice</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4482"><a href="#L-4482"><span class="linenos">4482</span></a>
-</span><span id="L-4483"><a href="#L-4483"><span class="linenos">4483</span></a> <span class="k">def</span> <span class="nf">_parse_case</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-4484"><a href="#L-4484"><span class="linenos">4484</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</span></a>
-</span><span id="L-4487"><a href="#L-4487"><span class="linenos">4487</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a> <span class="n">expression</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-4489"><a href="#L-4489"><span class="linenos">4489</span></a>
-</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
-</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</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-4492"><a href="#L-4492"><span class="linenos">4492</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">THEN</span><span class="p">)</span>
-</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a> <span class="n">then</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-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</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">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
+</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a> <span class="n">expressions</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><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
+</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a> <span class="p">)</span>
+</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</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">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</span></a>
+</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</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">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-4463"><a href="#L-4463"><span class="linenos">4463</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a>
+</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4466"><a href="#L-4466"><span class="linenos">4466</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
+</span><span id="L-4467"><a href="#L-4467"><span class="linenos">4467</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</span></a>
+</span><span id="L-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="n">bracket_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">token_type</span>
+</span><span id="L-4470"><a href="#L-4470"><span class="linenos">4470</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><span id="L-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
+</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</span></a> <span class="p">)</span>
+</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</span></a>
+</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
+</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
+</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="L-4477"><a href="#L-4477"><span class="linenos">4477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
+</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a>
+</span><span id="L-4479"><a href="#L-4479"><span class="linenos">4479</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</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">Struct</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-4482"><a href="#L-4482"><span class="linenos">4482</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
+</span><span id="L-4483"><a href="#L-4483"><span class="linenos">4483</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">Array</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-4484"><a href="#L-4484"><span class="linenos">4484</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
+</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</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">Bracket</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-4487"><a href="#L-4487"><span class="linenos">4487</span></a>
+</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a>
+</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4492"><a href="#L-4492"><span class="linenos">4492</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">COLON</span><span class="p">):</span>
+</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</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">Slice</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</span></a>
-</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</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">ELSE</span><span class="p">):</span>
-</span><span id="L-4497"><a href="#L-4497"><span class="linenos">4497</span></a> <span class="n">default</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-4498"><a href="#L-4498"><span class="linenos">4498</span></a>
-</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
-</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
-</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
-</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-4504"><a href="#L-4504"><span class="linenos">4504</span></a>
-</span><span id="L-4505"><a href="#L-4505"><span class="linenos">4505</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
-</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a> <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">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
-</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</span></a> <span class="p">)</span>
+</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</span></a> <span class="k">def</span> <span class="nf">_parse_case</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-4497"><a href="#L-4497"><span class="linenos">4497</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4498"><a href="#L-4498"><span class="linenos">4498</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a>
+</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a> <span class="n">expression</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-4502"><a href="#L-4502"><span class="linenos">4502</span></a>
+</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
+</span><span id="L-4504"><a href="#L-4504"><span class="linenos">4504</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-4505"><a href="#L-4505"><span class="linenos">4505</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">THEN</span><span class="p">)</span>
+</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a> <span class="n">then</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-4507"><a href="#L-4507"><span class="linenos">4507</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</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">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
</span><span id="L-4508"><a href="#L-4508"><span class="linenos">4508</span></a>
-</span><span id="L-4509"><a href="#L-4509"><span class="linenos">4509</span></a> <span class="k">def</span> <span class="nf">_parse_if</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-4510"><a href="#L-4510"><span class="linenos">4510</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
-</span><span id="L-4512"><a href="#L-4512"><span class="linenos">4512</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</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 class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</span></a>
-</span><span id="L-4517"><a href="#L-4517"><span class="linenos">4517</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-4519"><a href="#L-4519"><span class="linenos">4519</span></a>
-</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="n">condition</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-4509"><a href="#L-4509"><span class="linenos">4509</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">ELSE</span><span class="p">):</span>
+</span><span id="L-4510"><a href="#L-4510"><span class="linenos">4510</span></a> <span class="n">default</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-4511"><a href="#L-4511"><span class="linenos">4511</span></a>
+</span><span id="L-4512"><a href="#L-4512"><span class="linenos">4512</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
+</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
+</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
+</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-4517"><a href="#L-4517"><span class="linenos">4517</span></a>
+</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
+</span><span id="L-4519"><a href="#L-4519"><span class="linenos">4519</span></a> <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">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
+</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="p">)</span>
</span><span id="L-4521"><a href="#L-4521"><span class="linenos">4521</span></a>
-</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
-</span><span id="L-4523"><a href="#L-4523"><span class="linenos">4523</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a>
-</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</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">THEN</span><span class="p">)</span>
-</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a> <span class="n">true</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-4528"><a href="#L-4528"><span class="linenos">4528</span></a> <span class="n">false</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 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">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-4529"><a href="#L-4529"><span class="linenos">4529</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">END</span><span class="p">)</span>
-</span><span id="L-4530"><a href="#L-4530"><span class="linenos">4530</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">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
-</span><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a>
-</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4533"><a href="#L-4533"><span class="linenos">4533</span></a>
-</span><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</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-4535"><a href="#L-4535"><span class="linenos">4535</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;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
-</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</span></a> <span class="k">def</span> <span class="nf">_parse_if</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-4523"><a href="#L-4523"><span class="linenos">4523</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
+</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</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 class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4528"><a href="#L-4528"><span class="linenos">4528</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-4529"><a href="#L-4529"><span class="linenos">4529</span></a>
+</span><span id="L-4530"><a href="#L-4530"><span class="linenos">4530</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</span></a>
+</span><span id="L-4533"><a href="#L-4533"><span class="linenos">4533</span></a> <span class="n">condition</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-4534"><a href="#L-4534"><span class="linenos">4534</span></a>
+</span><span id="L-4535"><a href="#L-4535"><span class="linenos">4535</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4538"><a href="#L-4538"><span class="linenos">4538</span></a>
-</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</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-4540"><a href="#L-4540"><span class="linenos">4540</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
-</span><span id="L-4541"><a href="#L-4541"><span class="linenos">4541</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
-</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a> <span class="n">order</span><span class="o">=</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">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
-</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="p">)</span>
+</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</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">THEN</span><span class="p">)</span>
+</span><span id="L-4540"><a href="#L-4540"><span class="linenos">4540</span></a> <span class="n">true</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-4541"><a href="#L-4541"><span class="linenos">4541</span></a> <span class="n">false</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 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">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</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">END</span><span class="p">)</span>
+</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</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">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
</span><span id="L-4544"><a href="#L-4544"><span class="linenos">4544</span></a>
-</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a> <span class="k">def</span> <span class="nf">_parse_extract</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">Extract</span><span class="p">:</span>
-</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-4547"><a href="#L-4547"><span class="linenos">4547</span></a>
-</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</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">FROM</span><span class="p">):</span>
-</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</span></a>
-</span><span id="L-4551"><a href="#L-4551"><span class="linenos">4551</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</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-4552"><a href="#L-4552"><span class="linenos">4552</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-4553"><a href="#L-4553"><span class="linenos">4553</span></a>
-</span><span id="L-4554"><a href="#L-4554"><span class="linenos">4554</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4555"><a href="#L-4555"><span class="linenos">4555</span></a>
-</span><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</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">AnyValue</span><span class="p">:</span>
-</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4559"><a href="#L-4559"><span class="linenos">4559</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</span></a>
+</span><span id="L-4547"><a href="#L-4547"><span class="linenos">4547</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</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-4548"><a href="#L-4548"><span class="linenos">4548</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;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
+</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4551"><a href="#L-4551"><span class="linenos">4551</span></a>
+</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</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-4553"><a href="#L-4553"><span class="linenos">4553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
+</span><span id="L-4554"><a href="#L-4554"><span class="linenos">4554</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
+</span><span id="L-4555"><a href="#L-4555"><span class="linenos">4555</span></a> <span class="n">order</span><span class="o">=</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">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
+</span><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</span></a> <span class="p">)</span>
+</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</span></a>
+</span><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a> <span class="k">def</span> <span class="nf">_parse_extract</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">Extract</span><span class="p">:</span>
+</span><span id="L-4559"><a href="#L-4559"><span class="linenos">4559</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="L-4560"><a href="#L-4560"><span class="linenos">4560</span></a>
-</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</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">HAVING</span><span class="p">):</span>
-</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
-</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a> <span class="n">is_max</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 class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-4565"><a href="#L-4565"><span class="linenos">4565</span></a>
-</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</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">AnyValue</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">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
-</span><span id="L-4567"><a href="#L-4567"><span class="linenos">4567</span></a>
-</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</span></a> <span class="k">def</span> <span class="nf">_parse_cast</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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-4569"><a href="#L-4569"><span class="linenos">4569</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-4570"><a href="#L-4570"><span class="linenos">4570</span></a>
-</span><span id="L-4571"><a href="#L-4571"><span class="linenos">4571</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
-</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</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-4573"><a href="#L-4573"><span class="linenos">4573</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">CastToStrType</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-4574"><a href="#L-4574"><span class="linenos">4574</span></a>
-</span><span id="L-4575"><a href="#L-4575"><span class="linenos">4575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
-</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a>
-</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4578"><a href="#L-4578"><span class="linenos">4578</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-4579"><a href="#L-4579"><span class="linenos">4579</span></a>
-</span><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</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">FORMAT</span><span class="p">):</span>
-</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4582"><a href="#L-4582"><span class="linenos">4582</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</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">FROM</span><span class="p">):</span>
+</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a>
+</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</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</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-4565"><a href="#L-4565"><span class="linenos">4565</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</span></a>
+</span><span id="L-4567"><a href="#L-4567"><span class="linenos">4567</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</span></a>
+</span><span id="L-4569"><a href="#L-4569"><span class="linenos">4569</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</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">AnyValue</span><span class="p">:</span>
+</span><span id="L-4570"><a href="#L-4570"><span class="linenos">4570</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="L-4571"><a href="#L-4571"><span class="linenos">4571</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4573"><a href="#L-4573"><span class="linenos">4573</span></a>
+</span><span id="L-4574"><a href="#L-4574"><span class="linenos">4574</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">HAVING</span><span class="p">):</span>
+</span><span id="L-4575"><a href="#L-4575"><span class="linenos">4575</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
+</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a> <span class="n">is_max</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 class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-4578"><a href="#L-4578"><span class="linenos">4578</span></a>
+</span><span id="L-4579"><a href="#L-4579"><span class="linenos">4579</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">AnyValue</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">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
+</span><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</span></a>
+</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a> <span class="k">def</span> <span class="nf">_parse_cast</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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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-4582"><a href="#L-4582"><span class="linenos">4582</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-4583"><a href="#L-4583"><span class="linenos">4583</span></a>
-</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</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><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <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">exp</span><span 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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
-</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="nb">format</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><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-4592"><a href="#L-4592"><span class="linenos">4592</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
-</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a> <span class="p">)</span>
-</span><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a> <span class="p">),</span>
-</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="p">)</span>
-</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</span></a>
-</span><span id="L-4599"><a href="#L-4599"><span class="linenos">4599</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</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">StrToTime</span><span class="p">):</span>
-</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
-</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
-</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</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">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
-</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</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">CHARACTER_SET</span><span class="p">):</span>
-</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="n">to</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">CharacterSet</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_var_or_string</span><span class="p">())</span>
-</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a>
-</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</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-4611"><a href="#L-4611"><span class="linenos">4611</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 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 class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
-</span><span id="L-4612"><a href="#L-4612"><span class="linenos">4612</span></a> <span class="p">)</span>
-</span><span id="L-4613"><a href="#L-4613"><span class="linenos">4613</span></a>
-</span><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</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-4615"><a href="#L-4615"><span class="linenos">4615</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">DISTINCT</span><span class="p">):</span>
-</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-4617"><a href="#L-4617"><span class="linenos">4617</span></a> <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">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
-</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</span></a> <span class="p">]</span>
-</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</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-4620"><a href="#L-4620"><span class="linenos">4620</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</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_conjunction</span><span class="p">))</span>
-</span><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</span></a>
-</span><span id="L-4624"><a href="#L-4624"><span class="linenos">4624</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="L-4627"><a href="#L-4627"><span class="linenos">4627</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
-</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</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_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
-</span><span id="L-4629"><a href="#L-4629"><span class="linenos">4629</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</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-4630"><a href="#L-4630"><span class="linenos">4630</span></a>
-</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
-</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
-</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
-</span><span id="L-4634"><a href="#L-4634"><span class="linenos">4634</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a>
-</span><span id="L-4638"><a href="#L-4638"><span class="linenos">4638</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
-</span><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</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><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</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-4641"><a href="#L-4641"><span class="linenos">4641</span></a>
-</span><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
-</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</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-4645"><a href="#L-4645"><span class="linenos">4645</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-4646"><a href="#L-4646"><span class="linenos">4646</span></a>
-</span><span id="L-4647"><a href="#L-4647"><span class="linenos">4647</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">USING</span><span class="p">):</span>
-</span><span id="L-4648"><a href="#L-4648"><span class="linenos">4648</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4649"><a href="#L-4649"><span class="linenos">4649</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</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_var</span><span class="p">()</span>
-</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a> <span class="p">)</span>
-</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</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">COMMA</span><span class="p">):</span>
-</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</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-4653"><a href="#L-4653"><span class="linenos">4653</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4655"><a href="#L-4655"><span class="linenos">4655</span></a>
-</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
-</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a>
-</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a> <span class="k">def</span> <span class="nf">_parse_decode</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">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
-</span><span id="L-4659"><a href="#L-4659"><span class="linenos">4659</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4660"><a href="#L-4660"><span class="linenos">4660</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
-</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a>
-</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</span></a><span class="sd"> - DECODE(bin, charset)</span>
-</span><span id="L-4663"><a href="#L-4663"><span class="linenos">4663</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
-</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</span></a>
-</span><span id="L-4665"><a href="#L-4665"><span class="linenos">4665</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
+</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</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-4586"><a href="#L-4586"><span class="linenos">4586</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">CastToStrType</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a>
+</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
+</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a>
+</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</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-4592"><a href="#L-4592"><span class="linenos">4592</span></a>
+</span><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</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">FORMAT</span><span class="p">):</span>
+</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a>
+</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="L-4599"><a href="#L-4599"><span class="linenos">4599</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</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><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <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">exp</span><span 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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
+</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a> <span class="nb">format</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><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
+</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="p">)</span>
+</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a> <span class="p">),</span>
+</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</span></a> <span class="p">)</span>
+</span><span id="L-4611"><a href="#L-4611"><span class="linenos">4611</span></a>
+</span><span id="L-4612"><a href="#L-4612"><span class="linenos">4612</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</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">StrToTime</span><span class="p">):</span>
+</span><span id="L-4613"><a href="#L-4613"><span class="linenos">4613</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
+</span><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4615"><a href="#L-4615"><span class="linenos">4615</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
+</span><span id="L-4617"><a href="#L-4617"><span class="linenos">4617</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</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">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
+</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</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">CHARACTER_SET</span><span class="p">):</span>
+</span><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</span></a> <span class="n">to</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">CharacterSet</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_var_or_string</span><span class="p">())</span>
+</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</span></a>
+</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</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-4624"><a href="#L-4624"><span class="linenos">4624</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 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 class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
+</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="p">)</span>
+</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a>
+</span><span id="L-4627"><a href="#L-4627"><span class="linenos">4627</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</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-4628"><a href="#L-4628"><span class="linenos">4628</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">DISTINCT</span><span class="p">):</span>
+</span><span id="L-4629"><a href="#L-4629"><span class="linenos">4629</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a> <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">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
+</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a> <span class="p">]</span>
+</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</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-4633"><a href="#L-4633"><span class="linenos">4633</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</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_conjunction</span><span class="p">))</span>
+</span><span id="L-4634"><a href="#L-4634"><span class="linenos">4634</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a>
+</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-4638"><a href="#L-4638"><span class="linenos">4638</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
+</span><span id="L-4641"><a href="#L-4641"><span class="linenos">4641</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</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_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
+</span><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</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-4643"><a href="#L-4643"><span class="linenos">4643</span></a>
+</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
+</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
+</span><span id="L-4646"><a href="#L-4646"><span class="linenos">4646</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
+</span><span id="L-4647"><a href="#L-4647"><span class="linenos">4647</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="L-4648"><a href="#L-4648"><span class="linenos">4648</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4649"><a href="#L-4649"><span class="linenos">4649</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a>
+</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
+</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</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><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</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-4654"><a href="#L-4654"><span class="linenos">4654</span></a>
+</span><span id="L-4655"><a href="#L-4655"><span class="linenos">4655</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
+</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</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-4658"><a href="#L-4658"><span class="linenos">4658</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-4659"><a href="#L-4659"><span class="linenos">4659</span></a>
+</span><span id="L-4660"><a href="#L-4660"><span class="linenos">4660</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">USING</span><span class="p">):</span>
+</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</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_var</span><span class="p">()</span>
+</span><span id="L-4663"><a href="#L-4663"><span class="linenos">4663</span></a> <span class="p">)</span>
+</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</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">COMMA</span><span class="p">):</span>
+</span><span id="L-4665"><a href="#L-4665"><span class="linenos">4665</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-4666"><a href="#L-4666"><span class="linenos">4666</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</span></a>
+</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
</span><span id="L-4670"><a href="#L-4670"><span class="linenos">4670</span></a>
-</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
-</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</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">Decode</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">charset</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-4673"><a href="#L-4673"><span class="linenos">4673</span></a>
-</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
-</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="k">def</span> <span class="nf">_parse_decode</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">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
+</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4673"><a href="#L-4673"><span class="linenos">4673</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
+</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a>
+</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</span></a><span class="sd"> - DECODE(bin, charset)</span>
+</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
</span><span id="L-4677"><a href="#L-4677"><span class="linenos">4677</span></a>
-</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
-</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4682"><a href="#L-4682"><span class="linenos">4682</span></a>
-</span><span id="L-4683"><a href="#L-4683"><span class="linenos">4683</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="L-4686"><a href="#L-4686"><span class="linenos">4686</span></a> <span class="p">)</span>
-</span><span id="L-4687"><a href="#L-4687"><span class="linenos">4687</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
-</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4689"><a href="#L-4689"><span class="linenos">4689</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</span></a> <span class="p">)</span>
-</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
-</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
-</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
-</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
-</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a> <span class="p">),</span>
-</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a> <span class="p">)</span>
-</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
-</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a>
-</span><span id="L-4703"><a href="#L-4703"><span class="linenos">4703</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-4704"><a href="#L-4704"><span class="linenos">4704</span></a>
-</span><span id="L-4705"><a href="#L-4705"><span class="linenos">4705</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</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">JSONKeyValue</span><span class="p">]:</span>
-</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
-</span><span id="L-4709"><a href="#L-4709"><span class="linenos">4709</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
-</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="n">value</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-4711"><a href="#L-4711"><span class="linenos">4711</span></a>
-</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="L-4713"><a href="#L-4713"><span class="linenos">4713</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</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">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4682"><a href="#L-4682"><span class="linenos">4682</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
+</span><span id="L-4683"><a href="#L-4683"><span class="linenos">4683</span></a>
+</span><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
+</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</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">Decode</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">charset</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-4686"><a href="#L-4686"><span class="linenos">4686</span></a>
+</span><span id="L-4687"><a href="#L-4687"><span class="linenos">4687</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
+</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-4689"><a href="#L-4689"><span class="linenos">4689</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</span></a>
+</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
+</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</span></a>
+</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</span></a> <span class="p">)</span>
+</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
+</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="L-4703"><a href="#L-4703"><span class="linenos">4703</span></a> <span class="p">)</span>
+</span><span id="L-4704"><a href="#L-4704"><span class="linenos">4704</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4705"><a href="#L-4705"><span class="linenos">4705</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
+</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
+</span><span id="L-4709"><a href="#L-4709"><span class="linenos">4709</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
+</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</span></a> <span class="p">),</span>
+</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4713"><a href="#L-4713"><span class="linenos">4713</span></a> <span class="p">)</span>
+</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</span></a>
-</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4717"><a href="#L-4717"><span class="linenos">4717</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
-</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</span></a>
-</span><span id="L-4720"><a href="#L-4720"><span class="linenos">4720</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">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</span></a>
-</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
-</span><span id="L-4724"><a href="#L-4724"><span class="linenos">4724</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-4725"><a href="#L-4725"><span class="linenos">4725</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="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
-</span><span id="L-4726"><a href="#L-4726"><span class="linenos">4726</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</span></a>
-</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4729"><a href="#L-4729"><span class="linenos">4729</span></a>
-</span><span id="L-4730"><a href="#L-4730"><span class="linenos">4730</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</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">JSONObject</span><span class="p">:</span>
-</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a> <span class="o">...</span>
-</span><span id="L-4733"><a href="#L-4733"><span class="linenos">4733</span></a>
-</span><span id="L-4734"><a href="#L-4734"><span class="linenos">4734</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
-</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a> <span class="o">...</span>
-</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a>
-</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="L-4740"><a href="#L-4740"><span class="linenos">4740</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
-</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a> <span class="k">if</span> <span class="n">star</span>
-</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
-</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a> <span class="p">)</span>
-</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
+</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</span></a>
+</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</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">JSONKeyValue</span><span class="p">]:</span>
+</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="L-4720"><a href="#L-4720"><span class="linenos">4720</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
+</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
+</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</span></a> <span class="n">value</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-4724"><a href="#L-4724"><span class="linenos">4724</span></a>
+</span><span id="L-4725"><a href="#L-4725"><span class="linenos">4725</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="L-4726"><a href="#L-4726"><span class="linenos">4726</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</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">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a>
+</span><span id="L-4729"><a href="#L-4729"><span class="linenos">4729</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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-4730"><a href="#L-4730"><span class="linenos">4730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
+</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a>
+</span><span id="L-4733"><a href="#L-4733"><span class="linenos">4733</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">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4734"><a href="#L-4734"><span class="linenos">4734</span></a>
+</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
+</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</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="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
+</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-4740"><a href="#L-4740"><span class="linenos">4740</span></a>
+</span><span id="L-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a>
+</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</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">JSONObject</span><span class="p">:</span>
+</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="o">...</span>
</span><span id="L-4746"><a href="#L-4746"><span class="linenos">4746</span></a>
-</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4750"><a href="#L-4750"><span class="linenos">4750</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</span></a>
-</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
-</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</span></a>
-</span><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
-</span><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
+</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="o">...</span>
+</span><span id="L-4750"><a href="#L-4750"><span class="linenos">4750</span></a>
+</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
+</span><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</span></a> <span class="k">if</span> <span class="n">star</span>
+</span><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
</span><span id="L-4757"><a href="#L-4757"><span class="linenos">4757</span></a> <span class="p">)</span>
-</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
</span><span id="L-4759"><a href="#L-4759"><span class="linenos">4759</span></a>
-</span><span id="L-4760"><a href="#L-4760"><span class="linenos">4760</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-4761"><a href="#L-4761"><span class="linenos">4761</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4763"><a href="#L-4763"><span class="linenos">4763</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
-</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
-</span><span id="L-4765"><a href="#L-4765"><span class="linenos">4765</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
-</span><span id="L-4766"><a href="#L-4766"><span class="linenos">4766</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</span></a> <span class="p">)</span>
-</span><span id="L-4768"><a href="#L-4768"><span class="linenos">4768</span></a>
-</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
-</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</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">JSONColumnDef</span><span class="p">:</span>
-</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</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;NESTED&quot;</span><span class="p">):</span>
-</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a> <span class="n">this</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><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</span></a> <span class="n">kind</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 class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-4774"><a href="#L-4774"><span class="linenos">4774</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4775"><a href="#L-4775"><span class="linenos">4775</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4779"><a href="#L-4779"><span class="linenos">4779</span></a>
-</span><span id="L-4780"><a href="#L-4780"><span class="linenos">4780</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="L-4782"><a href="#L-4782"><span class="linenos">4782</span></a>
-</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</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-4784"><a href="#L-4784"><span class="linenos">4784</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
-</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
-</span><span id="L-4789"><a href="#L-4789"><span class="linenos">4789</span></a> <span class="p">)</span>
-</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a>
-</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</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">JSONSchema</span><span class="p">:</span>
-</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
-</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</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-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
-</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a> <span class="n">expressions</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_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-4796"><a href="#L-4796"><span class="linenos">4796</span></a> <span class="p">)</span>
-</span><span id="L-4797"><a href="#L-4797"><span class="linenos">4797</span></a>
-</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
-</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</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-4800"><a href="#L-4800"><span class="linenos">4800</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="L-4804"><a href="#L-4804"><span class="linenos">4804</span></a>
-</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
-</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4807"><a href="#L-4807"><span class="linenos">4807</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="L-4808"><a href="#L-4808"><span class="linenos">4808</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
-</span><span id="L-4810"><a href="#L-4810"><span class="linenos">4810</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
-</span><span id="L-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="p">)</span>
-</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a>
-</span><span id="L-4813"><a href="#L-4813"><span class="linenos">4813</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</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">MatchAgainst</span><span class="p">:</span>
-</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</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_column</span><span class="p">)</span>
-</span><span id="L-4815"><a href="#L-4815"><span class="linenos">4815</span></a>
-</span><span id="L-4816"><a href="#L-4816"><span class="linenos">4816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
+</span><span id="L-4760"><a href="#L-4760"><span class="linenos">4760</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4763"><a href="#L-4763"><span class="linenos">4763</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4765"><a href="#L-4765"><span class="linenos">4765</span></a>
+</span><span id="L-4766"><a href="#L-4766"><span class="linenos">4766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
+</span><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</span></a>
+</span><span id="L-4768"><a href="#L-4768"><span class="linenos">4768</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
+</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a> <span class="p">)</span>
+</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a>
+</span><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</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-4774"><a href="#L-4774"><span class="linenos">4774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="L-4775"><a href="#L-4775"><span class="linenos">4775</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
+</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
+</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
+</span><span id="L-4779"><a href="#L-4779"><span class="linenos">4779</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="L-4780"><a href="#L-4780"><span class="linenos">4780</span></a> <span class="p">)</span>
+</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</span></a>
+</span><span id="L-4782"><a href="#L-4782"><span class="linenos">4782</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
+</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</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">JSONColumnDef</span><span class="p">:</span>
+</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</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;NESTED&quot;</span><span class="p">):</span>
+</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</span></a> <span class="n">this</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><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a> <span class="n">kind</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 class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4789"><a href="#L-4789"><span class="linenos">4789</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</span></a>
+</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
+</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a>
+</span><span id="L-4796"><a href="#L-4796"><span class="linenos">4796</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-4797"><a href="#L-4797"><span class="linenos">4797</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
+</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-4800"><a href="#L-4800"><span class="linenos">4800</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
+</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="p">)</span>
+</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</span></a>
+</span><span id="L-4804"><a href="#L-4804"><span class="linenos">4804</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</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">JSONSchema</span><span class="p">:</span>
+</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
+</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</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-4807"><a href="#L-4807"><span class="linenos">4807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
+</span><span id="L-4808"><a href="#L-4808"><span class="linenos">4808</span></a> <span class="n">expressions</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_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a> <span class="p">)</span>
+</span><span id="L-4810"><a href="#L-4810"><span class="linenos">4810</span></a>
+</span><span id="L-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
+</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</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-4813"><a href="#L-4813"><span class="linenos">4813</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="L-4815"><a href="#L-4815"><span class="linenos">4815</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="L-4816"><a href="#L-4816"><span class="linenos">4816</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="L-4817"><a href="#L-4817"><span class="linenos">4817</span></a>
-</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a>
-</span><span id="L-4820"><a href="#L-4820"><span class="linenos">4820</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
-</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
-</span><span id="L-4824"><a href="#L-4824"><span class="linenos">4824</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
+</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4820"><a href="#L-4820"><span class="linenos">4820</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
+</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
+</span><span id="L-4824"><a href="#L-4824"><span class="linenos">4824</span></a> <span class="p">)</span>
+</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a>
+</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</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">MatchAgainst</span><span class="p">:</span>
+</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</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_column</span><span class="p">)</span>
+</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a>
+</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
</span><span id="L-4830"><a href="#L-4830"><span class="linenos">4830</span></a>
-</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</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-4832"><a href="#L-4832"><span class="linenos">4832</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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 class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
-</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a> <span class="p">)</span>
-</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a>
-</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
-</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</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">OpenJSON</span><span class="p">:</span>
-</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</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-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a>
-</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
-</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="n">kind</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-4843"><a href="#L-4843"><span class="linenos">4843</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
-</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</span></a>
-</span><span id="L-4846"><a href="#L-4846"><span class="linenos">4846</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-4847"><a href="#L-4847"><span class="linenos">4847</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
-</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a> <span class="p">)</span>
-</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</span></a>
-</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</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="n">_parse_open_json_column_def</span><span class="p">)</span>
-</span><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a>
-</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</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">OpenJSON</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">path</span><span class="o">=</span><span class="n">path</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-4856"><a href="#L-4856"><span class="linenos">4856</span></a>
-</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
-</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</span></a>
-</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</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">IN</span><span class="p">):</span>
-</span><span id="L-4861"><a href="#L-4861"><span class="linenos">4861</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-4862"><a href="#L-4862"><span class="linenos">4862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</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">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-4863"><a href="#L-4863"><span class="linenos">4863</span></a> <span class="p">)</span>
-</span><span id="L-4864"><a href="#L-4864"><span class="linenos">4864</span></a>
-</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</span></a> <span class="n">haystack</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-4867"><a href="#L-4867"><span class="linenos">4867</span></a> <span class="n">needle</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-4868"><a href="#L-4868"><span class="linenos">4868</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a> <span class="n">needle</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-4870"><a href="#L-4870"><span class="linenos">4870</span></a> <span class="n">haystack</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-4871"><a href="#L-4871"><span class="linenos">4871</span></a>
-</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</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-4873"><a href="#L-4873"><span class="linenos">4873</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <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-4874"><a href="#L-4874"><span class="linenos">4874</span></a> <span class="p">)</span>
-</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a>
-</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="k">def</span> <span class="nf">_parse_predict</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">Predict</span><span class="p">:</span>
-</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
-</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-4879"><a href="#L-4879"><span class="linenos">4879</span></a>
-</span><span id="L-4880"><a href="#L-4880"><span class="linenos">4880</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-4881"><a href="#L-4881"><span class="linenos">4881</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
-</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a>
-</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</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-4884"><a href="#L-4884"><span class="linenos">4884</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
-</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
-</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="n">params_struct</span><span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</span></a> <span class="p">)</span>
-</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a>
-</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
-</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="n">args</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_table</span><span class="p">)</span>
-</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</span></a>
-</span><span id="L-4894"><a href="#L-4894"><span class="linenos">4894</span></a> <span class="k">def</span> <span class="nf">_parse_substring</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">Substring</span><span class="p">:</span>
-</span><span id="L-4895"><a href="#L-4895"><span class="linenos">4895</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="L-4896"><a href="#L-4896"><span class="linenos">4896</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="L-4897"><a href="#L-4897"><span class="linenos">4897</span></a>
-</span><span id="L-4898"><a href="#L-4898"><span class="linenos">4898</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_bitwise</span><span class="p">))</span>
-</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a>
-</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</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">FROM</span><span class="p">):</span>
-</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4902"><a href="#L-4902"><span class="linenos">4902</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">FOR</span><span class="p">):</span>
-</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a>
-</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a>
+</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
+</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
+</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="L-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a>
+</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</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-4845"><a href="#L-4845"><span class="linenos">4845</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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 class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
+</span><span id="L-4846"><a href="#L-4846"><span class="linenos">4846</span></a> <span class="p">)</span>
+</span><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a>
+</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</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">OpenJSON</span><span class="p">:</span>
+</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</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-4851"><a href="#L-4851"><span class="linenos">4851</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a>
+</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
+</span><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a> <span class="n">kind</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-4856"><a href="#L-4856"><span class="linenos">4856</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
+</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a>
+</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</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-4860"><a href="#L-4860"><span class="linenos">4860</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
+</span><span id="L-4861"><a href="#L-4861"><span class="linenos">4861</span></a> <span class="p">)</span>
+</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></a>
+</span><span id="L-4863"><a href="#L-4863"><span class="linenos">4863</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4864"><a href="#L-4864"><span class="linenos">4864</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</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="n">_parse_open_json_column_def</span><span class="p">)</span>
+</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a>
+</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</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">OpenJSON</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">path</span><span class="o">=</span><span class="n">path</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-4869"><a href="#L-4869"><span class="linenos">4869</span></a>
+</span><span id="L-4870"><a href="#L-4870"><span class="linenos">4870</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
+</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</span></a>
+</span><span id="L-4873"><a href="#L-4873"><span class="linenos">4873</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">IN</span><span class="p">):</span>
+</span><span id="L-4874"><a href="#L-4874"><span class="linenos">4874</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-4875"><a href="#L-4875"><span class="linenos">4875</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</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">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-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="p">)</span>
+</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a>
+</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="L-4879"><a href="#L-4879"><span class="linenos">4879</span></a> <span class="n">haystack</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-4880"><a href="#L-4880"><span class="linenos">4880</span></a> <span class="n">needle</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-4881"><a href="#L-4881"><span class="linenos">4881</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a> <span class="n">needle</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-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="n">haystack</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-4884"><a href="#L-4884"><span class="linenos">4884</span></a>
+</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</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-4886"><a href="#L-4886"><span class="linenos">4886</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <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-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="p">)</span>
+</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</span></a>
+</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a> <span class="k">def</span> <span class="nf">_parse_predict</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">Predict</span><span class="p">:</span>
+</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
+</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a>
+</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</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-4894"><a href="#L-4894"><span class="linenos">4894</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
+</span><span id="L-4895"><a href="#L-4895"><span class="linenos">4895</span></a>
+</span><span id="L-4896"><a href="#L-4896"><span class="linenos">4896</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-4897"><a href="#L-4897"><span class="linenos">4897</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
+</span><span id="L-4898"><a href="#L-4898"><span class="linenos">4898</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
+</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</span></a> <span class="n">params_struct</span><span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</span></a> <span class="p">)</span>
+</span><span id="L-4902"><a href="#L-4902"><span class="linenos">4902</span></a>
+</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
+</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a> <span class="n">args</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_table</span><span class="p">)</span>
+</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-4906"><a href="#L-4906"><span class="linenos">4906</span></a>
-</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="k">def</span> <span class="nf">_parse_trim</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">Trim</span><span class="p">:</span>
-</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="k">def</span> <span class="nf">_parse_substring</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">Substring</span><span class="p">:</span>
+</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
</span><span id="L-4910"><a href="#L-4910"><span class="linenos">4910</span></a>
-</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4914"><a href="#L-4914"><span class="linenos">4914</span></a>
-</span><span id="L-4915"><a href="#L-4915"><span class="linenos">4915</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="n">position</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_bitwise</span><span class="p">))</span>
+</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a>
+</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</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">FROM</span><span class="p">):</span>
+</span><span id="L-4914"><a href="#L-4914"><span class="linenos">4914</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4915"><a href="#L-4915"><span class="linenos">4915</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">FOR</span><span class="p">):</span>
+</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-4917"><a href="#L-4917"><span class="linenos">4917</span></a>
-</span><span id="L-4918"><a href="#L-4918"><span class="linenos">4918</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-4919"><a href="#L-4919"><span class="linenos">4919</span></a> <span class="k">if</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">COMMA</span><span class="p">)):</span>
-</span><span id="L-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="n">invert_order</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
-</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</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-4922"><a href="#L-4922"><span class="linenos">4922</span></a>
-</span><span id="L-4923"><a href="#L-4923"><span class="linenos">4923</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
-</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a> <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">this</span>
-</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a>
-</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</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">COLLATE</span><span class="p">):</span>
-</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a> <span class="n">collation</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-4928"><a href="#L-4928"><span class="linenos">4928</span></a>
-</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</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-4930"><a href="#L-4930"><span class="linenos">4930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</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">position</span><span class="o">=</span><span class="n">position</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">collation</span><span class="o">=</span><span class="n">collation</span>
-</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</span></a> <span class="p">)</span>
-</span><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</span></a>
-</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</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">t</span><span class="o">.</span><span class="n">List</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-4934"><a href="#L-4934"><span class="linenos">4934</span></a> <span class="k">return</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">WINDOW</span><span class="p">)</span> <span class="ow">and</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_named_window</span><span class="p">)</span>
+</span><span id="L-4918"><a href="#L-4918"><span class="linenos">4918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4919"><a href="#L-4919"><span class="linenos">4919</span></a>
+</span><span id="L-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="k">def</span> <span class="nf">_parse_trim</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">Trim</span><span class="p">:</span>
+</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="L-4922"><a href="#L-4922"><span class="linenos">4922</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="L-4923"><a href="#L-4923"><span class="linenos">4923</span></a>
+</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a>
+</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a> <span class="n">position</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4930"><a href="#L-4930"><span class="linenos">4930</span></a>
+</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</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-4932"><a href="#L-4932"><span class="linenos">4932</span></a> <span class="k">if</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">COMMA</span><span class="p">)):</span>
+</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="n">invert_order</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
+</span><span id="L-4934"><a href="#L-4934"><span class="linenos">4934</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-4935"><a href="#L-4935"><span class="linenos">4935</span></a>
-</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</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-4937"><a href="#L-4937"><span class="linenos">4937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
+</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a> <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">this</span>
</span><span id="L-4938"><a href="#L-4938"><span class="linenos">4938</span></a>
-</span><span id="L-4939"><a href="#L-4939"><span class="linenos">4939</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
-</span><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-4941"><a href="#L-4941"><span class="linenos">4941</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-4942"><a href="#L-4942"><span class="linenos">4942</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;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-4943"><a href="#L-4943"><span class="linenos">4943</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">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4944"><a href="#L-4944"><span class="linenos">4944</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;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-4945"><a href="#L-4945"><span class="linenos">4945</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">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</span></a>
-</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</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-4951"><a href="#L-4951"><span class="linenos">4951</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</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">WHERE</span><span class="p">)</span>
-</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</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><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</span></a> <span class="p">)</span>
-</span><span id="L-4956"><a href="#L-4956"><span class="linenos">4956</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</span></a>
-</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
-</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
-</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</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">WithinGroup</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">order</span><span class="p">)</span>
-</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</span></a>
-</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
-</span><span id="L-4967"><a href="#L-4967"><span class="linenos">4967</span></a>
-</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="L-4939"><a href="#L-4939"><span class="linenos">4939</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">COLLATE</span><span class="p">):</span>
+</span><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a> <span class="n">collation</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-4941"><a href="#L-4941"><span class="linenos">4941</span></a>
+</span><span id="L-4942"><a href="#L-4942"><span class="linenos">4942</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-4943"><a href="#L-4943"><span class="linenos">4943</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</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">position</span><span class="o">=</span><span class="n">position</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">collation</span><span class="o">=</span><span class="n">collation</span>
+</span><span id="L-4944"><a href="#L-4944"><span class="linenos">4944</span></a> <span class="p">)</span>
+</span><span id="L-4945"><a href="#L-4945"><span class="linenos">4945</span></a>
+</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</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">t</span><span class="o">.</span><span class="n">List</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-4947"><a href="#L-4947"><span class="linenos">4947</span></a> <span class="k">return</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">WINDOW</span><span class="p">)</span> <span class="ow">and</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_named_window</span><span class="p">)</span>
+</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</span></a>
+</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</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-4950"><a href="#L-4950"><span class="linenos">4950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a>
+</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</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-4955"><a href="#L-4955"><span class="linenos">4955</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;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-4956"><a href="#L-4956"><span class="linenos">4956</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">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</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;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</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">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</span></a>
+</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</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-4964"><a href="#L-4964"><span class="linenos">4964</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</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">WHERE</span><span class="p">)</span>
+</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</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><span id="L-4967"><a href="#L-4967"><span class="linenos">4967</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="p">)</span>
+</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4970"><a href="#L-4970"><span class="linenos">4970</span></a>
-</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a> <span class="c1"># The below changes handle</span>
-</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</span></a>
-</span><span id="L-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="L-4975"><a href="#L-4975"><span class="linenos">4975</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
-</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="L-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
+</span><span id="L-4975"><a href="#L-4975"><span class="linenos">4975</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">WithinGroup</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">order</span><span class="p">)</span>
+</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a>
+</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="L-4980"><a href="#L-4980"><span class="linenos">4980</span></a>
-</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</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">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4984"><a href="#L-4984"><span class="linenos">4984</span></a>
-</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</span></a>
+</span><span id="L-4984"><a href="#L-4984"><span class="linenos">4984</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
</span><span id="L-4986"><a href="#L-4986"><span class="linenos">4986</span></a>
-</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4990"><a href="#L-4990"><span class="linenos">4990</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">ALIAS</span><span class="p">)</span>
-</span><span id="L-4991"><a href="#L-4991"><span class="linenos">4991</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
-</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4993"><a href="#L-4993"><span class="linenos">4993</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4994"><a href="#L-4994"><span class="linenos">4994</span></a> <span class="n">over</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a>
-</span><span id="L-4996"><a href="#L-4996"><span class="linenos">4996</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</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-4998"><a href="#L-4998"><span class="linenos">4998</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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">alias</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="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
-</span><span id="L-4999"><a href="#L-4999"><span class="linenos">4999</span></a> <span class="p">)</span>
-</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a>
-</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a> <span class="n">window_alias</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">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a>
-</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a> <span class="n">first</span> <span class="o">=</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">FIRST</span><span class="p">)</span>
-</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</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;LAST&quot;</span><span class="p">):</span>
-</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-5006"><a href="#L-5006"><span class="linenos">5006</span></a>
-</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
-</span><span id="L-5008"><a href="#L-5008"><span class="linenos">5008</span></a> <span class="n">kind</span> <span class="o">=</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">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</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-5009"><a href="#L-5009"><span class="linenos">5009</span></a>
-</span><span id="L-5010"><a href="#L-5010"><span class="linenos">5010</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</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">BETWEEN</span><span class="p">)</span>
-</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
-</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</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">AND</span><span class="p">)</span>
-</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
+</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="L-4990"><a href="#L-4990"><span class="linenos">4990</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="L-4991"><a href="#L-4991"><span class="linenos">4991</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="L-4993"><a href="#L-4993"><span class="linenos">4993</span></a>
+</span><span id="L-4994"><a href="#L-4994"><span class="linenos">4994</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4996"><a href="#L-4996"><span class="linenos">4996</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">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</span></a>
+</span><span id="L-4998"><a href="#L-4998"><span class="linenos">4998</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4999"><a href="#L-4999"><span class="linenos">4999</span></a>
+</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</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">ALIAS</span><span class="p">)</span>
+</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
+</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5006"><a href="#L-5006"><span class="linenos">5006</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <span class="n">over</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-5008"><a href="#L-5008"><span class="linenos">5008</span></a>
+</span><span id="L-5009"><a href="#L-5009"><span class="linenos">5009</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-5010"><a href="#L-5010"><span class="linenos">5010</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-5011"><a href="#L-5011"><span class="linenos">5011</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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">alias</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="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
+</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a> <span class="p">)</span>
+</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</span></a>
+</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a> <span class="n">window_alias</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">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a>
-</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a> <span class="n">spec</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-5017"><a href="#L-5017"><span class="linenos">5017</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="p">)</span>
-</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a>
-</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a> <span class="n">first</span> <span class="o">=</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">FIRST</span><span class="p">)</span>
+</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</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;LAST&quot;</span><span class="p">):</span>
+</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a>
+</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
+</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="n">kind</span> <span class="o">=</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">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</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-5022"><a href="#L-5022"><span class="linenos">5022</span></a>
+</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</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">BETWEEN</span><span class="p">)</span>
+</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</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">AND</span><span class="p">)</span>
+</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a>
-</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a> <span class="n">window</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-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="L-5033"><a href="#L-5033"><span class="linenos">5033</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
-</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
-</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
-</span><span id="L-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="p">)</span>
+</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a> <span class="n">spec</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-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="L-5033"><a href="#L-5033"><span class="linenos">5033</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a> <span class="p">)</span>
+</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5039"><a href="#L-5039"><span class="linenos">5039</span></a>
-</span><span id="L-5040"><a href="#L-5040"><span class="linenos">5040</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
-</span><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</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-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</span></a>
-</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a> <span class="k">return</span> <span class="n">window</span>
-</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</span></a>
-</span><span id="L-5046"><a href="#L-5046"><span class="linenos">5046</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
-</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">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-5049"><a href="#L-5049"><span class="linenos">5049</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</span></a>
-</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</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">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-5052"><a href="#L-5052"><span class="linenos">5052</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">BETWEEN</span><span class="p">)</span>
-</span><span id="L-5053"><a href="#L-5053"><span class="linenos">5053</span></a>
-</span><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-5055"><a href="#L-5055"><span class="linenos">5055</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-5056"><a href="#L-5056"><span class="linenos">5056</span></a> <span class="p">(</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;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
-</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a> <span class="ow">or</span> <span class="p">(</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;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
-</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="p">),</span>
-</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span>
-</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a> <span class="p">}</span>
-</span><span id="L-5062"><a href="#L-5062"><span class="linenos">5062</span></a>
-</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
-</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-5065"><a href="#L-5065"><span class="linenos">5065</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-5066"><a href="#L-5066"><span class="linenos">5066</span></a> <span class="n">any_token</span> <span class="o">=</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><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a>
-</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
-</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a>
-</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a> <span class="n">aliases</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-5074"><a href="#L-5074"><span class="linenos">5074</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</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="k">lambda</span><span class="p">:</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="p">)),</span>
-</span><span id="L-5078"><a href="#L-5078"><span class="linenos">5078</span></a> <span class="p">)</span>
-</span><span id="L-5079"><a href="#L-5079"><span class="linenos">5079</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
-</span><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="L-5040"><a href="#L-5040"><span class="linenos">5040</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</span></a>
+</span><span id="L-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="n">window</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-5043"><a href="#L-5043"><span class="linenos">5043</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="L-5046"><a href="#L-5046"><span class="linenos">5046</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
+</span><span id="L-5049"><a href="#L-5049"><span class="linenos">5049</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a> <span class="p">)</span>
+</span><span id="L-5052"><a href="#L-5052"><span class="linenos">5052</span></a>
+</span><span id="L-5053"><a href="#L-5053"><span class="linenos">5053</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
+</span><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</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-5055"><a href="#L-5055"><span class="linenos">5055</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-5056"><a href="#L-5056"><span class="linenos">5056</span></a>
+</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a> <span class="k">return</span> <span class="n">window</span>
+</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a>
+</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">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-5062"><a href="#L-5062"><span class="linenos">5062</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a>
+</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</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">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-5065"><a href="#L-5065"><span class="linenos">5065</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">BETWEEN</span><span class="p">)</span>
+</span><span id="L-5066"><a href="#L-5066"><span class="linenos">5066</span></a>
+</span><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a> <span class="p">(</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;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
+</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a> <span class="ow">or</span> <span class="p">(</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;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
+</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a> <span class="p">),</span>
+</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span>
+</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a> <span class="p">}</span>
+</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a>
+</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-5078"><a href="#L-5078"><span class="linenos">5078</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-5079"><a href="#L-5079"><span class="linenos">5079</span></a> <span class="n">any_token</span> <span class="o">=</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><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-5081"><a href="#L-5081"><span class="linenos">5081</span></a>
-</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a> <span class="n">alias</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="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="L-5084"><a href="#L-5084"><span class="linenos">5084</span></a> <span class="p">)</span>
-</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</span></a>
-</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</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">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</span></a>
-</span><span id="L-5090"><a href="#L-5090"><span class="linenos">5090</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
-</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
-</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
+</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5084"><a href="#L-5084"><span class="linenos">5084</span></a>
+</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a> <span class="n">aliases</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-5087"><a href="#L-5087"><span class="linenos">5087</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5090"><a href="#L-5090"><span class="linenos">5090</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="k">lambda</span><span class="p">:</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="p">)),</span>
+</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a> <span class="p">)</span>
+</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
+</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a> <span class="k">return</span> <span class="n">aliases</span>
</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</span></a>
-</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a>
-</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-5099"><a href="#L-5099"><span class="linenos">5099</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-5100"><a href="#L-5100"><span class="linenos">5100</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</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-5102"><a href="#L-5102"><span class="linenos">5102</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
-</span><span id="L-5103"><a href="#L-5103"><span class="linenos">5103</span></a>
-</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="k">return</span> <span class="n">identifier</span>
-</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a>
-</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
-</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</span></a> <span class="n">quoted</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
-</span><span id="L-5109"><a href="#L-5109"><span class="linenos">5109</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
-</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a>
-</span><span id="L-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a>
-</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a> <span class="k">def</span> <span class="nf">_parse_string</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-5114"><a href="#L-5114"><span class="linenos">5114</span></a> <span class="k">if</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
-</span><span id="L-5115"><a href="#L-5115"><span class="linenos">5115</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5116"><a href="#L-5116"><span class="linenos">5116</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5117"><a href="#L-5117"><span class="linenos">5117</span></a>
-</span><span id="L-5118"><a href="#L-5118"><span class="linenos">5118</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</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">Identifier</span><span class="p">]:</span>
-</span><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a>
-</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a> <span class="k">def</span> <span class="nf">_parse_number</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-5122"><a href="#L-5122"><span class="linenos">5122</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">NUMBER</span><span class="p">):</span>
-</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a> <span class="n">alias</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="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a> <span class="p">)</span>
+</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</span></a>
+</span><span id="L-5099"><a href="#L-5099"><span class="linenos">5099</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-5100"><a href="#L-5100"><span class="linenos">5100</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">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-5102"><a href="#L-5102"><span class="linenos">5102</span></a>
+</span><span id="L-5103"><a href="#L-5103"><span class="linenos">5103</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
+</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
+</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a>
+</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5109"><a href="#L-5109"><span class="linenos">5109</span></a>
+</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5114"><a href="#L-5114"><span class="linenos">5114</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-5115"><a href="#L-5115"><span class="linenos">5115</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
+</span><span id="L-5116"><a href="#L-5116"><span class="linenos">5116</span></a>
+</span><span id="L-5117"><a href="#L-5117"><span class="linenos">5117</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="L-5118"><a href="#L-5118"><span class="linenos">5118</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</span></a>
+</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
+</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a> <span class="n">quoted</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="L-5122"><a href="#L-5122"><span class="linenos">5122</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
+</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a>
+</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5125"><a href="#L-5125"><span class="linenos">5125</span></a>
-</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</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-5127"><a href="#L-5127"><span class="linenos">5127</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">IDENTIFIER</span><span class="p">):</span>
-</span><span id="L-5128"><a href="#L-5128"><span class="linenos">5128</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">Identifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a> <span class="k">def</span> <span class="nf">_parse_string</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-5127"><a href="#L-5127"><span class="linenos">5127</span></a> <span class="k">if</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
+</span><span id="L-5128"><a href="#L-5128"><span class="linenos">5128</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-5129"><a href="#L-5129"><span class="linenos">5129</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-5130"><a href="#L-5130"><span class="linenos">5130</span></a>
-</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
-</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-5134"><a href="#L-5134"><span class="linenos">5134</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</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-5137"><a href="#L-5137"><span class="linenos">5137</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-5138"><a href="#L-5138"><span class="linenos">5138</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
-</span><span id="L-5139"><a href="#L-5139"><span class="linenos">5139</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">VAR</span><span class="p">)</span>
-</span><span id="L-5140"><a href="#L-5140"><span class="linenos">5140</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a> <span class="p">):</span>
-</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</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-5143"><a href="#L-5143"><span class="linenos">5143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</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-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="p">)</span>
-</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a>
-</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
-</span><span id="L-5149"><a href="#L-5149"><span class="linenos">5149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5150"><a href="#L-5150"><span class="linenos">5150</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5152"><a href="#L-5152"><span class="linenos">5152</span></a>
-</span><span id="L-5153"><a href="#L-5153"><span class="linenos">5153</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</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-5154"><a href="#L-5154"><span class="linenos">5154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</span></a>
-</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a> <span class="k">def</span> <span class="nf">_parse_null</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-5157"><a href="#L-5157"><span class="linenos">5157</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
-</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a>
-</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</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-5162"><a href="#L-5162"><span class="linenos">5162</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">TRUE</span><span class="p">):</span>
-</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</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">FALSE</span><span class="p">):</span>
-</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5166"><a href="#L-5166"><span class="linenos">5166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5167"><a href="#L-5167"><span class="linenos">5167</span></a>
-</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</span></a> <span class="k">def</span> <span class="nf">_parse_star</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-5169"><a href="#L-5169"><span class="linenos">5169</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">STAR</span><span class="p">):</span>
-</span><span id="L-5170"><a href="#L-5170"><span class="linenos">5170</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a>
-</span><span id="L-5173"><a href="#L-5173"><span class="linenos">5173</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</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">Parameter</span><span class="p">:</span>
-</span><span id="L-5174"><a href="#L-5174"><span class="linenos">5174</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</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-5175"><a href="#L-5175"><span class="linenos">5175</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</span></a> <span class="p">)</span>
-</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a>
-</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</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">L_BRACE</span><span class="p">)</span>
-</span><span id="L-5180"><a href="#L-5180"><span class="linenos">5180</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="L-5181"><a href="#L-5181"><span class="linenos">5181</span></a> <span class="n">expression</span> <span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</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">R_BRACE</span><span class="p">)</span>
-</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</span></a>
-</span><span id="L-5184"><a href="#L-5184"><span class="linenos">5184</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">Parameter</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><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</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">Identifier</span><span class="p">]:</span>
+</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</span></a>
+</span><span id="L-5134"><a href="#L-5134"><span class="linenos">5134</span></a> <span class="k">def</span> <span class="nf">_parse_number</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-5135"><a href="#L-5135"><span class="linenos">5135</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">NUMBER</span><span class="p">):</span>
+</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5137"><a href="#L-5137"><span class="linenos">5137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5138"><a href="#L-5138"><span class="linenos">5138</span></a>
+</span><span id="L-5139"><a href="#L-5139"><span class="linenos">5139</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</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-5140"><a href="#L-5140"><span class="linenos">5140</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">IDENTIFIER</span><span class="p">):</span>
+</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</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">Identifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</span></a>
+</span><span id="L-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-5149"><a href="#L-5149"><span class="linenos">5149</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-5150"><a href="#L-5150"><span class="linenos">5150</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
+</span><span id="L-5152"><a href="#L-5152"><span class="linenos">5152</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">VAR</span><span class="p">)</span>
+</span><span id="L-5153"><a href="#L-5153"><span class="linenos">5153</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-5154"><a href="#L-5154"><span class="linenos">5154</span></a> <span class="p">):</span>
+</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</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-5156"><a href="#L-5156"><span class="linenos">5156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</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-5157"><a href="#L-5157"><span class="linenos">5157</span></a> <span class="p">)</span>
+</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a>
+</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
+</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</span></a>
+</span><span id="L-5166"><a href="#L-5166"><span class="linenos">5166</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</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-5167"><a href="#L-5167"><span class="linenos">5167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</span></a>
+</span><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a> <span class="k">def</span> <span class="nf">_parse_null</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-5170"><a href="#L-5170"><span class="linenos">5170</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
+</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5173"><a href="#L-5173"><span class="linenos">5173</span></a>
+</span><span id="L-5174"><a href="#L-5174"><span class="linenos">5174</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</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-5175"><a href="#L-5175"><span class="linenos">5175</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">TRUE</span><span class="p">):</span>
+</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</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">FALSE</span><span class="p">):</span>
+</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5180"><a href="#L-5180"><span class="linenos">5180</span></a>
+</span><span id="L-5181"><a href="#L-5181"><span class="linenos">5181</span></a> <span class="k">def</span> <span class="nf">_parse_star</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-5182"><a href="#L-5182"><span class="linenos">5182</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">STAR</span><span class="p">):</span>
+</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5184"><a href="#L-5184"><span class="linenos">5184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-5185"><a href="#L-5185"><span class="linenos">5185</span></a>
-</span><span id="L-5186"><a href="#L-5186"><span class="linenos">5186</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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-5187"><a href="#L-5187"><span class="linenos">5187</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
-</span><span id="L-5188"><a href="#L-5188"><span class="linenos">5188</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
-</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a> <span class="k">return</span> <span class="n">placeholder</span>
-</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a>
-</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a> <span class="k">def</span> <span class="nf">_parse_except</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">t</span><span class="o">.</span><span class="n">List</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-5195"><a href="#L-5195"><span class="linenos">5195</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
-</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</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">L_PAREN</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-5198"><a href="#L-5198"><span class="linenos">5198</span></a> <span class="k">return</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_column</span><span class="p">)</span>
-</span><span id="L-5199"><a href="#L-5199"><span class="linenos">5199</span></a>
-</span><span id="L-5200"><a href="#L-5200"><span class="linenos">5200</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5202"><a href="#L-5202"><span class="linenos">5202</span></a>
-</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a> <span class="k">def</span> <span class="nf">_parse_replace</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">t</span><span class="o">.</span><span class="n">List</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-5204"><a href="#L-5204"><span class="linenos">5204</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
-</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5206"><a href="#L-5206"><span class="linenos">5206</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">L_PAREN</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-5207"><a href="#L-5207"><span class="linenos">5207</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
-</span><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</span></a>
-</span><span id="L-5209"><a href="#L-5209"><span class="linenos">5209</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
-</span><span id="L-5210"><a href="#L-5210"><span class="linenos">5210</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5211"><a href="#L-5211"><span class="linenos">5211</span></a>
-</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
-</span><span id="L-5213"><a href="#L-5213"><span class="linenos">5213</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
-</span><span id="L-5214"><a href="#L-5214"><span class="linenos">5214</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-5215"><a href="#L-5215"><span class="linenos">5215</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="L-5217"><a href="#L-5217"><span class="linenos">5217</span></a>
-</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
-</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="L-5220"><a href="#L-5220"><span class="linenos">5220</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-5221"><a href="#L-5221"><span class="linenos">5221</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5222"><a href="#L-5222"><span class="linenos">5222</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="L-5223"><a href="#L-5223"><span class="linenos">5223</span></a>
-</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</span></a> <span class="k">return</span> <span class="n">items</span>
-</span><span id="L-5225"><a href="#L-5225"><span class="linenos">5225</span></a>
-</span><span id="L-5226"><a href="#L-5226"><span class="linenos">5226</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
-</span><span id="L-5227"><a href="#L-5227"><span class="linenos">5227</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="L-5228"><a href="#L-5228"><span class="linenos">5228</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-5229"><a href="#L-5229"><span class="linenos">5229</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5186"><a href="#L-5186"><span class="linenos">5186</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</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">Parameter</span><span class="p">:</span>
+</span><span id="L-5187"><a href="#L-5187"><span class="linenos">5187</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</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-5188"><a href="#L-5188"><span class="linenos">5188</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a> <span class="p">)</span>
+</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a>
+</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</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">L_BRACE</span><span class="p">)</span>
+</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a> <span class="n">expression</span> <span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="L-5195"><a href="#L-5195"><span class="linenos">5195</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">R_BRACE</span><span class="p">)</span>
+</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a>
+</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</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">Parameter</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><span id="L-5198"><a href="#L-5198"><span class="linenos">5198</span></a>
+</span><span id="L-5199"><a href="#L-5199"><span class="linenos">5199</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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-5200"><a href="#L-5200"><span class="linenos">5200</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
+</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-5202"><a href="#L-5202"><span class="linenos">5202</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="L-5204"><a href="#L-5204"><span class="linenos">5204</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5206"><a href="#L-5206"><span class="linenos">5206</span></a>
+</span><span id="L-5207"><a href="#L-5207"><span class="linenos">5207</span></a> <span class="k">def</span> <span class="nf">_parse_except</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">t</span><span class="o">.</span><span class="n">List</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-5208"><a href="#L-5208"><span class="linenos">5208</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
+</span><span id="L-5209"><a href="#L-5209"><span class="linenos">5209</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5210"><a href="#L-5210"><span class="linenos">5210</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">L_PAREN</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-5211"><a href="#L-5211"><span class="linenos">5211</span></a> <span class="k">return</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_column</span><span class="p">)</span>
+</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</span></a>
+</span><span id="L-5213"><a href="#L-5213"><span class="linenos">5213</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5214"><a href="#L-5214"><span class="linenos">5214</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5215"><a href="#L-5215"><span class="linenos">5215</span></a>
+</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a> <span class="k">def</span> <span class="nf">_parse_replace</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">t</span><span class="o">.</span><span class="n">List</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-5217"><a href="#L-5217"><span class="linenos">5217</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
+</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</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">L_PAREN</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-5220"><a href="#L-5220"><span class="linenos">5220</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
+</span><span id="L-5221"><a href="#L-5221"><span class="linenos">5221</span></a>
+</span><span id="L-5222"><a href="#L-5222"><span class="linenos">5222</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
+</span><span id="L-5223"><a href="#L-5223"><span class="linenos">5223</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</span></a>
+</span><span id="L-5225"><a href="#L-5225"><span class="linenos">5225</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="L-5226"><a href="#L-5226"><span class="linenos">5226</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
+</span><span id="L-5227"><a href="#L-5227"><span class="linenos">5227</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-5228"><a href="#L-5228"><span class="linenos">5228</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5229"><a href="#L-5229"><span class="linenos">5229</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="L-5230"><a href="#L-5230"><span class="linenos">5230</span></a>
-</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</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><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="L-5234"><a href="#L-5234"><span class="linenos">5234</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5235"><a href="#L-5235"><span class="linenos">5235</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="L-5236"><a href="#L-5236"><span class="linenos">5236</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="L-5237"><a href="#L-5237"><span class="linenos">5237</span></a> <span class="p">)</span>
+</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
+</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5234"><a href="#L-5234"><span class="linenos">5234</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5235"><a href="#L-5235"><span class="linenos">5235</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="L-5236"><a href="#L-5236"><span class="linenos">5236</span></a>
+</span><span id="L-5237"><a href="#L-5237"><span class="linenos">5237</span></a> <span class="k">return</span> <span class="n">items</span>
</span><span id="L-5238"><a href="#L-5238"><span class="linenos">5238</span></a>
-</span><span id="L-5239"><a href="#L-5239"><span class="linenos">5239</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5240"><a href="#L-5240"><span class="linenos">5240</span></a>
-</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</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-5242"><a href="#L-5242"><span class="linenos">5242</span></a> <span class="k">return</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_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="L-5239"><a href="#L-5239"><span class="linenos">5239</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
+</span><span id="L-5240"><a href="#L-5240"><span class="linenos">5240</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</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-5242"><a href="#L-5242"><span class="linenos">5242</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-5243"><a href="#L-5243"><span class="linenos">5243</span></a>
-</span><span id="L-5244"><a href="#L-5244"><span class="linenos">5244</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="L-5245"><a href="#L-5245"><span class="linenos">5245</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-5247"><a href="#L-5247"><span class="linenos">5247</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
-</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
-</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a> <span class="p">)</span>
-</span><span id="L-5250"><a href="#L-5250"><span class="linenos">5250</span></a>
-</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
-</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a> <span class="n">wrapped</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
-</span><span id="L-5253"><a href="#L-5253"><span class="linenos">5253</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
-</span><span id="L-5254"><a href="#L-5254"><span class="linenos">5254</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;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="L-5255"><a href="#L-5255"><span class="linenos">5255</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
-</span><span id="L-5257"><a href="#L-5257"><span class="linenos">5257</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</span></a> <span class="k">return</span> <span class="n">parse_result</span>
-</span><span id="L-5259"><a href="#L-5259"><span class="linenos">5259</span></a>
-</span><span id="L-5260"><a href="#L-5260"><span class="linenos">5260</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</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">List</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-5261"><a href="#L-5261"><span class="linenos">5261</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
-</span><span id="L-5262"><a href="#L-5262"><span class="linenos">5262</span></a>
-</span><span id="L-5263"><a href="#L-5263"><span class="linenos">5263</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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-5264"><a href="#L-5264"><span class="linenos">5264</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="L-5265"><a href="#L-5265"><span class="linenos">5265</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-5266"><a href="#L-5266"><span class="linenos">5266</span></a> <span class="p">)</span>
-</span><span id="L-5267"><a href="#L-5267"><span class="linenos">5267</span></a>
-</span><span id="L-5268"><a href="#L-5268"><span class="linenos">5268</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</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-5269"><a href="#L-5269"><span class="linenos">5269</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a> <span class="p">)</span>
+</span><span id="L-5244"><a href="#L-5244"><span class="linenos">5244</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-5245"><a href="#L-5245"><span class="linenos">5245</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><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="L-5247"><a href="#L-5247"><span class="linenos">5247</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="L-5250"><a href="#L-5250"><span class="linenos">5250</span></a> <span class="p">)</span>
+</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a>
+</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5253"><a href="#L-5253"><span class="linenos">5253</span></a>
+</span><span id="L-5254"><a href="#L-5254"><span class="linenos">5254</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</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-5255"><a href="#L-5255"><span class="linenos">5255</span></a> <span class="k">return</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_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</span></a>
+</span><span id="L-5257"><a href="#L-5257"><span class="linenos">5257</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-5259"><a href="#L-5259"><span class="linenos">5259</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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-5260"><a href="#L-5260"><span class="linenos">5260</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
+</span><span id="L-5261"><a href="#L-5261"><span class="linenos">5261</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
+</span><span id="L-5262"><a href="#L-5262"><span class="linenos">5262</span></a> <span class="p">)</span>
+</span><span id="L-5263"><a href="#L-5263"><span class="linenos">5263</span></a>
+</span><span id="L-5264"><a href="#L-5264"><span class="linenos">5264</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
+</span><span id="L-5265"><a href="#L-5265"><span class="linenos">5265</span></a> <span class="n">wrapped</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
+</span><span id="L-5266"><a href="#L-5266"><span class="linenos">5266</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
+</span><span id="L-5267"><a href="#L-5267"><span class="linenos">5267</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;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="L-5268"><a href="#L-5268"><span class="linenos">5268</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5269"><a href="#L-5269"><span class="linenos">5269</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
+</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="L-5272"><a href="#L-5272"><span class="linenos">5272</span></a>
-</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</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">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5274"><a href="#L-5274"><span class="linenos">5274</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
-</span><span id="L-5276"><a href="#L-5276"><span class="linenos">5276</span></a> <span class="n">this</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-5277"><a href="#L-5277"><span class="linenos">5277</span></a>
-</span><span id="L-5278"><a href="#L-5278"><span class="linenos">5278</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="L-5279"><a href="#L-5279"><span class="linenos">5279</span></a>
-</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5281"><a href="#L-5281"><span class="linenos">5281</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-5282"><a href="#L-5282"><span class="linenos">5282</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5283"><a href="#L-5283"><span class="linenos">5283</span></a> <span class="k">while</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">VAR</span><span class="p">):</span>
-</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</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">List</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-5274"><a href="#L-5274"><span class="linenos">5274</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
+</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a>
+</span><span id="L-5276"><a href="#L-5276"><span class="linenos">5276</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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-5277"><a href="#L-5277"><span class="linenos">5277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="L-5278"><a href="#L-5278"><span class="linenos">5278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-5279"><a href="#L-5279"><span class="linenos">5279</span></a> <span class="p">)</span>
+</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a>
+</span><span id="L-5281"><a href="#L-5281"><span class="linenos">5281</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</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-5282"><a href="#L-5282"><span class="linenos">5282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="L-5283"><a href="#L-5283"><span class="linenos">5283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</span></a> <span class="p">)</span>
</span><span id="L-5285"><a href="#L-5285"><span class="linenos">5285</span></a>
-</span><span id="L-5286"><a href="#L-5286"><span class="linenos">5286</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="L-5287"><a href="#L-5287"><span class="linenos">5287</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
-</span><span id="L-5288"><a href="#L-5288"><span class="linenos">5288</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</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-5289"><a href="#L-5289"><span class="linenos">5289</span></a> <span class="k">break</span>
+</span><span id="L-5286"><a href="#L-5286"><span class="linenos">5286</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</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">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5287"><a href="#L-5287"><span class="linenos">5287</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5288"><a href="#L-5288"><span class="linenos">5288</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
+</span><span id="L-5289"><a href="#L-5289"><span class="linenos">5289</span></a> <span class="n">this</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-5290"><a href="#L-5290"><span class="linenos">5290</span></a>
-</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</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">Transaction</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">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="L-5292"><a href="#L-5292"><span class="linenos">5292</span></a>
-</span><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</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">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5295"><a href="#L-5295"><span class="linenos">5295</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5296"><a href="#L-5296"><span class="linenos">5296</span></a> <span class="n">is_rollback</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
-</span><span id="L-5297"><a href="#L-5297"><span class="linenos">5297</span></a>
-</span><span id="L-5298"><a href="#L-5298"><span class="linenos">5298</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="L-5299"><a href="#L-5299"><span class="linenos">5299</span></a>
-</span><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</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;TO&quot;</span><span class="p">):</span>
-</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
-</span><span id="L-5302"><a href="#L-5302"><span class="linenos">5302</span></a> <span class="n">savepoint</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><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-5295"><a href="#L-5295"><span class="linenos">5295</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5296"><a href="#L-5296"><span class="linenos">5296</span></a> <span class="k">while</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">VAR</span><span class="p">):</span>
+</span><span id="L-5297"><a href="#L-5297"><span class="linenos">5297</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5298"><a href="#L-5298"><span class="linenos">5298</span></a>
+</span><span id="L-5299"><a href="#L-5299"><span class="linenos">5299</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
+</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</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</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-5302"><a href="#L-5302"><span class="linenos">5302</span></a> <span class="k">break</span>
</span><span id="L-5303"><a href="#L-5303"><span class="linenos">5303</span></a>
-</span><span id="L-5304"><a href="#L-5304"><span class="linenos">5304</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">AND</span><span class="p">):</span>
-</span><span id="L-5305"><a href="#L-5305"><span class="linenos">5305</span></a> <span class="n">chain</span> <span class="o">=</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;NO&quot;</span><span class="p">)</span>
-</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
-</span><span id="L-5307"><a href="#L-5307"><span class="linenos">5307</span></a>
-</span><span id="L-5308"><a href="#L-5308"><span class="linenos">5308</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</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">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="L-5304"><a href="#L-5304"><span class="linenos">5304</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">Transaction</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">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="L-5305"><a href="#L-5305"><span class="linenos">5305</span></a>
+</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</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">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="L-5307"><a href="#L-5307"><span class="linenos">5307</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5308"><a href="#L-5308"><span class="linenos">5308</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</span></a> <span class="n">is_rollback</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
</span><span id="L-5310"><a href="#L-5310"><span class="linenos">5310</span></a>
-</span><span id="L-5311"><a href="#L-5311"><span class="linenos">5311</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">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="L-5311"><a href="#L-5311"><span class="linenos">5311</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="L-5312"><a href="#L-5312"><span class="linenos">5312</span></a>
-</span><span id="L-5313"><a href="#L-5313"><span class="linenos">5313</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</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">Refresh</span><span class="p">:</span>
-</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</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">TABLE</span><span class="p">)</span>
-</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</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">Refresh</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_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="L-5313"><a href="#L-5313"><span class="linenos">5313</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;TO&quot;</span><span class="p">):</span>
+</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
+</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</span></a> <span class="n">savepoint</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><span id="L-5316"><a href="#L-5316"><span class="linenos">5316</span></a>
-</span><span id="L-5317"><a href="#L-5317"><span class="linenos">5317</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</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;ADD&quot;</span><span class="p">):</span>
-</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5317"><a href="#L-5317"><span class="linenos">5317</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">AND</span><span class="p">):</span>
+</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</span></a> <span class="n">chain</span> <span class="o">=</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;NO&quot;</span><span class="p">)</span>
+</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
</span><span id="L-5320"><a href="#L-5320"><span class="linenos">5320</span></a>
-</span><span id="L-5321"><a href="#L-5321"><span class="linenos">5321</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">COLUMN</span><span class="p">)</span>
-</span><span id="L-5322"><a href="#L-5322"><span class="linenos">5322</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5323"><a href="#L-5323"><span class="linenos">5323</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
-</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</span></a>
-</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
-</span><span id="L-5327"><a href="#L-5327"><span class="linenos">5327</span></a>
-</span><span id="L-5328"><a href="#L-5328"><span class="linenos">5328</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
-</span><span id="L-5330"><a href="#L-5330"><span class="linenos">5330</span></a> <span class="n">position</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-5331"><a href="#L-5331"><span class="linenos">5331</span></a> <span class="n">column_position</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-5332"><a href="#L-5332"><span class="linenos">5332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</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_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
-</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a> <span class="p">)</span>
-</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
-</span><span id="L-5335"><a href="#L-5335"><span class="linenos">5335</span></a>
-</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-5321"><a href="#L-5321"><span class="linenos">5321</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
+</span><span id="L-5322"><a href="#L-5322"><span class="linenos">5322</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">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="L-5323"><a href="#L-5323"><span class="linenos">5323</span></a>
+</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</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">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a>
+</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</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">Refresh</span><span class="p">:</span>
+</span><span id="L-5327"><a href="#L-5327"><span class="linenos">5327</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">TABLE</span><span class="p">)</span>
+</span><span id="L-5328"><a href="#L-5328"><span class="linenos">5328</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">Refresh</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_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a>
+</span><span id="L-5330"><a href="#L-5330"><span class="linenos">5330</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5331"><a href="#L-5331"><span class="linenos">5331</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;ADD&quot;</span><span class="p">):</span>
+</span><span id="L-5332"><a href="#L-5332"><span class="linenos">5332</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a>
+</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</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">COLUMN</span><span class="p">)</span>
+</span><span id="L-5335"><a href="#L-5335"><span class="linenos">5335</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
</span><span id="L-5337"><a href="#L-5337"><span class="linenos">5337</span></a>
-</span><span id="L-5338"><a href="#L-5338"><span class="linenos">5338</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a> <span class="n">drop</span> <span class="o">=</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">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
-</span><span id="L-5340"><a href="#L-5340"><span class="linenos">5340</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
-</span><span id="L-5341"><a href="#L-5341"><span class="linenos">5341</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
-</span><span id="L-5342"><a href="#L-5342"><span class="linenos">5342</span></a> <span class="k">return</span> <span class="n">drop</span>
-</span><span id="L-5343"><a href="#L-5343"><span class="linenos">5343</span></a>
-</span><span id="L-5344"><a href="#L-5344"><span class="linenos">5344</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="L-5345"><a href="#L-5345"><span class="linenos">5345</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
-</span><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</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-5347"><a href="#L-5347"><span class="linenos">5347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <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_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
-</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a> <span class="p">)</span>
-</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a>
-</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</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">AddConstraint</span><span class="p">:</span>
-</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5352"><a href="#L-5352"><span class="linenos">5352</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">token_type</span>
-</span><span id="L-5353"><a href="#L-5353"><span class="linenos">5353</span></a>
-</span><span id="L-5354"><a href="#L-5354"><span class="linenos">5354</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
-</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a> <span class="n">this</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><span id="L-5338"><a href="#L-5338"><span class="linenos">5338</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
+</span><span id="L-5340"><a href="#L-5340"><span class="linenos">5340</span></a>
+</span><span id="L-5341"><a href="#L-5341"><span class="linenos">5341</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="L-5342"><a href="#L-5342"><span class="linenos">5342</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
+</span><span id="L-5343"><a href="#L-5343"><span class="linenos">5343</span></a> <span class="n">position</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-5344"><a href="#L-5344"><span class="linenos">5344</span></a> <span class="n">column_position</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-5345"><a href="#L-5345"><span class="linenos">5345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</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_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
+</span><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</span></a> <span class="p">)</span>
+</span><span id="L-5347"><a href="#L-5347"><span class="linenos">5347</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
+</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a>
+</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a>
+</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="L-5352"><a href="#L-5352"><span class="linenos">5352</span></a> <span class="n">drop</span> <span class="o">=</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">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
+</span><span id="L-5353"><a href="#L-5353"><span class="linenos">5353</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
+</span><span id="L-5354"><a href="#L-5354"><span class="linenos">5354</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
+</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="L-5356"><a href="#L-5356"><span class="linenos">5356</span></a>
-</span><span id="L-5357"><a href="#L-5357"><span class="linenos">5357</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;CHECK&quot;</span><span class="p">):</span>
-</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="L-5359"><a href="#L-5359"><span class="linenos">5359</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="L-5360"><a href="#L-5360"><span class="linenos">5360</span></a>
-</span><span id="L-5361"><a href="#L-5361"><span class="linenos">5361</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-5362"><a href="#L-5362"><span class="linenos">5362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</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">enforced</span><span class="o">=</span><span class="n">enforced</span>
-</span><span id="L-5363"><a href="#L-5363"><span class="linenos">5363</span></a> <span class="p">)</span>
-</span><span id="L-5364"><a href="#L-5364"><span class="linenos">5364</span></a>
-</span><span id="L-5365"><a href="#L-5365"><span class="linenos">5365</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <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">FOREIGN_KEY</span><span class="p">):</span>
-</span><span id="L-5366"><a href="#L-5366"><span class="linenos">5366</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
-</span><span id="L-5367"><a href="#L-5367"><span class="linenos">5367</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <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">PRIMARY_KEY</span><span class="p">):</span>
-</span><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
-</span><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5370"><a href="#L-5370"><span class="linenos">5370</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5371"><a href="#L-5371"><span class="linenos">5371</span></a>
-</span><span id="L-5372"><a href="#L-5372"><span class="linenos">5372</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">AddConstraint</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><span id="L-5357"><a href="#L-5357"><span class="linenos">5357</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
+</span><span id="L-5359"><a href="#L-5359"><span class="linenos">5359</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-5360"><a href="#L-5360"><span class="linenos">5360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <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_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
+</span><span id="L-5361"><a href="#L-5361"><span class="linenos">5361</span></a> <span class="p">)</span>
+</span><span id="L-5362"><a href="#L-5362"><span class="linenos">5362</span></a>
+</span><span id="L-5363"><a href="#L-5363"><span class="linenos">5363</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</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">AddConstraint</span><span class="p">:</span>
+</span><span id="L-5364"><a href="#L-5364"><span class="linenos">5364</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5365"><a href="#L-5365"><span class="linenos">5365</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">token_type</span>
+</span><span id="L-5366"><a href="#L-5366"><span class="linenos">5366</span></a>
+</span><span id="L-5367"><a href="#L-5367"><span class="linenos">5367</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
+</span><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a> <span class="n">this</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><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a>
+</span><span id="L-5370"><a href="#L-5370"><span class="linenos">5370</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;CHECK&quot;</span><span class="p">):</span>
+</span><span id="L-5371"><a href="#L-5371"><span class="linenos">5371</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-5372"><a href="#L-5372"><span class="linenos">5372</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
</span><span id="L-5373"><a href="#L-5373"><span class="linenos">5373</span></a>
-</span><span id="L-5374"><a href="#L-5374"><span class="linenos">5374</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</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">List</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-5375"><a href="#L-5375"><span class="linenos">5375</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-5376"><a href="#L-5376"><span class="linenos">5376</span></a>
-</span><span id="L-5377"><a href="#L-5377"><span class="linenos">5377</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
-</span><span id="L-5378"><a href="#L-5378"><span class="linenos">5378</span></a> <span class="k">return</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_add_constraint</span><span class="p">)</span>
-</span><span id="L-5379"><a href="#L-5379"><span class="linenos">5379</span></a>
-</span><span id="L-5380"><a href="#L-5380"><span class="linenos">5380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5381"><a href="#L-5381"><span class="linenos">5381</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</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;ADD&quot;</span><span class="p">):</span>
-</span><span id="L-5382"><a href="#L-5382"><span class="linenos">5382</span></a> <span class="k">return</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_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5383"><a href="#L-5383"><span class="linenos">5383</span></a> <span class="k">return</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_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5374"><a href="#L-5374"><span class="linenos">5374</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-5375"><a href="#L-5375"><span class="linenos">5375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</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">enforced</span><span class="o">=</span><span class="n">enforced</span>
+</span><span id="L-5376"><a href="#L-5376"><span class="linenos">5376</span></a> <span class="p">)</span>
+</span><span id="L-5377"><a href="#L-5377"><span class="linenos">5377</span></a>
+</span><span id="L-5378"><a href="#L-5378"><span class="linenos">5378</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <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">FOREIGN_KEY</span><span class="p">):</span>
+</span><span id="L-5379"><a href="#L-5379"><span class="linenos">5379</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
+</span><span id="L-5380"><a href="#L-5380"><span class="linenos">5380</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <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">PRIMARY_KEY</span><span class="p">):</span>
+</span><span id="L-5381"><a href="#L-5381"><span class="linenos">5381</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
+</span><span id="L-5382"><a href="#L-5382"><span class="linenos">5382</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5383"><a href="#L-5383"><span class="linenos">5383</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5384"><a href="#L-5384"><span class="linenos">5384</span></a>
-</span><span id="L-5385"><a href="#L-5385"><span class="linenos">5385</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</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">AlterColumn</span><span class="p">:</span>
-</span><span id="L-5386"><a href="#L-5386"><span class="linenos">5386</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">COLUMN</span><span class="p">)</span>
-</span><span id="L-5387"><a href="#L-5387"><span class="linenos">5387</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5388"><a href="#L-5388"><span class="linenos">5388</span></a>
-</span><span id="L-5389"><a href="#L-5389"><span class="linenos">5389</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="L-5390"><a href="#L-5390"><span class="linenos">5390</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5391"><a href="#L-5391"><span class="linenos">5391</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="L-5392"><a href="#L-5392"><span class="linenos">5392</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</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-5393"><a href="#L-5393"><span class="linenos">5393</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">COMMENT</span><span class="p">):</span>
-</span><span id="L-5394"><a href="#L-5394"><span class="linenos">5394</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-5395"><a href="#L-5395"><span class="linenos">5395</span></a>
-</span><span id="L-5396"><a href="#L-5396"><span class="linenos">5396</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
-</span><span id="L-5397"><a href="#L-5397"><span class="linenos">5397</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-5398"><a href="#L-5398"><span class="linenos">5398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="L-5399"><a href="#L-5399"><span class="linenos">5399</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="L-5400"><a href="#L-5400"><span class="linenos">5400</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
-</span><span id="L-5401"><a href="#L-5401"><span class="linenos">5401</span></a> <span class="n">collate</span><span class="o">=</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">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="L-5402"><a href="#L-5402"><span class="linenos">5402</span></a> <span class="n">using</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="L-5403"><a href="#L-5403"><span class="linenos">5403</span></a> <span class="p">)</span>
-</span><span id="L-5404"><a href="#L-5404"><span class="linenos">5404</span></a>
-</span><span id="L-5405"><a href="#L-5405"><span class="linenos">5405</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</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">List</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-5406"><a href="#L-5406"><span class="linenos">5406</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-5407"><a href="#L-5407"><span class="linenos">5407</span></a>
-</span><span id="L-5408"><a href="#L-5408"><span class="linenos">5408</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="L-5409"><a href="#L-5409"><span class="linenos">5409</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">PARTITION</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-5410"><a href="#L-5410"><span class="linenos">5410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
-</span><span id="L-5411"><a href="#L-5411"><span class="linenos">5411</span></a>
-</span><span id="L-5412"><a href="#L-5412"><span class="linenos">5412</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5413"><a href="#L-5413"><span class="linenos">5413</span></a> <span class="k">return</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_drop_column</span><span class="p">)</span>
-</span><span id="L-5414"><a href="#L-5414"><span class="linenos">5414</span></a>
-</span><span id="L-5415"><a href="#L-5415"><span class="linenos">5415</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</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">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
-</span><span id="L-5416"><a href="#L-5416"><span class="linenos">5416</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">COLUMN</span><span class="p">):</span>
-</span><span id="L-5417"><a href="#L-5417"><span class="linenos">5417</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="L-5418"><a href="#L-5418"><span class="linenos">5418</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5419"><a href="#L-5419"><span class="linenos">5419</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="L-5420"><a href="#L-5420"><span class="linenos">5420</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5421"><a href="#L-5421"><span class="linenos">5421</span></a>
-</span><span id="L-5422"><a href="#L-5422"><span class="linenos">5422</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5423"><a href="#L-5423"><span class="linenos">5423</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5385"><a href="#L-5385"><span class="linenos">5385</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">AddConstraint</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><span id="L-5386"><a href="#L-5386"><span class="linenos">5386</span></a>
+</span><span id="L-5387"><a href="#L-5387"><span class="linenos">5387</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</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">List</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-5388"><a href="#L-5388"><span class="linenos">5388</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-5389"><a href="#L-5389"><span class="linenos">5389</span></a>
+</span><span id="L-5390"><a href="#L-5390"><span class="linenos">5390</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
+</span><span id="L-5391"><a href="#L-5391"><span class="linenos">5391</span></a> <span class="k">return</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_add_constraint</span><span class="p">)</span>
+</span><span id="L-5392"><a href="#L-5392"><span class="linenos">5392</span></a>
+</span><span id="L-5393"><a href="#L-5393"><span class="linenos">5393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5394"><a href="#L-5394"><span class="linenos">5394</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</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;ADD&quot;</span><span class="p">):</span>
+</span><span id="L-5395"><a href="#L-5395"><span class="linenos">5395</span></a> <span class="k">return</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_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5396"><a href="#L-5396"><span class="linenos">5396</span></a> <span class="k">return</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_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5397"><a href="#L-5397"><span class="linenos">5397</span></a>
+</span><span id="L-5398"><a href="#L-5398"><span class="linenos">5398</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</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">AlterColumn</span><span class="p">:</span>
+</span><span id="L-5399"><a href="#L-5399"><span class="linenos">5399</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">COLUMN</span><span class="p">)</span>
+</span><span id="L-5400"><a href="#L-5400"><span class="linenos">5400</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5401"><a href="#L-5401"><span class="linenos">5401</span></a>
+</span><span id="L-5402"><a href="#L-5402"><span class="linenos">5402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="L-5403"><a href="#L-5403"><span class="linenos">5403</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5404"><a href="#L-5404"><span class="linenos">5404</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="L-5405"><a href="#L-5405"><span class="linenos">5405</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</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-5406"><a href="#L-5406"><span class="linenos">5406</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">COMMENT</span><span class="p">):</span>
+</span><span id="L-5407"><a href="#L-5407"><span class="linenos">5407</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-5408"><a href="#L-5408"><span class="linenos">5408</span></a>
+</span><span id="L-5409"><a href="#L-5409"><span class="linenos">5409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
+</span><span id="L-5410"><a href="#L-5410"><span class="linenos">5410</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-5411"><a href="#L-5411"><span class="linenos">5411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="L-5412"><a href="#L-5412"><span class="linenos">5412</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
+</span><span id="L-5413"><a href="#L-5413"><span class="linenos">5413</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
+</span><span id="L-5414"><a href="#L-5414"><span class="linenos">5414</span></a> <span class="n">collate</span><span class="o">=</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">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="L-5415"><a href="#L-5415"><span class="linenos">5415</span></a> <span class="n">using</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-5416"><a href="#L-5416"><span class="linenos">5416</span></a> <span class="p">)</span>
+</span><span id="L-5417"><a href="#L-5417"><span class="linenos">5417</span></a>
+</span><span id="L-5418"><a href="#L-5418"><span class="linenos">5418</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</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">List</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-5419"><a href="#L-5419"><span class="linenos">5419</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-5420"><a href="#L-5420"><span class="linenos">5420</span></a>
+</span><span id="L-5421"><a href="#L-5421"><span class="linenos">5421</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="L-5422"><a href="#L-5422"><span class="linenos">5422</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">PARTITION</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-5423"><a href="#L-5423"><span class="linenos">5423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
</span><span id="L-5424"><a href="#L-5424"><span class="linenos">5424</span></a>
-</span><span id="L-5425"><a href="#L-5425"><span class="linenos">5425</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">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
-</span><span id="L-5426"><a href="#L-5426"><span class="linenos">5426</span></a>
-</span><span id="L-5427"><a href="#L-5427"><span class="linenos">5427</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="L-5428"><a href="#L-5428"><span class="linenos">5428</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">RenameTable</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-5429"><a href="#L-5429"><span class="linenos">5429</span></a>
-</span><span id="L-5430"><a href="#L-5430"><span class="linenos">5430</span></a> <span class="k">def</span> <span class="nf">_parse_alter</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">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5431"><a href="#L-5431"><span class="linenos">5431</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-5432"><a href="#L-5432"><span class="linenos">5432</span></a>
-</span><span id="L-5433"><a href="#L-5433"><span class="linenos">5433</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
-</span><span id="L-5434"><a href="#L-5434"><span class="linenos">5434</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="L-5435"><a href="#L-5435"><span class="linenos">5435</span></a>
-</span><span id="L-5436"><a href="#L-5436"><span class="linenos">5436</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="L-5437"><a href="#L-5437"><span class="linenos">5437</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="L-5438"><a href="#L-5438"><span class="linenos">5438</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5425"><a href="#L-5425"><span class="linenos">5425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5426"><a href="#L-5426"><span class="linenos">5426</span></a> <span class="k">return</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_drop_column</span><span class="p">)</span>
+</span><span id="L-5427"><a href="#L-5427"><span class="linenos">5427</span></a>
+</span><span id="L-5428"><a href="#L-5428"><span class="linenos">5428</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</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">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
+</span><span id="L-5429"><a href="#L-5429"><span class="linenos">5429</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">COLUMN</span><span class="p">):</span>
+</span><span id="L-5430"><a href="#L-5430"><span class="linenos">5430</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="L-5431"><a href="#L-5431"><span class="linenos">5431</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5432"><a href="#L-5432"><span class="linenos">5432</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="L-5433"><a href="#L-5433"><span class="linenos">5433</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5434"><a href="#L-5434"><span class="linenos">5434</span></a>
+</span><span id="L-5435"><a href="#L-5435"><span class="linenos">5435</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5436"><a href="#L-5436"><span class="linenos">5436</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5437"><a href="#L-5437"><span class="linenos">5437</span></a>
+</span><span id="L-5438"><a href="#L-5438"><span class="linenos">5438</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">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
</span><span id="L-5439"><a href="#L-5439"><span class="linenos">5439</span></a>
-</span><span id="L-5440"><a href="#L-5440"><span class="linenos">5440</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="L-5441"><a href="#L-5441"><span class="linenos">5441</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5440"><a href="#L-5440"><span class="linenos">5440</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="L-5441"><a href="#L-5441"><span class="linenos">5441</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">RenameTable</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-5442"><a href="#L-5442"><span class="linenos">5442</span></a>
-</span><span id="L-5443"><a href="#L-5443"><span class="linenos">5443</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</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 class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5444"><a href="#L-5444"><span class="linenos">5444</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-5445"><a href="#L-5445"><span class="linenos">5445</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
-</span><span id="L-5446"><a href="#L-5446"><span class="linenos">5446</span></a>
-</span><span id="L-5447"><a href="#L-5447"><span class="linenos">5447</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
-</span><span id="L-5448"><a href="#L-5448"><span class="linenos">5448</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-5449"><a href="#L-5449"><span class="linenos">5449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="L-5450"><a href="#L-5450"><span class="linenos">5450</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5451"><a href="#L-5451"><span class="linenos">5451</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="L-5452"><a href="#L-5452"><span class="linenos">5452</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="L-5453"><a href="#L-5453"><span class="linenos">5453</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
-</span><span id="L-5454"><a href="#L-5454"><span class="linenos">5454</span></a> <span class="p">)</span>
+</span><span id="L-5443"><a href="#L-5443"><span class="linenos">5443</span></a> <span class="k">def</span> <span class="nf">_parse_alter</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">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5444"><a href="#L-5444"><span class="linenos">5444</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-5445"><a href="#L-5445"><span class="linenos">5445</span></a>
+</span><span id="L-5446"><a href="#L-5446"><span class="linenos">5446</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
+</span><span id="L-5447"><a href="#L-5447"><span class="linenos">5447</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
+</span><span id="L-5448"><a href="#L-5448"><span class="linenos">5448</span></a>
+</span><span id="L-5449"><a href="#L-5449"><span class="linenos">5449</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="L-5450"><a href="#L-5450"><span class="linenos">5450</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="L-5451"><a href="#L-5451"><span class="linenos">5451</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5452"><a href="#L-5452"><span class="linenos">5452</span></a>
+</span><span id="L-5453"><a href="#L-5453"><span class="linenos">5453</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="L-5454"><a href="#L-5454"><span class="linenos">5454</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-5455"><a href="#L-5455"><span class="linenos">5455</span></a>
-</span><span id="L-5456"><a href="#L-5456"><span class="linenos">5456</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="L-5457"><a href="#L-5457"><span class="linenos">5457</span></a>
-</span><span id="L-5458"><a href="#L-5458"><span class="linenos">5458</span></a> <span class="k">def</span> <span class="nf">_parse_merge</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">Merge</span><span class="p">:</span>
-</span><span id="L-5459"><a href="#L-5459"><span class="linenos">5459</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">INTO</span><span class="p">)</span>
-</span><span id="L-5460"><a href="#L-5460"><span class="linenos">5460</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-5461"><a href="#L-5461"><span class="linenos">5461</span></a>
-</span><span id="L-5462"><a href="#L-5462"><span class="linenos">5462</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</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-5463"><a href="#L-5463"><span class="linenos">5463</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="L-5464"><a href="#L-5464"><span class="linenos">5464</span></a>
-</span><span id="L-5465"><a href="#L-5465"><span class="linenos">5465</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">USING</span><span class="p">)</span>
-</span><span id="L-5466"><a href="#L-5466"><span class="linenos">5466</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-5467"><a href="#L-5467"><span class="linenos">5467</span></a>
-</span><span id="L-5468"><a href="#L-5468"><span class="linenos">5468</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">ON</span><span class="p">)</span>
-</span><span id="L-5469"><a href="#L-5469"><span class="linenos">5469</span></a> <span class="n">on</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-5456"><a href="#L-5456"><span class="linenos">5456</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</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 class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5457"><a href="#L-5457"><span class="linenos">5457</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-5458"><a href="#L-5458"><span class="linenos">5458</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="L-5459"><a href="#L-5459"><span class="linenos">5459</span></a>
+</span><span id="L-5460"><a href="#L-5460"><span class="linenos">5460</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
+</span><span id="L-5461"><a href="#L-5461"><span class="linenos">5461</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-5462"><a href="#L-5462"><span class="linenos">5462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="L-5463"><a href="#L-5463"><span class="linenos">5463</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5464"><a href="#L-5464"><span class="linenos">5464</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="L-5465"><a href="#L-5465"><span class="linenos">5465</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="L-5466"><a href="#L-5466"><span class="linenos">5466</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
+</span><span id="L-5467"><a href="#L-5467"><span class="linenos">5467</span></a> <span class="p">)</span>
+</span><span id="L-5468"><a href="#L-5468"><span class="linenos">5468</span></a>
+</span><span id="L-5469"><a href="#L-5469"><span class="linenos">5469</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-5470"><a href="#L-5470"><span class="linenos">5470</span></a>
-</span><span id="L-5471"><a href="#L-5471"><span class="linenos">5471</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-5472"><a href="#L-5472"><span class="linenos">5472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="L-5473"><a href="#L-5473"><span class="linenos">5473</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="L-5474"><a href="#L-5474"><span class="linenos">5474</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="L-5475"><a href="#L-5475"><span class="linenos">5475</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="L-5476"><a href="#L-5476"><span class="linenos">5476</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
-</span><span id="L-5477"><a href="#L-5477"><span class="linenos">5477</span></a> <span class="p">)</span>
-</span><span id="L-5478"><a href="#L-5478"><span class="linenos">5478</span></a>
-</span><span id="L-5479"><a href="#L-5479"><span class="linenos">5479</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
-</span><span id="L-5480"><a href="#L-5480"><span class="linenos">5480</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5481"><a href="#L-5481"><span class="linenos">5481</span></a>
-</span><span id="L-5482"><a href="#L-5482"><span class="linenos">5482</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
-</span><span id="L-5483"><a href="#L-5483"><span class="linenos">5483</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</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">NOT</span><span class="p">)</span>
-</span><span id="L-5484"><a href="#L-5484"><span class="linenos">5484</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
-</span><span id="L-5485"><a href="#L-5485"><span class="linenos">5485</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-5486"><a href="#L-5486"><span class="linenos">5486</span></a> <span class="kc">False</span>
-</span><span id="L-5487"><a href="#L-5487"><span class="linenos">5487</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
-</span><span id="L-5488"><a href="#L-5488"><span class="linenos">5488</span></a> <span class="k">else</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
-</span><span id="L-5489"><a href="#L-5489"><span class="linenos">5489</span></a> <span class="p">)</span>
-</span><span id="L-5490"><a href="#L-5490"><span class="linenos">5490</span></a> <span class="n">condition</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 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">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5471"><a href="#L-5471"><span class="linenos">5471</span></a> <span class="k">def</span> <span class="nf">_parse_merge</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">Merge</span><span class="p">:</span>
+</span><span id="L-5472"><a href="#L-5472"><span class="linenos">5472</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">INTO</span><span class="p">)</span>
+</span><span id="L-5473"><a href="#L-5473"><span class="linenos">5473</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-5474"><a href="#L-5474"><span class="linenos">5474</span></a>
+</span><span id="L-5475"><a href="#L-5475"><span class="linenos">5475</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</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-5476"><a href="#L-5476"><span class="linenos">5476</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-5477"><a href="#L-5477"><span class="linenos">5477</span></a>
+</span><span id="L-5478"><a href="#L-5478"><span class="linenos">5478</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">USING</span><span class="p">)</span>
+</span><span id="L-5479"><a href="#L-5479"><span class="linenos">5479</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-5480"><a href="#L-5480"><span class="linenos">5480</span></a>
+</span><span id="L-5481"><a href="#L-5481"><span class="linenos">5481</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">ON</span><span class="p">)</span>
+</span><span id="L-5482"><a href="#L-5482"><span class="linenos">5482</span></a> <span class="n">on</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-5483"><a href="#L-5483"><span class="linenos">5483</span></a>
+</span><span id="L-5484"><a href="#L-5484"><span class="linenos">5484</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-5485"><a href="#L-5485"><span class="linenos">5485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
+</span><span id="L-5486"><a href="#L-5486"><span class="linenos">5486</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
+</span><span id="L-5487"><a href="#L-5487"><span class="linenos">5487</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="L-5488"><a href="#L-5488"><span class="linenos">5488</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="L-5489"><a href="#L-5489"><span class="linenos">5489</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
+</span><span id="L-5490"><a href="#L-5490"><span class="linenos">5490</span></a> <span class="p">)</span>
</span><span id="L-5491"><a href="#L-5491"><span class="linenos">5491</span></a>
-</span><span id="L-5492"><a href="#L-5492"><span class="linenos">5492</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">THEN</span><span class="p">)</span>
-</span><span id="L-5493"><a href="#L-5493"><span class="linenos">5493</span></a>
-</span><span id="L-5494"><a href="#L-5494"><span class="linenos">5494</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">INSERT</span><span class="p">):</span>
-</span><span id="L-5495"><a href="#L-5495"><span class="linenos">5495</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="L-5496"><a href="#L-5496"><span class="linenos">5496</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="L-5497"><a href="#L-5497"><span class="linenos">5497</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="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">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
-</span><span id="L-5498"><a href="#L-5498"><span class="linenos">5498</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5499"><a href="#L-5499"><span class="linenos">5499</span></a> <span class="n">then</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-5500"><a href="#L-5500"><span class="linenos">5500</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="L-5501"><a href="#L-5501"><span class="linenos">5501</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="L-5502"><a href="#L-5502"><span class="linenos">5502</span></a> <span class="n">expression</span><span class="o">=</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">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="L-5503"><a href="#L-5503"><span class="linenos">5503</span></a> <span class="p">)</span>
-</span><span id="L-5504"><a href="#L-5504"><span class="linenos">5504</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">UPDATE</span><span class="p">):</span>
-</span><span id="L-5505"><a href="#L-5505"><span class="linenos">5505</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="L-5506"><a href="#L-5506"><span class="linenos">5506</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-5507"><a href="#L-5507"><span class="linenos">5507</span></a> <span class="n">then</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">Update</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-5508"><a href="#L-5508"><span class="linenos">5508</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5509"><a href="#L-5509"><span class="linenos">5509</span></a> <span class="n">then</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-5510"><a href="#L-5510"><span class="linenos">5510</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="L-5511"><a href="#L-5511"><span class="linenos">5511</span></a> <span class="n">expressions</span><span class="o">=</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">SET</span><span class="p">)</span>
-</span><span id="L-5512"><a href="#L-5512"><span class="linenos">5512</span></a> <span class="ow">and</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_equality</span><span class="p">),</span>
-</span><span id="L-5513"><a href="#L-5513"><span class="linenos">5513</span></a> <span class="p">)</span>
-</span><span id="L-5514"><a href="#L-5514"><span class="linenos">5514</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">DELETE</span><span class="p">):</span>
-</span><span id="L-5515"><a href="#L-5515"><span class="linenos">5515</span></a> <span class="n">then</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">Var</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-5516"><a href="#L-5516"><span class="linenos">5516</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5517"><a href="#L-5517"><span class="linenos">5517</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5518"><a href="#L-5518"><span class="linenos">5518</span></a>
-</span><span id="L-5519"><a href="#L-5519"><span class="linenos">5519</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-5520"><a href="#L-5520"><span class="linenos">5520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5521"><a href="#L-5521"><span class="linenos">5521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="L-5522"><a href="#L-5522"><span class="linenos">5522</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="L-5523"><a href="#L-5523"><span class="linenos">5523</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="L-5524"><a href="#L-5524"><span class="linenos">5524</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="L-5525"><a href="#L-5525"><span class="linenos">5525</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="L-5526"><a href="#L-5526"><span class="linenos">5526</span></a> <span class="p">)</span>
-</span><span id="L-5527"><a href="#L-5527"><span class="linenos">5527</span></a> <span class="p">)</span>
-</span><span id="L-5528"><a href="#L-5528"><span class="linenos">5528</span></a> <span class="k">return</span> <span class="n">whens</span>
-</span><span id="L-5529"><a href="#L-5529"><span class="linenos">5529</span></a>
-</span><span id="L-5530"><a href="#L-5530"><span class="linenos">5530</span></a> <span class="k">def</span> <span class="nf">_parse_show</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-5531"><a href="#L-5531"><span class="linenos">5531</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
-</span><span id="L-5532"><a href="#L-5532"><span class="linenos">5532</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-5533"><a href="#L-5533"><span class="linenos">5533</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-5534"><a href="#L-5534"><span class="linenos">5534</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5535"><a href="#L-5535"><span class="linenos">5535</span></a>
-</span><span id="L-5536"><a href="#L-5536"><span class="linenos">5536</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="L-5537"><a href="#L-5537"><span class="linenos">5537</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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5538"><a href="#L-5538"><span class="linenos">5538</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-5539"><a href="#L-5539"><span class="linenos">5539</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5540"><a href="#L-5540"><span class="linenos">5540</span></a>
-</span><span id="L-5541"><a href="#L-5541"><span class="linenos">5541</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;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</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;TRANSACTION&quot;</span><span class="p">):</span>
-</span><span id="L-5542"><a href="#L-5542"><span class="linenos">5542</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
-</span><span id="L-5543"><a href="#L-5543"><span class="linenos">5543</span></a>
-</span><span id="L-5544"><a href="#L-5544"><span class="linenos">5544</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-5545"><a href="#L-5545"><span class="linenos">5545</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
-</span><span id="L-5546"><a href="#L-5546"><span class="linenos">5546</span></a>
-</span><span id="L-5547"><a href="#L-5547"><span class="linenos">5547</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
-</span><span id="L-5548"><a href="#L-5548"><span class="linenos">5548</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5549"><a href="#L-5549"><span class="linenos">5549</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5550"><a href="#L-5550"><span class="linenos">5550</span></a>
-</span><span id="L-5551"><a href="#L-5551"><span class="linenos">5551</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-5552"><a href="#L-5552"><span class="linenos">5552</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">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="L-5492"><a href="#L-5492"><span class="linenos">5492</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
+</span><span id="L-5493"><a href="#L-5493"><span class="linenos">5493</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5494"><a href="#L-5494"><span class="linenos">5494</span></a>
+</span><span id="L-5495"><a href="#L-5495"><span class="linenos">5495</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
+</span><span id="L-5496"><a href="#L-5496"><span class="linenos">5496</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</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">NOT</span><span class="p">)</span>
+</span><span id="L-5497"><a href="#L-5497"><span class="linenos">5497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
+</span><span id="L-5498"><a href="#L-5498"><span class="linenos">5498</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-5499"><a href="#L-5499"><span class="linenos">5499</span></a> <span class="kc">False</span>
+</span><span id="L-5500"><a href="#L-5500"><span class="linenos">5500</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
+</span><span id="L-5501"><a href="#L-5501"><span class="linenos">5501</span></a> <span class="k">else</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
+</span><span id="L-5502"><a href="#L-5502"><span class="linenos">5502</span></a> <span class="p">)</span>
+</span><span id="L-5503"><a href="#L-5503"><span class="linenos">5503</span></a> <span class="n">condition</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 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">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5504"><a href="#L-5504"><span class="linenos">5504</span></a>
+</span><span id="L-5505"><a href="#L-5505"><span class="linenos">5505</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">THEN</span><span class="p">)</span>
+</span><span id="L-5506"><a href="#L-5506"><span class="linenos">5506</span></a>
+</span><span id="L-5507"><a href="#L-5507"><span class="linenos">5507</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">INSERT</span><span class="p">):</span>
+</span><span id="L-5508"><a href="#L-5508"><span class="linenos">5508</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-5509"><a href="#L-5509"><span class="linenos">5509</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="L-5510"><a href="#L-5510"><span class="linenos">5510</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="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">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
+</span><span id="L-5511"><a href="#L-5511"><span class="linenos">5511</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5512"><a href="#L-5512"><span class="linenos">5512</span></a> <span class="n">then</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-5513"><a href="#L-5513"><span class="linenos">5513</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="L-5514"><a href="#L-5514"><span class="linenos">5514</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="L-5515"><a href="#L-5515"><span class="linenos">5515</span></a> <span class="n">expression</span><span class="o">=</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">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="L-5516"><a href="#L-5516"><span class="linenos">5516</span></a> <span class="p">)</span>
+</span><span id="L-5517"><a href="#L-5517"><span class="linenos">5517</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">UPDATE</span><span class="p">):</span>
+</span><span id="L-5518"><a href="#L-5518"><span class="linenos">5518</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-5519"><a href="#L-5519"><span class="linenos">5519</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-5520"><a href="#L-5520"><span class="linenos">5520</span></a> <span class="n">then</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">Update</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-5521"><a href="#L-5521"><span class="linenos">5521</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5522"><a href="#L-5522"><span class="linenos">5522</span></a> <span class="n">then</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-5523"><a href="#L-5523"><span class="linenos">5523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="L-5524"><a href="#L-5524"><span class="linenos">5524</span></a> <span class="n">expressions</span><span class="o">=</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">SET</span><span class="p">)</span>
+</span><span id="L-5525"><a href="#L-5525"><span class="linenos">5525</span></a> <span class="ow">and</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_equality</span><span class="p">),</span>
+</span><span id="L-5526"><a href="#L-5526"><span class="linenos">5526</span></a> <span class="p">)</span>
+</span><span id="L-5527"><a href="#L-5527"><span class="linenos">5527</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">DELETE</span><span class="p">):</span>
+</span><span id="L-5528"><a href="#L-5528"><span class="linenos">5528</span></a> <span class="n">then</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">Var</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5529"><a href="#L-5529"><span class="linenos">5529</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5530"><a href="#L-5530"><span class="linenos">5530</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5531"><a href="#L-5531"><span class="linenos">5531</span></a>
+</span><span id="L-5532"><a href="#L-5532"><span class="linenos">5532</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-5533"><a href="#L-5533"><span class="linenos">5533</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5534"><a href="#L-5534"><span class="linenos">5534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="L-5535"><a href="#L-5535"><span class="linenos">5535</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="L-5536"><a href="#L-5536"><span class="linenos">5536</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="L-5537"><a href="#L-5537"><span class="linenos">5537</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="L-5538"><a href="#L-5538"><span class="linenos">5538</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="L-5539"><a href="#L-5539"><span class="linenos">5539</span></a> <span class="p">)</span>
+</span><span id="L-5540"><a href="#L-5540"><span class="linenos">5540</span></a> <span class="p">)</span>
+</span><span id="L-5541"><a href="#L-5541"><span class="linenos">5541</span></a> <span class="k">return</span> <span class="n">whens</span>
+</span><span id="L-5542"><a href="#L-5542"><span class="linenos">5542</span></a>
+</span><span id="L-5543"><a href="#L-5543"><span class="linenos">5543</span></a> <span class="k">def</span> <span class="nf">_parse_show</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-5544"><a href="#L-5544"><span class="linenos">5544</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
+</span><span id="L-5545"><a href="#L-5545"><span class="linenos">5545</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-5546"><a href="#L-5546"><span class="linenos">5546</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-5547"><a href="#L-5547"><span class="linenos">5547</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5548"><a href="#L-5548"><span class="linenos">5548</span></a>
+</span><span id="L-5549"><a href="#L-5549"><span class="linenos">5549</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="L-5550"><a href="#L-5550"><span class="linenos">5550</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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5551"><a href="#L-5551"><span class="linenos">5551</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-5552"><a href="#L-5552"><span class="linenos">5552</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5553"><a href="#L-5553"><span class="linenos">5553</span></a>
-</span><span id="L-5554"><a href="#L-5554"><span class="linenos">5554</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">SetItem</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-5555"><a href="#L-5555"><span class="linenos">5555</span></a>
-</span><span id="L-5556"><a href="#L-5556"><span class="linenos">5556</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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-5557"><a href="#L-5557"><span class="linenos">5557</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
-</span><span id="L-5558"><a href="#L-5558"><span class="linenos">5558</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-5559"><a href="#L-5559"><span class="linenos">5559</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
-</span><span id="L-5560"><a href="#L-5560"><span class="linenos">5560</span></a> <span class="p">)</span>
-</span><span id="L-5561"><a href="#L-5561"><span class="linenos">5561</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-5562"><a href="#L-5562"><span class="linenos">5562</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="L-5563"><a href="#L-5563"><span class="linenos">5563</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="L-5564"><a href="#L-5564"><span class="linenos">5564</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
-</span><span id="L-5565"><a href="#L-5565"><span class="linenos">5565</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
-</span><span id="L-5566"><a href="#L-5566"><span class="linenos">5566</span></a> <span class="p">)</span>
-</span><span id="L-5567"><a href="#L-5567"><span class="linenos">5567</span></a>
-</span><span id="L-5568"><a href="#L-5568"><span class="linenos">5568</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</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-5569"><a href="#L-5569"><span class="linenos">5569</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
-</span><span id="L-5570"><a href="#L-5570"><span class="linenos">5570</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-5571"><a href="#L-5571"><span class="linenos">5571</span></a>
-</span><span id="L-5572"><a href="#L-5572"><span class="linenos">5572</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</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">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5573"><a href="#L-5573"><span class="linenos">5573</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5574"><a href="#L-5574"><span class="linenos">5574</span></a> <span class="n">set_</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-5575"><a href="#L-5575"><span class="linenos">5575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <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_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
-</span><span id="L-5576"><a href="#L-5576"><span class="linenos">5576</span></a> <span class="p">)</span>
-</span><span id="L-5577"><a href="#L-5577"><span class="linenos">5577</span></a>
-</span><span id="L-5578"><a href="#L-5578"><span class="linenos">5578</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5579"><a href="#L-5579"><span class="linenos">5579</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5580"><a href="#L-5580"><span class="linenos">5580</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5581"><a href="#L-5581"><span class="linenos">5581</span></a>
-</span><span id="L-5582"><a href="#L-5582"><span class="linenos">5582</span></a> <span class="k">return</span> <span class="n">set_</span>
-</span><span id="L-5583"><a href="#L-5583"><span class="linenos">5583</span></a>
-</span><span id="L-5584"><a href="#L-5584"><span class="linenos">5584</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</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">Var</span><span class="p">]:</span>
-</span><span id="L-5585"><a href="#L-5585"><span class="linenos">5585</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
-</span><span id="L-5586"><a href="#L-5586"><span class="linenos">5586</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="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
-</span><span id="L-5587"><a href="#L-5587"><span class="linenos">5587</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
-</span><span id="L-5588"><a href="#L-5588"><span class="linenos">5588</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5589"><a href="#L-5589"><span class="linenos">5589</span></a>
-</span><span id="L-5590"><a href="#L-5590"><span class="linenos">5590</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5591"><a href="#L-5591"><span class="linenos">5591</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5592"><a href="#L-5592"><span class="linenos">5592</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5593"><a href="#L-5593"><span class="linenos">5593</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5594"><a href="#L-5594"><span class="linenos">5594</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-5595"><a href="#L-5595"><span class="linenos">5595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
-</span><span id="L-5596"><a href="#L-5596"><span class="linenos">5596</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
-</span><span id="L-5597"><a href="#L-5597"><span class="linenos">5597</span></a>
-</span><span id="L-5598"><a href="#L-5598"><span class="linenos">5598</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
-</span><span id="L-5599"><a href="#L-5599"><span class="linenos">5599</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5600"><a href="#L-5600"><span class="linenos">5600</span></a>
-</span><span id="L-5601"><a href="#L-5601"><span class="linenos">5601</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-5602"><a href="#L-5602"><span class="linenos">5602</span></a> <span class="n">kind</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><span id="L-5603"><a href="#L-5603"><span class="linenos">5603</span></a>
-</span><span id="L-5604"><a href="#L-5604"><span class="linenos">5604</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-5605"><a href="#L-5605"><span class="linenos">5605</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-5606"><a href="#L-5606"><span class="linenos">5606</span></a> <span class="n">key</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><span id="L-5607"><a href="#L-5607"><span class="linenos">5607</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5608"><a href="#L-5608"><span class="linenos">5608</span></a>
-</span><span id="L-5609"><a href="#L-5609"><span class="linenos">5609</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5610"><a href="#L-5610"><span class="linenos">5610</span></a> <span class="k">break</span>
-</span><span id="L-5611"><a href="#L-5611"><span class="linenos">5611</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
-</span><span id="L-5612"><a href="#L-5612"><span class="linenos">5612</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">R_PAREN</span><span class="p">)</span>
+</span><span id="L-5554"><a href="#L-5554"><span class="linenos">5554</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;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</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;TRANSACTION&quot;</span><span class="p">):</span>
+</span><span id="L-5555"><a href="#L-5555"><span class="linenos">5555</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
+</span><span id="L-5556"><a href="#L-5556"><span class="linenos">5556</span></a>
+</span><span id="L-5557"><a href="#L-5557"><span class="linenos">5557</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5558"><a href="#L-5558"><span class="linenos">5558</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
+</span><span id="L-5559"><a href="#L-5559"><span class="linenos">5559</span></a>
+</span><span id="L-5560"><a href="#L-5560"><span class="linenos">5560</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
+</span><span id="L-5561"><a href="#L-5561"><span class="linenos">5561</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5562"><a href="#L-5562"><span class="linenos">5562</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5563"><a href="#L-5563"><span class="linenos">5563</span></a>
+</span><span id="L-5564"><a href="#L-5564"><span class="linenos">5564</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5565"><a href="#L-5565"><span class="linenos">5565</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">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="L-5566"><a href="#L-5566"><span class="linenos">5566</span></a>
+</span><span id="L-5567"><a href="#L-5567"><span class="linenos">5567</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">SetItem</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-5568"><a href="#L-5568"><span class="linenos">5568</span></a>
+</span><span id="L-5569"><a href="#L-5569"><span class="linenos">5569</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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-5570"><a href="#L-5570"><span class="linenos">5570</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
+</span><span id="L-5571"><a href="#L-5571"><span class="linenos">5571</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-5572"><a href="#L-5572"><span class="linenos">5572</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
+</span><span id="L-5573"><a href="#L-5573"><span class="linenos">5573</span></a> <span class="p">)</span>
+</span><span id="L-5574"><a href="#L-5574"><span class="linenos">5574</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-5575"><a href="#L-5575"><span class="linenos">5575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="L-5576"><a href="#L-5576"><span class="linenos">5576</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="L-5577"><a href="#L-5577"><span class="linenos">5577</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
+</span><span id="L-5578"><a href="#L-5578"><span class="linenos">5578</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
+</span><span id="L-5579"><a href="#L-5579"><span class="linenos">5579</span></a> <span class="p">)</span>
+</span><span id="L-5580"><a href="#L-5580"><span class="linenos">5580</span></a>
+</span><span id="L-5581"><a href="#L-5581"><span class="linenos">5581</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</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-5582"><a href="#L-5582"><span class="linenos">5582</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
+</span><span id="L-5583"><a href="#L-5583"><span class="linenos">5583</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-5584"><a href="#L-5584"><span class="linenos">5584</span></a>
+</span><span id="L-5585"><a href="#L-5585"><span class="linenos">5585</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</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">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5586"><a href="#L-5586"><span class="linenos">5586</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5587"><a href="#L-5587"><span class="linenos">5587</span></a> <span class="n">set_</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-5588"><a href="#L-5588"><span class="linenos">5588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <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_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
+</span><span id="L-5589"><a href="#L-5589"><span class="linenos">5589</span></a> <span class="p">)</span>
+</span><span id="L-5590"><a href="#L-5590"><span class="linenos">5590</span></a>
+</span><span id="L-5591"><a href="#L-5591"><span class="linenos">5591</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5592"><a href="#L-5592"><span class="linenos">5592</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5593"><a href="#L-5593"><span class="linenos">5593</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5594"><a href="#L-5594"><span class="linenos">5594</span></a>
+</span><span id="L-5595"><a href="#L-5595"><span class="linenos">5595</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="L-5596"><a href="#L-5596"><span class="linenos">5596</span></a>
+</span><span id="L-5597"><a href="#L-5597"><span class="linenos">5597</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</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">Var</span><span class="p">]:</span>
+</span><span id="L-5598"><a href="#L-5598"><span class="linenos">5598</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
+</span><span id="L-5599"><a href="#L-5599"><span class="linenos">5599</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="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
+</span><span id="L-5600"><a href="#L-5600"><span class="linenos">5600</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
+</span><span id="L-5601"><a href="#L-5601"><span class="linenos">5601</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5602"><a href="#L-5602"><span class="linenos">5602</span></a>
+</span><span id="L-5603"><a href="#L-5603"><span class="linenos">5603</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5604"><a href="#L-5604"><span class="linenos">5604</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5605"><a href="#L-5605"><span class="linenos">5605</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5606"><a href="#L-5606"><span class="linenos">5606</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5607"><a href="#L-5607"><span class="linenos">5607</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5608"><a href="#L-5608"><span class="linenos">5608</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
+</span><span id="L-5609"><a href="#L-5609"><span class="linenos">5609</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
+</span><span id="L-5610"><a href="#L-5610"><span class="linenos">5610</span></a>
+</span><span id="L-5611"><a href="#L-5611"><span class="linenos">5611</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
+</span><span id="L-5612"><a href="#L-5612"><span class="linenos">5612</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-5613"><a href="#L-5613"><span class="linenos">5613</span></a>
-</span><span id="L-5614"><a href="#L-5614"><span class="linenos">5614</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-5615"><a href="#L-5615"><span class="linenos">5615</span></a>
-</span><span id="L-5616"><a href="#L-5616"><span class="linenos">5616</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-5617"><a href="#L-5617"><span class="linenos">5617</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
-</span><span id="L-5618"><a href="#L-5618"><span class="linenos">5618</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5619"><a href="#L-5619"><span class="linenos">5619</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-5620"><a href="#L-5620"><span class="linenos">5620</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
-</span><span id="L-5621"><a href="#L-5621"><span class="linenos">5621</span></a> <span class="p">)</span>
-</span><span id="L-5622"><a href="#L-5622"><span class="linenos">5622</span></a>
-</span><span id="L-5623"><a href="#L-5623"><span class="linenos">5623</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
-</span><span id="L-5624"><a href="#L-5624"><span class="linenos">5624</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-5625"><a href="#L-5625"><span class="linenos">5625</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
-</span><span id="L-5626"><a href="#L-5626"><span class="linenos">5626</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
-</span><span id="L-5627"><a href="#L-5627"><span class="linenos">5627</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5628"><a href="#L-5628"><span class="linenos">5628</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="L-5629"><a href="#L-5629"><span class="linenos">5629</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5630"><a href="#L-5630"><span class="linenos">5630</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5631"><a href="#L-5631"><span class="linenos">5631</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5632"><a href="#L-5632"><span class="linenos">5632</span></a> <span class="nb">min</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">0</span><span class="p">)</span>
-</span><span id="L-5633"><a href="#L-5633"><span class="linenos">5633</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-5634"><a href="#L-5634"><span class="linenos">5634</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">DictRange</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">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="L-5614"><a href="#L-5614"><span class="linenos">5614</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-5615"><a href="#L-5615"><span class="linenos">5615</span></a> <span class="n">kind</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><span id="L-5616"><a href="#L-5616"><span class="linenos">5616</span></a>
+</span><span id="L-5617"><a href="#L-5617"><span class="linenos">5617</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-5618"><a href="#L-5618"><span class="linenos">5618</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-5619"><a href="#L-5619"><span class="linenos">5619</span></a> <span class="n">key</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><span id="L-5620"><a href="#L-5620"><span class="linenos">5620</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5621"><a href="#L-5621"><span class="linenos">5621</span></a>
+</span><span id="L-5622"><a href="#L-5622"><span class="linenos">5622</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5623"><a href="#L-5623"><span class="linenos">5623</span></a> <span class="k">break</span>
+</span><span id="L-5624"><a href="#L-5624"><span class="linenos">5624</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
+</span><span id="L-5625"><a href="#L-5625"><span class="linenos">5625</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">R_PAREN</span><span class="p">)</span>
+</span><span id="L-5626"><a href="#L-5626"><span class="linenos">5626</span></a>
+</span><span id="L-5627"><a href="#L-5627"><span class="linenos">5627</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5628"><a href="#L-5628"><span class="linenos">5628</span></a>
+</span><span id="L-5629"><a href="#L-5629"><span class="linenos">5629</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-5630"><a href="#L-5630"><span class="linenos">5630</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
+</span><span id="L-5631"><a href="#L-5631"><span class="linenos">5631</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5632"><a href="#L-5632"><span class="linenos">5632</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5633"><a href="#L-5633"><span class="linenos">5633</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
+</span><span id="L-5634"><a href="#L-5634"><span class="linenos">5634</span></a> <span class="p">)</span>
</span><span id="L-5635"><a href="#L-5635"><span class="linenos">5635</span></a>
-</span><span id="L-5636"><a href="#L-5636"><span class="linenos">5636</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
-</span><span id="L-5637"><a href="#L-5637"><span class="linenos">5637</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-5638"><a href="#L-5638"><span class="linenos">5638</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">Comprehension</span><span class="p">]:</span>
-</span><span id="L-5639"><a href="#L-5639"><span class="linenos">5639</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5640"><a href="#L-5640"><span class="linenos">5640</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5641"><a href="#L-5641"><span class="linenos">5641</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
-</span><span id="L-5642"><a href="#L-5642"><span class="linenos">5642</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-5643"><a href="#L-5643"><span class="linenos">5643</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5644"><a href="#L-5644"><span class="linenos">5644</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5645"><a href="#L-5645"><span class="linenos">5645</span></a> <span class="n">condition</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 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;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5646"><a href="#L-5646"><span class="linenos">5646</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-5647"><a href="#L-5647"><span class="linenos">5647</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
-</span><span id="L-5648"><a href="#L-5648"><span class="linenos">5648</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5649"><a href="#L-5649"><span class="linenos">5649</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-5650"><a href="#L-5650"><span class="linenos">5650</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
-</span><span id="L-5651"><a href="#L-5651"><span class="linenos">5651</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="L-5652"><a href="#L-5652"><span class="linenos">5652</span></a> <span class="p">)</span>
-</span><span id="L-5653"><a href="#L-5653"><span class="linenos">5653</span></a>
-</span><span id="L-5654"><a href="#L-5654"><span class="linenos">5654</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</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">Heredoc</span><span class="p">]:</span>
-</span><span id="L-5655"><a href="#L-5655"><span class="linenos">5655</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">HEREDOC_STRING</span><span class="p">):</span>
-</span><span id="L-5656"><a href="#L-5656"><span class="linenos">5656</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">Heredoc</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-5657"><a href="#L-5657"><span class="linenos">5657</span></a>
-</span><span id="L-5658"><a href="#L-5658"><span class="linenos">5658</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;$&quot;</span><span class="p">):</span>
-</span><span id="L-5659"><a href="#L-5659"><span class="linenos">5659</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5660"><a href="#L-5660"><span class="linenos">5660</span></a>
-</span><span id="L-5661"><a href="#L-5661"><span class="linenos">5661</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="L-5662"><a href="#L-5662"><span class="linenos">5662</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5663"><a href="#L-5663"><span class="linenos">5663</span></a>
-</span><span id="L-5664"><a href="#L-5664"><span class="linenos">5664</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
-</span><span id="L-5665"><a href="#L-5665"><span class="linenos">5665</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5666"><a href="#L-5666"><span class="linenos">5666</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-5667"><a href="#L-5667"><span class="linenos">5667</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5668"><a href="#L-5668"><span class="linenos">5668</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;No closing $ found&quot;</span><span class="p">)</span>
-</span><span id="L-5669"><a href="#L-5669"><span class="linenos">5669</span></a>
-</span><span id="L-5670"><a href="#L-5670"><span class="linenos">5670</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
-</span><span id="L-5671"><a href="#L-5671"><span class="linenos">5671</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</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;$&quot;</span><span class="p">):</span>
-</span><span id="L-5672"><a href="#L-5672"><span class="linenos">5672</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="L-5673"><a href="#L-5673"><span class="linenos">5673</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
-</span><span id="L-5674"><a href="#L-5674"><span class="linenos">5674</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5675"><a href="#L-5675"><span class="linenos">5675</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;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="L-5636"><a href="#L-5636"><span class="linenos">5636</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
+</span><span id="L-5637"><a href="#L-5637"><span class="linenos">5637</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-5638"><a href="#L-5638"><span class="linenos">5638</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
+</span><span id="L-5639"><a href="#L-5639"><span class="linenos">5639</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
+</span><span id="L-5640"><a href="#L-5640"><span class="linenos">5640</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5641"><a href="#L-5641"><span class="linenos">5641</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="L-5642"><a href="#L-5642"><span class="linenos">5642</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5643"><a href="#L-5643"><span class="linenos">5643</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5644"><a href="#L-5644"><span class="linenos">5644</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5645"><a href="#L-5645"><span class="linenos">5645</span></a> <span class="nb">min</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">0</span><span class="p">)</span>
+</span><span id="L-5646"><a href="#L-5646"><span class="linenos">5646</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5647"><a href="#L-5647"><span class="linenos">5647</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">DictRange</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">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="L-5648"><a href="#L-5648"><span class="linenos">5648</span></a>
+</span><span id="L-5649"><a href="#L-5649"><span class="linenos">5649</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
+</span><span id="L-5650"><a href="#L-5650"><span class="linenos">5650</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-5651"><a href="#L-5651"><span class="linenos">5651</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">Comprehension</span><span class="p">]:</span>
+</span><span id="L-5652"><a href="#L-5652"><span class="linenos">5652</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5653"><a href="#L-5653"><span class="linenos">5653</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5654"><a href="#L-5654"><span class="linenos">5654</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
+</span><span id="L-5655"><a href="#L-5655"><span class="linenos">5655</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-5656"><a href="#L-5656"><span class="linenos">5656</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5657"><a href="#L-5657"><span class="linenos">5657</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5658"><a href="#L-5658"><span class="linenos">5658</span></a> <span class="n">condition</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 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;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5659"><a href="#L-5659"><span class="linenos">5659</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-5660"><a href="#L-5660"><span class="linenos">5660</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
+</span><span id="L-5661"><a href="#L-5661"><span class="linenos">5661</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5662"><a href="#L-5662"><span class="linenos">5662</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-5663"><a href="#L-5663"><span class="linenos">5663</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
+</span><span id="L-5664"><a href="#L-5664"><span class="linenos">5664</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="L-5665"><a href="#L-5665"><span class="linenos">5665</span></a> <span class="p">)</span>
+</span><span id="L-5666"><a href="#L-5666"><span class="linenos">5666</span></a>
+</span><span id="L-5667"><a href="#L-5667"><span class="linenos">5667</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</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">Heredoc</span><span class="p">]:</span>
+</span><span id="L-5668"><a href="#L-5668"><span class="linenos">5668</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">HEREDOC_STRING</span><span class="p">):</span>
+</span><span id="L-5669"><a href="#L-5669"><span class="linenos">5669</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">Heredoc</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5670"><a href="#L-5670"><span class="linenos">5670</span></a>
+</span><span id="L-5671"><a href="#L-5671"><span class="linenos">5671</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;$&quot;</span><span class="p">):</span>
+</span><span id="L-5672"><a href="#L-5672"><span class="linenos">5672</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5673"><a href="#L-5673"><span class="linenos">5673</span></a>
+</span><span id="L-5674"><a href="#L-5674"><span class="linenos">5674</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="L-5675"><a href="#L-5675"><span class="linenos">5675</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5676"><a href="#L-5676"><span class="linenos">5676</span></a>
-</span><span id="L-5677"><a href="#L-5677"><span class="linenos">5677</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="L-5678"><a href="#L-5678"><span class="linenos">5678</span></a>
-</span><span id="L-5679"><a href="#L-5679"><span class="linenos">5679</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5680"><a href="#L-5680"><span class="linenos">5680</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="o">*</span><span class="n">tags</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-5681"><a href="#L-5681"><span class="linenos">5681</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5682"><a href="#L-5682"><span class="linenos">5682</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
-</span><span id="L-5683"><a href="#L-5683"><span class="linenos">5683</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">Heredoc</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">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
-</span><span id="L-5684"><a href="#L-5684"><span class="linenos">5684</span></a>
-</span><span id="L-5685"><a href="#L-5685"><span class="linenos">5685</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5686"><a href="#L-5686"><span class="linenos">5686</span></a>
-</span><span id="L-5687"><a href="#L-5687"><span class="linenos">5687</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
-</span><span id="L-5688"><a href="#L-5688"><span class="linenos">5688</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5677"><a href="#L-5677"><span class="linenos">5677</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
+</span><span id="L-5678"><a href="#L-5678"><span class="linenos">5678</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5679"><a href="#L-5679"><span class="linenos">5679</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-5680"><a href="#L-5680"><span class="linenos">5680</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5681"><a href="#L-5681"><span class="linenos">5681</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;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="L-5682"><a href="#L-5682"><span class="linenos">5682</span></a>
+</span><span id="L-5683"><a href="#L-5683"><span class="linenos">5683</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
+</span><span id="L-5684"><a href="#L-5684"><span class="linenos">5684</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</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;$&quot;</span><span class="p">):</span>
+</span><span id="L-5685"><a href="#L-5685"><span class="linenos">5685</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="L-5686"><a href="#L-5686"><span class="linenos">5686</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
+</span><span id="L-5687"><a href="#L-5687"><span class="linenos">5687</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5688"><a href="#L-5688"><span class="linenos">5688</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;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="L-5689"><a href="#L-5689"><span class="linenos">5689</span></a>
-</span><span id="L-5690"><a href="#L-5690"><span class="linenos">5690</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="L-5691"><a href="#L-5691"><span class="linenos">5691</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="L-5692"><a href="#L-5692"><span class="linenos">5692</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">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
-</span><span id="L-5693"><a href="#L-5693"><span class="linenos">5693</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5694"><a href="#L-5694"><span class="linenos">5694</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5695"><a href="#L-5695"><span class="linenos">5695</span></a>
-</span><span id="L-5696"><a href="#L-5696"><span class="linenos">5696</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5697"><a href="#L-5697"><span class="linenos">5697</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5698"><a href="#L-5698"><span class="linenos">5698</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-5699"><a href="#L-5699"><span class="linenos">5699</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="L-5700"><a href="#L-5700"><span class="linenos">5700</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-5701"><a href="#L-5701"><span class="linenos">5701</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-5702"><a href="#L-5702"><span class="linenos">5702</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
-</span><span id="L-5703"><a href="#L-5703"><span class="linenos">5703</span></a>
-</span><span id="L-5704"><a href="#L-5704"><span class="linenos">5704</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5705"><a href="#L-5705"><span class="linenos">5705</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
-</span><span id="L-5706"><a href="#L-5706"><span class="linenos">5706</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="L-5707"><a href="#L-5707"><span class="linenos">5707</span></a> <span class="k">break</span>
+</span><span id="L-5690"><a href="#L-5690"><span class="linenos">5690</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="L-5691"><a href="#L-5691"><span class="linenos">5691</span></a>
+</span><span id="L-5692"><a href="#L-5692"><span class="linenos">5692</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5693"><a href="#L-5693"><span class="linenos">5693</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="o">*</span><span class="n">tags</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-5694"><a href="#L-5694"><span class="linenos">5694</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5695"><a href="#L-5695"><span class="linenos">5695</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
+</span><span id="L-5696"><a href="#L-5696"><span class="linenos">5696</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">Heredoc</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">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
+</span><span id="L-5697"><a href="#L-5697"><span class="linenos">5697</span></a>
+</span><span id="L-5698"><a href="#L-5698"><span class="linenos">5698</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5699"><a href="#L-5699"><span class="linenos">5699</span></a>
+</span><span id="L-5700"><a href="#L-5700"><span class="linenos">5700</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
+</span><span id="L-5701"><a href="#L-5701"><span class="linenos">5701</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5702"><a href="#L-5702"><span class="linenos">5702</span></a>
+</span><span id="L-5703"><a href="#L-5703"><span class="linenos">5703</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="L-5704"><a href="#L-5704"><span class="linenos">5704</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="L-5705"><a href="#L-5705"><span class="linenos">5705</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">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
+</span><span id="L-5706"><a href="#L-5706"><span class="linenos">5706</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5707"><a href="#L-5707"><span class="linenos">5707</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5708"><a href="#L-5708"><span class="linenos">5708</span></a>
-</span><span id="L-5709"><a href="#L-5709"><span class="linenos">5709</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="L-5710"><a href="#L-5710"><span class="linenos">5710</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
-</span><span id="L-5711"><a href="#L-5711"><span class="linenos">5711</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="L-5712"><a href="#L-5712"><span class="linenos">5712</span></a>
-</span><span id="L-5713"><a href="#L-5713"><span class="linenos">5713</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5714"><a href="#L-5714"><span class="linenos">5714</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5715"><a href="#L-5715"><span class="linenos">5715</span></a>
-</span><span id="L-5716"><a href="#L-5716"><span class="linenos">5716</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-5717"><a href="#L-5717"><span class="linenos">5717</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5718"><a href="#L-5718"><span class="linenos">5718</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5719"><a href="#L-5719"><span class="linenos">5719</span></a>
-</span><span id="L-5720"><a href="#L-5720"><span class="linenos">5720</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="L-5721"><a href="#L-5721"><span class="linenos">5721</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5722"><a href="#L-5722"><span class="linenos">5722</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5723"><a href="#L-5723"><span class="linenos">5723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-5724"><a href="#L-5724"><span class="linenos">5724</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5709"><a href="#L-5709"><span class="linenos">5709</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5710"><a href="#L-5710"><span class="linenos">5710</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5711"><a href="#L-5711"><span class="linenos">5711</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-5712"><a href="#L-5712"><span class="linenos">5712</span></a> <span class="c1"># The current token might be multiple words</span>
+</span><span id="L-5713"><a href="#L-5713"><span class="linenos">5713</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-5714"><a href="#L-5714"><span class="linenos">5714</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-5715"><a href="#L-5715"><span class="linenos">5715</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
+</span><span id="L-5716"><a href="#L-5716"><span class="linenos">5716</span></a>
+</span><span id="L-5717"><a href="#L-5717"><span class="linenos">5717</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5718"><a href="#L-5718"><span class="linenos">5718</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
+</span><span id="L-5719"><a href="#L-5719"><span class="linenos">5719</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="L-5720"><a href="#L-5720"><span class="linenos">5720</span></a> <span class="k">break</span>
+</span><span id="L-5721"><a href="#L-5721"><span class="linenos">5721</span></a>
+</span><span id="L-5722"><a href="#L-5722"><span class="linenos">5722</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="L-5723"><a href="#L-5723"><span class="linenos">5723</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
+</span><span id="L-5724"><a href="#L-5724"><span class="linenos">5724</span></a> <span class="k">return</span> <span class="n">subparser</span>
</span><span id="L-5725"><a href="#L-5725"><span class="linenos">5725</span></a>
-</span><span id="L-5726"><a href="#L-5726"><span class="linenos">5726</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5727"><a href="#L-5727"><span class="linenos">5727</span></a>
-</span><span id="L-5728"><a href="#L-5728"><span class="linenos">5728</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5729"><a href="#L-5729"><span class="linenos">5729</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5730"><a href="#L-5730"><span class="linenos">5730</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5731"><a href="#L-5731"><span class="linenos">5731</span></a>
-</span><span id="L-5732"><a href="#L-5732"><span class="linenos">5732</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
-</span><span id="L-5733"><a href="#L-5733"><span class="linenos">5733</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5734"><a href="#L-5734"><span class="linenos">5734</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5735"><a href="#L-5735"><span class="linenos">5735</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5736"><a href="#L-5736"><span class="linenos">5736</span></a>
-</span><span id="L-5737"><a href="#L-5737"><span class="linenos">5737</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5726"><a href="#L-5726"><span class="linenos">5726</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5727"><a href="#L-5727"><span class="linenos">5727</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5728"><a href="#L-5728"><span class="linenos">5728</span></a>
+</span><span id="L-5729"><a href="#L-5729"><span class="linenos">5729</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-5730"><a href="#L-5730"><span class="linenos">5730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5731"><a href="#L-5731"><span class="linenos">5731</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5732"><a href="#L-5732"><span class="linenos">5732</span></a>
+</span><span id="L-5733"><a href="#L-5733"><span class="linenos">5733</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="L-5734"><a href="#L-5734"><span class="linenos">5734</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5735"><a href="#L-5735"><span class="linenos">5735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5736"><a href="#L-5736"><span class="linenos">5736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-5737"><a href="#L-5737"><span class="linenos">5737</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-5738"><a href="#L-5738"><span class="linenos">5738</span></a>
-</span><span id="L-5739"><a href="#L-5739"><span class="linenos">5739</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5740"><a href="#L-5740"><span class="linenos">5740</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="L-5741"><a href="#L-5741"><span class="linenos">5741</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5742"><a href="#L-5742"><span class="linenos">5742</span></a>
-</span><span id="L-5743"><a href="#L-5743"><span class="linenos">5743</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
-</span><span id="L-5744"><a href="#L-5744"><span class="linenos">5744</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5745"><a href="#L-5745"><span class="linenos">5745</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-5746"><a href="#L-5746"><span class="linenos">5746</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5747"><a href="#L-5747"><span class="linenos">5747</span></a>
-</span><span id="L-5748"><a href="#L-5748"><span class="linenos">5748</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5739"><a href="#L-5739"><span class="linenos">5739</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5740"><a href="#L-5740"><span class="linenos">5740</span></a>
+</span><span id="L-5741"><a href="#L-5741"><span class="linenos">5741</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5742"><a href="#L-5742"><span class="linenos">5742</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5743"><a href="#L-5743"><span class="linenos">5743</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5744"><a href="#L-5744"><span class="linenos">5744</span></a>
+</span><span id="L-5745"><a href="#L-5745"><span class="linenos">5745</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
+</span><span id="L-5746"><a href="#L-5746"><span class="linenos">5746</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5747"><a href="#L-5747"><span class="linenos">5747</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5748"><a href="#L-5748"><span class="linenos">5748</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-5749"><a href="#L-5749"><span class="linenos">5749</span></a>
-</span><span id="L-5750"><a href="#L-5750"><span class="linenos">5750</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5751"><a href="#L-5751"><span class="linenos">5751</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-5752"><a href="#L-5752"><span class="linenos">5752</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;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="L-5753"><a href="#L-5753"><span class="linenos">5753</span></a>
-</span><span id="L-5754"><a href="#L-5754"><span class="linenos">5754</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5755"><a href="#L-5755"><span class="linenos">5755</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-5756"><a href="#L-5756"><span class="linenos">5756</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;Expecting )&quot;</span><span class="p">)</span>
-</span><span id="L-5757"><a href="#L-5757"><span class="linenos">5757</span></a>
-</span><span id="L-5758"><a href="#L-5758"><span class="linenos">5758</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5759"><a href="#L-5759"><span class="linenos">5759</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="L-5760"><a href="#L-5760"><span class="linenos">5760</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5761"><a href="#L-5761"><span class="linenos">5761</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5762"><a href="#L-5762"><span class="linenos">5762</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5763"><a href="#L-5763"><span class="linenos">5763</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5764"><a href="#L-5764"><span class="linenos">5764</span></a>
-</span><span id="L-5765"><a href="#L-5765"><span class="linenos">5765</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5766"><a href="#L-5766"><span class="linenos">5766</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5767"><a href="#L-5767"><span class="linenos">5767</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="L-5768"><a href="#L-5768"><span class="linenos">5768</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="L-5769"><a href="#L-5769"><span class="linenos">5769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5770"><a href="#L-5770"><span class="linenos">5770</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5771"><a href="#L-5771"><span class="linenos">5771</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5772"><a href="#L-5772"><span class="linenos">5772</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5773"><a href="#L-5773"><span class="linenos">5773</span></a>
-</span><span id="L-5774"><a href="#L-5774"><span class="linenos">5774</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5775"><a href="#L-5775"><span class="linenos">5775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5776"><a href="#L-5776"><span class="linenos">5776</span></a>
-</span><span id="L-5777"><a href="#L-5777"><span class="linenos">5777</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5778"><a href="#L-5778"><span class="linenos">5778</span></a>
-</span><span id="L-5779"><a href="#L-5779"><span class="linenos">5779</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5780"><a href="#L-5780"><span class="linenos">5780</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</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">Expression</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-5781"><a href="#L-5781"><span class="linenos">5781</span></a> <span class="o">...</span>
-</span><span id="L-5782"><a href="#L-5782"><span class="linenos">5782</span></a>
-</span><span id="L-5783"><a href="#L-5783"><span class="linenos">5783</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5784"><a href="#L-5784"><span class="linenos">5784</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
-</span><span id="L-5785"><a href="#L-5785"><span class="linenos">5785</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-5786"><a href="#L-5786"><span class="linenos">5786</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-5787"><a href="#L-5787"><span class="linenos">5787</span></a> <span class="o">...</span>
-</span><span id="L-5788"><a href="#L-5788"><span class="linenos">5788</span></a>
-</span><span id="L-5789"><a href="#L-5789"><span class="linenos">5789</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
-</span><span id="L-5790"><a href="#L-5790"><span class="linenos">5790</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-5791"><a href="#L-5791"><span class="linenos">5791</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="L-5792"><a href="#L-5792"><span class="linenos">5792</span></a> <span class="k">elif</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">Column</span><span class="p">):</span>
-</span><span id="L-5793"><a href="#L-5793"><span class="linenos">5793</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="L-5794"><a href="#L-5794"><span class="linenos">5794</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</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-5795"><a href="#L-5795"><span class="linenos">5795</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-5796"><a href="#L-5796"><span class="linenos">5796</span></a> <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">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-5797"><a href="#L-5797"><span class="linenos">5797</span></a> <span class="p">)</span>
-</span><span id="L-5798"><a href="#L-5798"><span class="linenos">5798</span></a>
-</span><span id="L-5799"><a href="#L-5799"><span class="linenos">5799</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5800"><a href="#L-5800"><span class="linenos">5800</span></a>
-</span><span id="L-5801"><a href="#L-5801"><span class="linenos">5801</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
-</span><span id="L-5802"><a href="#L-5802"><span class="linenos">5802</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
-</span><span id="L-5803"><a href="#L-5803"><span class="linenos">5803</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-5804"><a href="#L-5804"><span class="linenos">5804</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="L-5805"><a href="#L-5805"><span class="linenos">5805</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="L-5806"><a href="#L-5806"><span class="linenos">5806</span></a>
-</span><span id="L-5807"><a href="#L-5807"><span class="linenos">5807</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="L-5808"><a href="#L-5808"><span class="linenos">5808</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
-</span><span id="L-5809"><a href="#L-5809"><span class="linenos">5809</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-5810"><a href="#L-5810"><span class="linenos">5810</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-5750"><a href="#L-5750"><span class="linenos">5750</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5751"><a href="#L-5751"><span class="linenos">5751</span></a>
+</span><span id="L-5752"><a href="#L-5752"><span class="linenos">5752</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5753"><a href="#L-5753"><span class="linenos">5753</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="L-5754"><a href="#L-5754"><span class="linenos">5754</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5755"><a href="#L-5755"><span class="linenos">5755</span></a>
+</span><span id="L-5756"><a href="#L-5756"><span class="linenos">5756</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
+</span><span id="L-5757"><a href="#L-5757"><span class="linenos">5757</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5758"><a href="#L-5758"><span class="linenos">5758</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-5759"><a href="#L-5759"><span class="linenos">5759</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5760"><a href="#L-5760"><span class="linenos">5760</span></a>
+</span><span id="L-5761"><a href="#L-5761"><span class="linenos">5761</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5762"><a href="#L-5762"><span class="linenos">5762</span></a>
+</span><span id="L-5763"><a href="#L-5763"><span class="linenos">5763</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5764"><a href="#L-5764"><span class="linenos">5764</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-5765"><a href="#L-5765"><span class="linenos">5765</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;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="L-5766"><a href="#L-5766"><span class="linenos">5766</span></a>
+</span><span id="L-5767"><a href="#L-5767"><span class="linenos">5767</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5768"><a href="#L-5768"><span class="linenos">5768</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-5769"><a href="#L-5769"><span class="linenos">5769</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;Expecting )&quot;</span><span class="p">)</span>
+</span><span id="L-5770"><a href="#L-5770"><span class="linenos">5770</span></a>
+</span><span id="L-5771"><a href="#L-5771"><span class="linenos">5771</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5772"><a href="#L-5772"><span class="linenos">5772</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="L-5773"><a href="#L-5773"><span class="linenos">5773</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5774"><a href="#L-5774"><span class="linenos">5774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5775"><a href="#L-5775"><span class="linenos">5775</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5776"><a href="#L-5776"><span class="linenos">5776</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5777"><a href="#L-5777"><span class="linenos">5777</span></a>
+</span><span id="L-5778"><a href="#L-5778"><span class="linenos">5778</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5779"><a href="#L-5779"><span class="linenos">5779</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5780"><a href="#L-5780"><span class="linenos">5780</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="L-5781"><a href="#L-5781"><span class="linenos">5781</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="L-5782"><a href="#L-5782"><span class="linenos">5782</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5783"><a href="#L-5783"><span class="linenos">5783</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5784"><a href="#L-5784"><span class="linenos">5784</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5785"><a href="#L-5785"><span class="linenos">5785</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5786"><a href="#L-5786"><span class="linenos">5786</span></a>
+</span><span id="L-5787"><a href="#L-5787"><span class="linenos">5787</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5788"><a href="#L-5788"><span class="linenos">5788</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5789"><a href="#L-5789"><span class="linenos">5789</span></a>
+</span><span id="L-5790"><a href="#L-5790"><span class="linenos">5790</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5791"><a href="#L-5791"><span class="linenos">5791</span></a>
+</span><span id="L-5792"><a href="#L-5792"><span class="linenos">5792</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5793"><a href="#L-5793"><span class="linenos">5793</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</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">Expression</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-5794"><a href="#L-5794"><span class="linenos">5794</span></a> <span class="o">...</span>
+</span><span id="L-5795"><a href="#L-5795"><span class="linenos">5795</span></a>
+</span><span id="L-5796"><a href="#L-5796"><span class="linenos">5796</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5797"><a href="#L-5797"><span class="linenos">5797</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
+</span><span id="L-5798"><a href="#L-5798"><span class="linenos">5798</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-5799"><a href="#L-5799"><span class="linenos">5799</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-5800"><a href="#L-5800"><span class="linenos">5800</span></a> <span class="o">...</span>
+</span><span id="L-5801"><a href="#L-5801"><span class="linenos">5801</span></a>
+</span><span id="L-5802"><a href="#L-5802"><span class="linenos">5802</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
+</span><span id="L-5803"><a href="#L-5803"><span class="linenos">5803</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-5804"><a href="#L-5804"><span class="linenos">5804</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="L-5805"><a href="#L-5805"><span class="linenos">5805</span></a> <span class="k">elif</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">Column</span><span class="p">):</span>
+</span><span id="L-5806"><a href="#L-5806"><span class="linenos">5806</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="L-5807"><a href="#L-5807"><span class="linenos">5807</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</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-5808"><a href="#L-5808"><span class="linenos">5808</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-5809"><a href="#L-5809"><span class="linenos">5809</span></a> <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">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-5810"><a href="#L-5810"><span class="linenos">5810</span></a> <span class="p">)</span>
</span><span id="L-5811"><a href="#L-5811"><span class="linenos">5811</span></a>
-</span><span id="L-5812"><a href="#L-5812"><span class="linenos">5812</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-5813"><a href="#L-5813"><span class="linenos">5813</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-5814"><a href="#L-5814"><span class="linenos">5814</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="L-5815"><a href="#L-5815"><span class="linenos">5815</span></a> <span class="k">break</span>
-</span><span id="L-5816"><a href="#L-5816"><span class="linenos">5816</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-5817"><a href="#L-5817"><span class="linenos">5817</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5818"><a href="#L-5818"><span class="linenos">5818</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="L-5819"><a href="#L-5819"><span class="linenos">5819</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="L-5820"><a href="#L-5820"><span class="linenos">5820</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5821"><a href="#L-5821"><span class="linenos">5821</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="L-5822"><a href="#L-5822"><span class="linenos">5822</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5812"><a href="#L-5812"><span class="linenos">5812</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5813"><a href="#L-5813"><span class="linenos">5813</span></a>
+</span><span id="L-5814"><a href="#L-5814"><span class="linenos">5814</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
+</span><span id="L-5815"><a href="#L-5815"><span class="linenos">5815</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span><span id="L-5816"><a href="#L-5816"><span class="linenos">5816</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-5817"><a href="#L-5817"><span class="linenos">5817</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="L-5818"><a href="#L-5818"><span class="linenos">5818</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5819"><a href="#L-5819"><span class="linenos">5819</span></a>
+</span><span id="L-5820"><a href="#L-5820"><span class="linenos">5820</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="L-5821"><a href="#L-5821"><span class="linenos">5821</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
+</span><span id="L-5822"><a href="#L-5822"><span class="linenos">5822</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-5823"><a href="#L-5823"><span class="linenos">5823</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-5824"><a href="#L-5824"><span class="linenos">5824</span></a>
+</span><span id="L-5825"><a href="#L-5825"><span class="linenos">5825</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-5826"><a href="#L-5826"><span class="linenos">5826</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-5827"><a href="#L-5827"><span class="linenos">5827</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="L-5828"><a href="#L-5828"><span class="linenos">5828</span></a> <span class="k">break</span>
+</span><span id="L-5829"><a href="#L-5829"><span class="linenos">5829</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-5830"><a href="#L-5830"><span class="linenos">5830</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5831"><a href="#L-5831"><span class="linenos">5831</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="L-5832"><a href="#L-5832"><span class="linenos">5832</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="L-5833"><a href="#L-5833"><span class="linenos">5833</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5834"><a href="#L-5834"><span class="linenos">5834</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="L-5835"><a href="#L-5835"><span class="linenos">5835</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -8741,3361 +8754,3374 @@
</span><span id="Parser-2466"><a href="#Parser-2466"><span class="linenos">2466</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="Parser-2467"><a href="#Parser-2467"><span class="linenos">2467</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
</span><span id="Parser-2468"><a href="#Parser-2468"><span class="linenos">2468</span></a> <span class="n">offset</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">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2469"><a href="#Parser-2469"><span class="linenos">2469</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</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="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
-</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a> <span class="k">continue</span>
-</span><span id="Parser-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a> <span class="k">break</span>
-</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2474"><a href="#Parser-2474"><span class="linenos">2474</span></a>
-</span><span id="Parser-2475"><a href="#Parser-2475"><span class="linenos">2475</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="Parser-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2478"><a href="#Parser-2478"><span class="linenos">2478</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
-</span><span id="Parser-2479"><a href="#Parser-2479"><span class="linenos">2479</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2469"><a href="#Parser-2469"><span class="linenos">2469</span></a>
+</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="Parser-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a>
+</span><span id="Parser-2474"><a href="#Parser-2474"><span class="linenos">2474</span></a> <span class="n">limit_by_expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Parser-2475"><a href="#Parser-2475"><span class="linenos">2475</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a> <span class="n">offset</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">limit_by_expressions</span><span class="p">)</span>
+</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</span></a> <span class="k">continue</span>
+</span><span id="Parser-2478"><a href="#Parser-2478"><span class="linenos">2478</span></a> <span class="k">break</span>
+</span><span id="Parser-2479"><a href="#Parser-2479"><span class="linenos">2479</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-2480"><a href="#Parser-2480"><span class="linenos">2480</span></a>
-</span><span id="Parser-2481"><a href="#Parser-2481"><span class="linenos">2481</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="Parser-2482"><a href="#Parser-2482"><span class="linenos">2482</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="Parser-2483"><a href="#Parser-2483"><span class="linenos">2483</span></a>
-</span><span id="Parser-2484"><a href="#Parser-2484"><span class="linenos">2484</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">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
-</span><span id="Parser-2485"><a href="#Parser-2485"><span class="linenos">2485</span></a>
-</span><span id="Parser-2486"><a href="#Parser-2486"><span class="linenos">2486</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2487"><a href="#Parser-2487"><span class="linenos">2487</span></a>
-</span><span id="Parser-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a> <span class="k">def</span> <span class="nf">_parse_into</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">Into</span><span class="p">]:</span>
-</span><span id="Parser-2489"><a href="#Parser-2489"><span class="linenos">2489</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
-</span><span id="Parser-2490"><a href="#Parser-2490"><span class="linenos">2490</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2481"><a href="#Parser-2481"><span class="linenos">2481</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="Parser-2482"><a href="#Parser-2482"><span class="linenos">2482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
+</span><span id="Parser-2483"><a href="#Parser-2483"><span class="linenos">2483</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2484"><a href="#Parser-2484"><span class="linenos">2484</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
+</span><span id="Parser-2485"><a href="#Parser-2485"><span class="linenos">2485</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2486"><a href="#Parser-2486"><span class="linenos">2486</span></a>
+</span><span id="Parser-2487"><a href="#Parser-2487"><span class="linenos">2487</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
+</span><span id="Parser-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
+</span><span id="Parser-2489"><a href="#Parser-2489"><span class="linenos">2489</span></a>
+</span><span id="Parser-2490"><a href="#Parser-2490"><span class="linenos">2490</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">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
</span><span id="Parser-2491"><a href="#Parser-2491"><span class="linenos">2491</span></a>
-</span><span id="Parser-2492"><a href="#Parser-2492"><span class="linenos">2492</span></a> <span class="n">temp</span> <span class="o">=</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">TEMPORARY</span><span class="p">)</span>
-</span><span id="Parser-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
-</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</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">TABLE</span><span class="p">)</span>
-</span><span id="Parser-2495"><a href="#Parser-2495"><span class="linenos">2495</span></a>
-</span><span id="Parser-2496"><a href="#Parser-2496"><span class="linenos">2496</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="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
-</span><span id="Parser-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a> <span class="p">)</span>
-</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a>
-</span><span id="Parser-2500"><a href="#Parser-2500"><span class="linenos">2500</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
-</span><span id="Parser-2501"><a href="#Parser-2501"><span class="linenos">2501</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2502"><a href="#Parser-2502"><span class="linenos">2502</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">From</span><span class="p">]:</span>
-</span><span id="Parser-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</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">FROM</span><span class="p">):</span>
-</span><span id="Parser-2504"><a href="#Parser-2504"><span class="linenos">2504</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2492"><a href="#Parser-2492"><span class="linenos">2492</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a>
+</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</span></a> <span class="k">def</span> <span class="nf">_parse_into</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">Into</span><span class="p">]:</span>
+</span><span id="Parser-2495"><a href="#Parser-2495"><span class="linenos">2495</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
+</span><span id="Parser-2496"><a href="#Parser-2496"><span class="linenos">2496</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</span></a>
+</span><span id="Parser-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a> <span class="n">temp</span> <span class="o">=</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">TEMPORARY</span><span class="p">)</span>
+</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
+</span><span id="Parser-2500"><a href="#Parser-2500"><span class="linenos">2500</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">TABLE</span><span class="p">)</span>
+</span><span id="Parser-2501"><a href="#Parser-2501"><span class="linenos">2501</span></a>
+</span><span id="Parser-2502"><a href="#Parser-2502"><span class="linenos">2502</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="Parser-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
+</span><span id="Parser-2504"><a href="#Parser-2504"><span class="linenos">2504</span></a> <span class="p">)</span>
</span><span id="Parser-2505"><a href="#Parser-2505"><span class="linenos">2505</span></a>
-</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</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="Parser-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
-</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="p">)</span>
-</span><span id="Parser-2509"><a href="#Parser-2509"><span class="linenos">2509</span></a>
-</span><span id="Parser-2510"><a href="#Parser-2510"><span class="linenos">2510</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</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">MatchRecognize</span><span class="p">]:</span>
-</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
-</span><span id="Parser-2512"><a href="#Parser-2512"><span class="linenos">2512</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2513"><a href="#Parser-2513"><span class="linenos">2513</span></a>
-</span><span id="Parser-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
+</span><span id="Parser-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</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">From</span><span class="p">]:</span>
+</span><span id="Parser-2509"><a href="#Parser-2509"><span class="linenos">2509</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</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">FROM</span><span class="p">):</span>
+</span><span id="Parser-2510"><a href="#Parser-2510"><span class="linenos">2510</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</span></a>
+</span><span id="Parser-2512"><a href="#Parser-2512"><span class="linenos">2512</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="Parser-2513"><a href="#Parser-2513"><span class="linenos">2513</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
+</span><span id="Parser-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a> <span class="p">)</span>
</span><span id="Parser-2515"><a href="#Parser-2515"><span class="linenos">2515</span></a>
-</span><span id="Parser-2516"><a href="#Parser-2516"><span class="linenos">2516</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
-</span><span id="Parser-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <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;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2516"><a href="#Parser-2516"><span class="linenos">2516</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</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">MatchRecognize</span><span class="p">]:</span>
+</span><span id="Parser-2517"><a href="#Parser-2517"><span class="linenos">2517</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
+</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2519"><a href="#Parser-2519"><span class="linenos">2519</span></a>
-</span><span id="Parser-2520"><a href="#Parser-2520"><span class="linenos">2520</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;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</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;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="Parser-2523"><a href="#Parser-2523"><span class="linenos">2523</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
-</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</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;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
-</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</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;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="Parser-2527"><a href="#Parser-2527"><span class="linenos">2527</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
-</span><span id="Parser-2528"><a href="#Parser-2528"><span class="linenos">2528</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
-</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
-</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2532"><a href="#Parser-2532"><span class="linenos">2532</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a>
-</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
-</span><span id="Parser-2535"><a href="#Parser-2535"><span class="linenos">2535</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="Parser-2536"><a href="#Parser-2536"><span class="linenos">2536</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;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="Parser-2537"><a href="#Parser-2537"><span class="linenos">2537</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
-</span><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="Parser-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
-</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
-</span><span id="Parser-2541"><a href="#Parser-2541"><span class="linenos">2541</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-2542"><a href="#Parser-2542"><span class="linenos">2542</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
-</span><span id="Parser-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-2544"><a href="#Parser-2544"><span class="linenos">2544</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2545"><a href="#Parser-2545"><span class="linenos">2545</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2546"><a href="#Parser-2546"><span class="linenos">2546</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a>
-</span><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</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;PATTERN&quot;</span><span class="p">):</span>
-</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</span></a>
-</span><span id="Parser-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2520"><a href="#Parser-2520"><span class="linenos">2520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a>
+</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
+</span><span id="Parser-2523"><a href="#Parser-2523"><span class="linenos">2523</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <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;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a>
+</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</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;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="Parser-2527"><a href="#Parser-2527"><span class="linenos">2527</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="Parser-2528"><a href="#Parser-2528"><span class="linenos">2528</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;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
+</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</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;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
+</span><span id="Parser-2532"><a href="#Parser-2532"><span class="linenos">2532</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;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
+</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
+</span><span id="Parser-2535"><a href="#Parser-2535"><span class="linenos">2535</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
+</span><span id="Parser-2536"><a href="#Parser-2536"><span class="linenos">2536</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2537"><a href="#Parser-2537"><span class="linenos">2537</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a>
+</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
+</span><span id="Parser-2541"><a href="#Parser-2541"><span class="linenos">2541</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="Parser-2542"><a href="#Parser-2542"><span class="linenos">2542</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;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="Parser-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
+</span><span id="Parser-2544"><a href="#Parser-2544"><span class="linenos">2544</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="Parser-2545"><a href="#Parser-2545"><span class="linenos">2545</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
+</span><span id="Parser-2546"><a href="#Parser-2546"><span class="linenos">2546</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
+</span><span id="Parser-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</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;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
+</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2553"><a href="#Parser-2553"><span class="linenos">2553</span></a>
-</span><span id="Parser-2554"><a href="#Parser-2554"><span class="linenos">2554</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Parser-2555"><a href="#Parser-2555"><span class="linenos">2555</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="Parser-2554"><a href="#Parser-2554"><span class="linenos">2554</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;PATTERN&quot;</span><span class="p">):</span>
+</span><span id="Parser-2555"><a href="#Parser-2555"><span class="linenos">2555</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-2556"><a href="#Parser-2556"><span class="linenos">2556</span></a>
-</span><span id="Parser-2557"><a href="#Parser-2557"><span class="linenos">2557</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-2558"><a href="#Parser-2558"><span class="linenos">2558</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="Parser-2559"><a href="#Parser-2559"><span class="linenos">2559</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Parser-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
-</span><span id="Parser-2561"><a href="#Parser-2561"><span class="linenos">2561</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="Parser-2557"><a href="#Parser-2557"><span class="linenos">2557</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-2558"><a href="#Parser-2558"><span class="linenos">2558</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2559"><a href="#Parser-2559"><span class="linenos">2559</span></a>
+</span><span id="Parser-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Parser-2561"><a href="#Parser-2561"><span class="linenos">2561</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-2562"><a href="#Parser-2562"><span class="linenos">2562</span></a>
-</span><span id="Parser-2563"><a href="#Parser-2563"><span class="linenos">2563</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-2565"><a href="#Parser-2565"><span class="linenos">2565</span></a>
-</span><span id="Parser-2566"><a href="#Parser-2566"><span class="linenos">2566</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-2567"><a href="#Parser-2567"><span class="linenos">2567</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2563"><a href="#Parser-2563"><span class="linenos">2563</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="Parser-2565"><a href="#Parser-2565"><span class="linenos">2565</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Parser-2566"><a href="#Parser-2566"><span class="linenos">2566</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
+</span><span id="Parser-2567"><a href="#Parser-2567"><span class="linenos">2567</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="Parser-2568"><a href="#Parser-2568"><span class="linenos">2568</span></a>
-</span><span id="Parser-2569"><a href="#Parser-2569"><span class="linenos">2569</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="Parser-2570"><a href="#Parser-2570"><span class="linenos">2570</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</span></a>
-</span><span id="Parser-2573"><a href="#Parser-2573"><span class="linenos">2573</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2574"><a href="#Parser-2574"><span class="linenos">2574</span></a> <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_name_as_expression</span><span class="p">)</span>
-</span><span id="Parser-2575"><a href="#Parser-2575"><span class="linenos">2575</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;DEFINE&quot;</span><span class="p">)</span>
-</span><span id="Parser-2576"><a href="#Parser-2576"><span class="linenos">2576</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2577"><a href="#Parser-2577"><span class="linenos">2577</span></a> <span class="p">)</span>
+</span><span id="Parser-2569"><a href="#Parser-2569"><span class="linenos">2569</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="Parser-2570"><a href="#Parser-2570"><span class="linenos">2570</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a>
+</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-2573"><a href="#Parser-2573"><span class="linenos">2573</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;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2574"><a href="#Parser-2574"><span class="linenos">2574</span></a>
+</span><span id="Parser-2575"><a href="#Parser-2575"><span class="linenos">2575</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="Parser-2576"><a href="#Parser-2576"><span class="linenos">2576</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2577"><a href="#Parser-2577"><span class="linenos">2577</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2578"><a href="#Parser-2578"><span class="linenos">2578</span></a>
-</span><span id="Parser-2579"><a href="#Parser-2579"><span class="linenos">2579</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-2580"><a href="#Parser-2580"><span class="linenos">2580</span></a>
-</span><span id="Parser-2581"><a href="#Parser-2581"><span class="linenos">2581</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="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="Parser-2584"><a href="#Parser-2584"><span class="linenos">2584</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="Parser-2586"><a href="#Parser-2586"><span class="linenos">2586</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="Parser-2589"><a href="#Parser-2589"><span class="linenos">2589</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="Parser-2590"><a href="#Parser-2590"><span class="linenos">2590</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</span></a> <span class="p">)</span>
-</span><span id="Parser-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a>
-</span><span id="Parser-2593"><a href="#Parser-2593"><span class="linenos">2593</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</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">Lateral</span><span class="p">]:</span>
-</span><span id="Parser-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
-</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
-</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a>
-</span><span id="Parser-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2602"><a href="#Parser-2602"><span class="linenos">2602</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">LATERAL</span><span class="p">):</span>
-</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2604"><a href="#Parser-2604"><span class="linenos">2604</span></a> <span class="n">view</span> <span class="o">=</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">VIEW</span><span class="p">)</span>
-</span><span id="Parser-2605"><a href="#Parser-2605"><span class="linenos">2605</span></a> <span class="n">outer</span> <span class="o">=</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">OUTER</span><span class="p">)</span>
-</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</span></a>
-</span><span id="Parser-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-2610"><a href="#Parser-2610"><span class="linenos">2610</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="Parser-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="Parser-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="ow">or</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><span id="Parser-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a> <span class="p">)</span>
-</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a>
-</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="Parser-2617"><a href="#Parser-2617"><span class="linenos">2617</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
-</span><span id="Parser-2618"><a href="#Parser-2618"><span class="linenos">2618</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</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><span id="Parser-2620"><a href="#Parser-2620"><span class="linenos">2620</span></a> <span class="p">)</span>
+</span><span id="Parser-2579"><a href="#Parser-2579"><span class="linenos">2579</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2580"><a href="#Parser-2580"><span class="linenos">2580</span></a> <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_name_as_expression</span><span class="p">)</span>
+</span><span id="Parser-2581"><a href="#Parser-2581"><span class="linenos">2581</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;DEFINE&quot;</span><span class="p">)</span>
+</span><span id="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</span></a> <span class="p">)</span>
+</span><span id="Parser-2584"><a href="#Parser-2584"><span class="linenos">2584</span></a>
+</span><span id="Parser-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2586"><a href="#Parser-2586"><span class="linenos">2586</span></a>
+</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</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="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="Parser-2589"><a href="#Parser-2589"><span class="linenos">2589</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="Parser-2590"><a href="#Parser-2590"><span class="linenos">2590</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="Parser-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="Parser-2593"><a href="#Parser-2593"><span class="linenos">2593</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="Parser-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
+</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a> <span class="p">)</span>
+</span><span id="Parser-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a>
+</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</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">Lateral</span><span class="p">]:</span>
+</span><span id="Parser-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
+</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
+</span><span id="Parser-2602"><a href="#Parser-2602"><span class="linenos">2602</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</span></a>
+</span><span id="Parser-2604"><a href="#Parser-2604"><span class="linenos">2604</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-2605"><a href="#Parser-2605"><span class="linenos">2605</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</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">LATERAL</span><span class="p">):</span>
+</span><span id="Parser-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2610"><a href="#Parser-2610"><span class="linenos">2610</span></a> <span class="n">view</span> <span class="o">=</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">VIEW</span><span class="p">)</span>
+</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</span></a> <span class="n">outer</span> <span class="o">=</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">OUTER</span><span class="p">)</span>
+</span><span id="Parser-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a>
+</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2617"><a href="#Parser-2617"><span class="linenos">2617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="Parser-2618"><a href="#Parser-2618"><span class="linenos">2618</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="ow">or</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><span id="Parser-2620"><a href="#Parser-2620"><span class="linenos">2620</span></a> <span class="p">)</span>
</span><span id="Parser-2621"><a href="#Parser-2621"><span class="linenos">2621</span></a>
-</span><span id="Parser-2622"><a href="#Parser-2622"><span class="linenos">2622</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="Parser-2623"><a href="#Parser-2623"><span class="linenos">2623</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><span id="Parser-2624"><a href="#Parser-2624"><span class="linenos">2624</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <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">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Parser-2625"><a href="#Parser-2625"><span class="linenos">2625</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</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="Parser-2626"><a href="#Parser-2626"><span class="linenos">2626</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
-</span><span id="Parser-2627"><a href="#Parser-2627"><span class="linenos">2627</span></a> <span class="p">)</span>
-</span><span id="Parser-2628"><a href="#Parser-2628"><span class="linenos">2628</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2629"><a href="#Parser-2629"><span class="linenos">2629</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
-</span><span id="Parser-2630"><a href="#Parser-2630"><span class="linenos">2630</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="Parser-2631"><a href="#Parser-2631"><span class="linenos">2631</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2632"><a href="#Parser-2632"><span class="linenos">2632</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="Parser-2633"><a href="#Parser-2633"><span class="linenos">2633</span></a>
-</span><span id="Parser-2634"><a href="#Parser-2634"><span class="linenos">2634</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="Parser-2635"><a href="#Parser-2635"><span class="linenos">2635</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="Parser-2636"><a href="#Parser-2636"><span class="linenos">2636</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
-</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
-</span><span id="Parser-2639"><a href="#Parser-2639"><span class="linenos">2639</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
-</span><span id="Parser-2640"><a href="#Parser-2640"><span class="linenos">2640</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
-</span><span id="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</span></a> <span class="p">)</span>
-</span><span id="Parser-2642"><a href="#Parser-2642"><span class="linenos">2642</span></a>
-</span><span id="Parser-2643"><a href="#Parser-2643"><span class="linenos">2643</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="Parser-2644"><a href="#Parser-2644"><span class="linenos">2644</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2645"><a href="#Parser-2645"><span class="linenos">2645</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
-</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-2647"><a href="#Parser-2647"><span class="linenos">2647</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="Parser-2648"><a href="#Parser-2648"><span class="linenos">2648</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="Parser-2649"><a href="#Parser-2649"><span class="linenos">2649</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="Parser-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a> <span class="p">)</span>
-</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a>
-</span><span id="Parser-2652"><a href="#Parser-2652"><span class="linenos">2652</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="Parser-2653"><a href="#Parser-2653"><span class="linenos">2653</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2654"><a href="#Parser-2654"><span class="linenos">2654</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">Join</span><span class="p">]:</span>
-</span><span id="Parser-2655"><a href="#Parser-2655"><span class="linenos">2655</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="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</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">Join</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_table</span><span class="p">())</span>
+</span><span id="Parser-2622"><a href="#Parser-2622"><span class="linenos">2622</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="Parser-2623"><a href="#Parser-2623"><span class="linenos">2623</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
+</span><span id="Parser-2624"><a href="#Parser-2624"><span class="linenos">2624</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2625"><a href="#Parser-2625"><span class="linenos">2625</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</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><span id="Parser-2626"><a href="#Parser-2626"><span class="linenos">2626</span></a> <span class="p">)</span>
+</span><span id="Parser-2627"><a href="#Parser-2627"><span class="linenos">2627</span></a>
+</span><span id="Parser-2628"><a href="#Parser-2628"><span class="linenos">2628</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="Parser-2629"><a href="#Parser-2629"><span class="linenos">2629</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><span id="Parser-2630"><a href="#Parser-2630"><span class="linenos">2630</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <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">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="Parser-2631"><a href="#Parser-2631"><span class="linenos">2631</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</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="Parser-2632"><a href="#Parser-2632"><span class="linenos">2632</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
+</span><span id="Parser-2633"><a href="#Parser-2633"><span class="linenos">2633</span></a> <span class="p">)</span>
+</span><span id="Parser-2634"><a href="#Parser-2634"><span class="linenos">2634</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2635"><a href="#Parser-2635"><span class="linenos">2635</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
+</span><span id="Parser-2636"><a href="#Parser-2636"><span class="linenos">2636</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="Parser-2639"><a href="#Parser-2639"><span class="linenos">2639</span></a>
+</span><span id="Parser-2640"><a href="#Parser-2640"><span class="linenos">2640</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="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="Parser-2642"><a href="#Parser-2642"><span class="linenos">2642</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2643"><a href="#Parser-2643"><span class="linenos">2643</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
+</span><span id="Parser-2644"><a href="#Parser-2644"><span class="linenos">2644</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
+</span><span id="Parser-2645"><a href="#Parser-2645"><span class="linenos">2645</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
+</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
+</span><span id="Parser-2647"><a href="#Parser-2647"><span class="linenos">2647</span></a> <span class="p">)</span>
+</span><span id="Parser-2648"><a href="#Parser-2648"><span class="linenos">2648</span></a>
+</span><span id="Parser-2649"><a href="#Parser-2649"><span class="linenos">2649</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="Parser-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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">Token</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">Token</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">Token</span><span class="p">]]:</span>
+</span><span id="Parser-2652"><a href="#Parser-2652"><span class="linenos">2652</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-2653"><a href="#Parser-2653"><span class="linenos">2653</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="Parser-2654"><a href="#Parser-2654"><span class="linenos">2654</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="Parser-2655"><a href="#Parser-2655"><span class="linenos">2655</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</span></a> <span class="p">)</span>
</span><span id="Parser-2657"><a href="#Parser-2657"><span class="linenos">2657</span></a>
-</span><span id="Parser-2658"><a href="#Parser-2658"><span class="linenos">2658</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
-</span><span id="Parser-2660"><a href="#Parser-2660"><span class="linenos">2660</span></a> <span class="n">hint</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 class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2661"><a href="#Parser-2661"><span class="linenos">2661</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
-</span><span id="Parser-2662"><a href="#Parser-2662"><span class="linenos">2662</span></a>
-</span><span id="Parser-2663"><a href="#Parser-2663"><span class="linenos">2663</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-2665"><a href="#Parser-2665"><span class="linenos">2665</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2666"><a href="#Parser-2666"><span class="linenos">2666</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2667"><a href="#Parser-2667"><span class="linenos">2667</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2658"><a href="#Parser-2658"><span class="linenos">2658</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="Parser-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2660"><a href="#Parser-2660"><span class="linenos">2660</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">Join</span><span class="p">]:</span>
+</span><span id="Parser-2661"><a href="#Parser-2661"><span class="linenos">2661</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="Parser-2662"><a href="#Parser-2662"><span class="linenos">2662</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">Join</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_table</span><span class="p">())</span>
+</span><span id="Parser-2663"><a href="#Parser-2663"><span class="linenos">2663</span></a>
+</span><span id="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-2665"><a href="#Parser-2665"><span class="linenos">2665</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
+</span><span id="Parser-2666"><a href="#Parser-2666"><span class="linenos">2666</span></a> <span class="n">hint</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 class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2667"><a href="#Parser-2667"><span class="linenos">2667</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
</span><span id="Parser-2668"><a href="#Parser-2668"><span class="linenos">2668</span></a>
-</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2670"><a href="#Parser-2670"><span class="linenos">2670</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a>
-</span><span id="Parser-2672"><a href="#Parser-2672"><span class="linenos">2672</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="Parser-2673"><a href="#Parser-2673"><span class="linenos">2673</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="Parser-2670"><a href="#Parser-2670"><span class="linenos">2670</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2672"><a href="#Parser-2672"><span class="linenos">2672</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2673"><a href="#Parser-2673"><span class="linenos">2673</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2674"><a href="#Parser-2674"><span class="linenos">2674</span></a>
-</span><span id="Parser-2675"><a href="#Parser-2675"><span class="linenos">2675</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
-</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</span></a>
-</span><span id="Parser-2677"><a href="#Parser-2677"><span class="linenos">2677</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="Parser-2678"><a href="#Parser-2678"><span class="linenos">2678</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-2679"><a href="#Parser-2679"><span class="linenos">2679</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Parser-2680"><a href="#Parser-2680"><span class="linenos">2680</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-2681"><a href="#Parser-2681"><span class="linenos">2681</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="Parser-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
-</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</span></a>
-</span><span id="Parser-2686"><a href="#Parser-2686"><span class="linenos">2686</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">ON</span><span class="p">):</span>
-</span><span id="Parser-2687"><a href="#Parser-2687"><span class="linenos">2687</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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="Parser-2688"><a href="#Parser-2688"><span class="linenos">2688</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">USING</span><span class="p">):</span>
-</span><span id="Parser-2689"><a href="#Parser-2689"><span class="linenos">2689</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-2690"><a href="#Parser-2690"><span class="linenos">2690</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
-</span><span id="Parser-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-2692"><a href="#Parser-2692"><span class="linenos">2692</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
-</span><span id="Parser-2693"><a href="#Parser-2693"><span class="linenos">2693</span></a>
-</span><span id="Parser-2694"><a href="#Parser-2694"><span class="linenos">2694</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</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">ON</span><span class="p">):</span>
-</span><span id="Parser-2695"><a href="#Parser-2695"><span class="linenos">2695</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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="Parser-2696"><a href="#Parser-2696"><span class="linenos">2696</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</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">USING</span><span class="p">):</span>
-</span><span id="Parser-2697"><a href="#Parser-2697"><span class="linenos">2697</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-2698"><a href="#Parser-2698"><span class="linenos">2698</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2699"><a href="#Parser-2699"><span class="linenos">2699</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-2701"><a href="#Parser-2701"><span class="linenos">2701</span></a>
-</span><span id="Parser-2702"><a href="#Parser-2702"><span class="linenos">2702</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2703"><a href="#Parser-2703"><span class="linenos">2703</span></a>
-</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
-</span><span id="Parser-2705"><a href="#Parser-2705"><span class="linenos">2705</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">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Parser-2706"><a href="#Parser-2706"><span class="linenos">2706</span></a>
-</span><span id="Parser-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</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="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</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="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</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="Parser-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</span></a>
-</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</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="Parser-2713"><a href="#Parser-2713"><span class="linenos">2713</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">Opclass</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
-</span><span id="Parser-2714"><a href="#Parser-2714"><span class="linenos">2714</span></a>
-</span><span id="Parser-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2716"><a href="#Parser-2716"><span class="linenos">2716</span></a>
-</span><span id="Parser-2717"><a href="#Parser-2717"><span class="linenos">2717</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
-</span><span id="Parser-2718"><a href="#Parser-2718"><span class="linenos">2718</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2719"><a href="#Parser-2719"><span class="linenos">2719</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-2720"><a href="#Parser-2720"><span class="linenos">2720</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">Index</span><span class="p">]:</span>
-</span><span id="Parser-2721"><a href="#Parser-2721"><span class="linenos">2721</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="Parser-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2724"><a href="#Parser-2724"><span class="linenos">2724</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2725"><a href="#Parser-2725"><span class="linenos">2725</span></a>
-</span><span id="Parser-2726"><a href="#Parser-2726"><span class="linenos">2726</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">ON</span><span class="p">)</span>
-</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</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">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
-</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</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="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2729"><a href="#Parser-2729"><span class="linenos">2729</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a> <span class="n">unique</span> <span class="o">=</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">UNIQUE</span><span class="p">)</span>
-</span><span id="Parser-2731"><a href="#Parser-2731"><span class="linenos">2731</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
-</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
-</span><span id="Parser-2733"><a href="#Parser-2733"><span class="linenos">2733</span></a>
-</span><span id="Parser-2734"><a href="#Parser-2734"><span class="linenos">2734</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
-</span><span id="Parser-2735"><a href="#Parser-2735"><span class="linenos">2735</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2736"><a href="#Parser-2736"><span class="linenos">2736</span></a>
-</span><span id="Parser-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="n">index</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><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2675"><a href="#Parser-2675"><span class="linenos">2675</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2677"><a href="#Parser-2677"><span class="linenos">2677</span></a>
+</span><span id="Parser-2678"><a href="#Parser-2678"><span class="linenos">2678</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
+</span><span id="Parser-2679"><a href="#Parser-2679"><span class="linenos">2679</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2680"><a href="#Parser-2680"><span class="linenos">2680</span></a>
+</span><span id="Parser-2681"><a href="#Parser-2681"><span class="linenos">2681</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
+</span><span id="Parser-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a>
+</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="Parser-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Parser-2686"><a href="#Parser-2686"><span class="linenos">2686</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-2687"><a href="#Parser-2687"><span class="linenos">2687</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-2688"><a href="#Parser-2688"><span class="linenos">2688</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-2689"><a href="#Parser-2689"><span class="linenos">2689</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="Parser-2690"><a href="#Parser-2690"><span class="linenos">2690</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
+</span><span id="Parser-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a>
+</span><span id="Parser-2692"><a href="#Parser-2692"><span class="linenos">2692</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">ON</span><span class="p">):</span>
+</span><span id="Parser-2693"><a href="#Parser-2693"><span class="linenos">2693</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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="Parser-2694"><a href="#Parser-2694"><span class="linenos">2694</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">USING</span><span class="p">):</span>
+</span><span id="Parser-2695"><a href="#Parser-2695"><span class="linenos">2695</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-2696"><a href="#Parser-2696"><span class="linenos">2696</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
+</span><span id="Parser-2697"><a href="#Parser-2697"><span class="linenos">2697</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-2698"><a href="#Parser-2698"><span class="linenos">2698</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
+</span><span id="Parser-2699"><a href="#Parser-2699"><span class="linenos">2699</span></a>
+</span><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</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">ON</span><span class="p">):</span>
+</span><span id="Parser-2701"><a href="#Parser-2701"><span class="linenos">2701</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</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="Parser-2702"><a href="#Parser-2702"><span class="linenos">2702</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</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">USING</span><span class="p">):</span>
+</span><span id="Parser-2703"><a href="#Parser-2703"><span class="linenos">2703</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2705"><a href="#Parser-2705"><span class="linenos">2705</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2706"><a href="#Parser-2706"><span class="linenos">2706</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a>
+</span><span id="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</span></a>
+</span><span id="Parser-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
+</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</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">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</span></a>
+</span><span id="Parser-2713"><a href="#Parser-2713"><span class="linenos">2713</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</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="Parser-2714"><a href="#Parser-2714"><span class="linenos">2714</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="Parser-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</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="Parser-2716"><a href="#Parser-2716"><span class="linenos">2716</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2717"><a href="#Parser-2717"><span class="linenos">2717</span></a>
+</span><span id="Parser-2718"><a href="#Parser-2718"><span class="linenos">2718</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</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="Parser-2719"><a href="#Parser-2719"><span class="linenos">2719</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">Opclass</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
+</span><span id="Parser-2720"><a href="#Parser-2720"><span class="linenos">2720</span></a>
+</span><span id="Parser-2721"><a href="#Parser-2721"><span class="linenos">2721</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a>
+</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
+</span><span id="Parser-2724"><a href="#Parser-2724"><span class="linenos">2724</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2725"><a href="#Parser-2725"><span class="linenos">2725</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-2726"><a href="#Parser-2726"><span class="linenos">2726</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">Index</span><span class="p">]:</span>
+</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2729"><a href="#Parser-2729"><span class="linenos">2729</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2731"><a href="#Parser-2731"><span class="linenos">2731</span></a>
+</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</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">ON</span><span class="p">)</span>
+</span><span id="Parser-2733"><a href="#Parser-2733"><span class="linenos">2733</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">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
+</span><span id="Parser-2734"><a href="#Parser-2734"><span class="linenos">2734</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</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="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2735"><a href="#Parser-2735"><span class="linenos">2735</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2736"><a href="#Parser-2736"><span class="linenos">2736</span></a> <span class="n">unique</span> <span class="o">=</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">UNIQUE</span><span class="p">)</span>
+</span><span id="Parser-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
+</span><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
</span><span id="Parser-2739"><a href="#Parser-2739"><span class="linenos">2739</span></a>
-</span><span id="Parser-2740"><a href="#Parser-2740"><span class="linenos">2740</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span 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">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2741"><a href="#Parser-2741"><span class="linenos">2741</span></a>
-</span><span id="Parser-2742"><a href="#Parser-2742"><span class="linenos">2742</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">L_PAREN</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="Parser-2743"><a href="#Parser-2743"><span class="linenos">2743</span></a> <span class="n">columns</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
-</span><span id="Parser-2744"><a href="#Parser-2744"><span class="linenos">2744</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2746"><a href="#Parser-2746"><span class="linenos">2746</span></a>
-</span><span id="Parser-2747"><a href="#Parser-2747"><span class="linenos">2747</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <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;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2748"><a href="#Parser-2748"><span class="linenos">2748</span></a>
-</span><span id="Parser-2749"><a href="#Parser-2749"><span class="linenos">2749</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="Parser-2750"><a href="#Parser-2750"><span class="linenos">2750</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="Parser-2751"><a href="#Parser-2751"><span class="linenos">2751</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="Parser-2752"><a href="#Parser-2752"><span class="linenos">2752</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Parser-2753"><a href="#Parser-2753"><span class="linenos">2753</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="Parser-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="Parser-2755"><a href="#Parser-2755"><span class="linenos">2755</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="Parser-2758"><a href="#Parser-2758"><span class="linenos">2758</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
-</span><span id="Parser-2759"><a href="#Parser-2759"><span class="linenos">2759</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
-</span><span id="Parser-2760"><a href="#Parser-2760"><span class="linenos">2760</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
-</span><span id="Parser-2761"><a href="#Parser-2761"><span class="linenos">2761</span></a> <span class="p">)</span>
-</span><span id="Parser-2762"><a href="#Parser-2762"><span class="linenos">2762</span></a>
-</span><span id="Parser-2763"><a href="#Parser-2763"><span class="linenos">2763</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</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">t</span><span class="o">.</span><span class="n">List</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="Parser-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
-</span><span id="Parser-2767"><a href="#Parser-2767"><span class="linenos">2767</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-2768"><a href="#Parser-2768"><span class="linenos">2768</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
-</span><span id="Parser-2770"><a href="#Parser-2770"><span class="linenos">2770</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><span id="Parser-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</span></a> <span class="p">),</span>
-</span><span id="Parser-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a> <span class="p">)</span>
-</span><span id="Parser-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a> <span class="p">)</span>
-</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-2776"><a href="#Parser-2776"><span class="linenos">2776</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
-</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-2779"><a href="#Parser-2779"><span class="linenos">2779</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-2780"><a href="#Parser-2780"><span class="linenos">2780</span></a>
-</span><span id="Parser-2781"><a href="#Parser-2781"><span class="linenos">2781</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;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
-</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</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">FOR</span><span class="p">):</span>
-</span><span id="Parser-2783"><a href="#Parser-2783"><span class="linenos">2783</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-2784"><a href="#Parser-2784"><span class="linenos">2784</span></a>
-</span><span id="Parser-2785"><a href="#Parser-2785"><span class="linenos">2785</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
-</span><span id="Parser-2786"><a href="#Parser-2786"><span class="linenos">2786</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="Parser-2787"><a href="#Parser-2787"><span class="linenos">2787</span></a>
-</span><span id="Parser-2788"><a href="#Parser-2788"><span class="linenos">2788</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-2789"><a href="#Parser-2789"><span class="linenos">2789</span></a>
-</span><span id="Parser-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</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">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="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Parser-2793"><a href="#Parser-2793"><span class="linenos">2793</span></a> <span class="ow">or</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><span id="Parser-2794"><a href="#Parser-2794"><span class="linenos">2794</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="Parser-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a> <span class="p">)</span>
-</span><span id="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</span></a>
-</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</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="n">is_db_reference</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">Table</span><span class="p">:</span>
-</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2800"><a href="#Parser-2800"><span class="linenos">2800</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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="Parser-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a>
-</span><span id="Parser-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="Parser-2805"><a href="#Parser-2805"><span class="linenos">2805</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="Parser-2806"><a href="#Parser-2806"><span class="linenos">2806</span></a> <span class="n">table</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="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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="Parser-2808"><a href="#Parser-2808"><span class="linenos">2808</span></a> <span class="p">)</span>
-</span><span id="Parser-2809"><a href="#Parser-2809"><span class="linenos">2809</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2810"><a href="#Parser-2810"><span class="linenos">2810</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="Parser-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Parser-2813"><a href="#Parser-2813"><span class="linenos">2813</span></a>
-</span><span id="Parser-2814"><a href="#Parser-2814"><span class="linenos">2814</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="Parser-2816"><a href="#Parser-2816"><span class="linenos">2816</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="Parser-2817"><a href="#Parser-2817"><span class="linenos">2817</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a>
-</span><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="Parser-2822"><a href="#Parser-2822"><span class="linenos">2822</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-2823"><a href="#Parser-2823"><span class="linenos">2823</span></a>
-</span><span id="Parser-2824"><a href="#Parser-2824"><span class="linenos">2824</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="Parser-2825"><a href="#Parser-2825"><span class="linenos">2825</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
-</span><span id="Parser-2826"><a href="#Parser-2826"><span class="linenos">2826</span></a> <span class="p">)</span>
-</span><span id="Parser-2827"><a href="#Parser-2827"><span class="linenos">2827</span></a>
-</span><span id="Parser-2828"><a href="#Parser-2828"><span class="linenos">2828</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="Parser-2829"><a href="#Parser-2829"><span class="linenos">2829</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2830"><a href="#Parser-2830"><span class="linenos">2830</span></a> <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><span id="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</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="Parser-2836"><a href="#Parser-2836"><span class="linenos">2836</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
-</span><span id="Parser-2837"><a href="#Parser-2837"><span class="linenos">2837</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="Parser-2839"><a href="#Parser-2839"><span class="linenos">2839</span></a>
-</span><span id="Parser-2840"><a href="#Parser-2840"><span class="linenos">2840</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="Parser-2841"><a href="#Parser-2841"><span class="linenos">2841</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Parser-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</span></a>
-</span><span id="Parser-2844"><a href="#Parser-2844"><span class="linenos">2844</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
-</span><span id="Parser-2845"><a href="#Parser-2845"><span class="linenos">2845</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="Parser-2846"><a href="#Parser-2846"><span class="linenos">2846</span></a> <span class="k">return</span> <span class="n">values</span>
-</span><span id="Parser-2847"><a href="#Parser-2847"><span class="linenos">2847</span></a>
-</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2849"><a href="#Parser-2849"><span class="linenos">2849</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="Parser-2850"><a href="#Parser-2850"><span class="linenos">2850</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</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;pivots&quot;</span><span class="p">):</span>
-</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="Parser-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="Parser-2740"><a href="#Parser-2740"><span class="linenos">2740</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
+</span><span id="Parser-2741"><a href="#Parser-2741"><span class="linenos">2741</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2742"><a href="#Parser-2742"><span class="linenos">2742</span></a>
+</span><span id="Parser-2743"><a href="#Parser-2743"><span class="linenos">2743</span></a> <span class="n">index</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><span id="Parser-2744"><a href="#Parser-2744"><span class="linenos">2744</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a>
+</span><span id="Parser-2746"><a href="#Parser-2746"><span class="linenos">2746</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span 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">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2747"><a href="#Parser-2747"><span class="linenos">2747</span></a>
+</span><span id="Parser-2748"><a href="#Parser-2748"><span class="linenos">2748</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">L_PAREN</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="Parser-2749"><a href="#Parser-2749"><span class="linenos">2749</span></a> <span class="n">columns</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
+</span><span id="Parser-2750"><a href="#Parser-2750"><span class="linenos">2750</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2751"><a href="#Parser-2751"><span class="linenos">2751</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2752"><a href="#Parser-2752"><span class="linenos">2752</span></a>
+</span><span id="Parser-2753"><a href="#Parser-2753"><span class="linenos">2753</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <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;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a>
+</span><span id="Parser-2755"><a href="#Parser-2755"><span class="linenos">2755</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="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="Parser-2758"><a href="#Parser-2758"><span class="linenos">2758</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Parser-2759"><a href="#Parser-2759"><span class="linenos">2759</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="Parser-2760"><a href="#Parser-2760"><span class="linenos">2760</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="Parser-2761"><a href="#Parser-2761"><span class="linenos">2761</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="Parser-2762"><a href="#Parser-2762"><span class="linenos">2762</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="Parser-2763"><a href="#Parser-2763"><span class="linenos">2763</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="Parser-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
+</span><span id="Parser-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
+</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
+</span><span id="Parser-2767"><a href="#Parser-2767"><span class="linenos">2767</span></a> <span class="p">)</span>
+</span><span id="Parser-2768"><a href="#Parser-2768"><span class="linenos">2768</span></a>
+</span><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</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">t</span><span class="o">.</span><span class="n">List</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="Parser-2770"><a href="#Parser-2770"><span class="linenos">2770</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
+</span><span id="Parser-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
+</span><span id="Parser-2776"><a href="#Parser-2776"><span class="linenos">2776</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><span id="Parser-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</span></a> <span class="p">),</span>
+</span><span id="Parser-2779"><a href="#Parser-2779"><span class="linenos">2779</span></a> <span class="p">)</span>
+</span><span id="Parser-2780"><a href="#Parser-2780"><span class="linenos">2780</span></a> <span class="p">)</span>
+</span><span id="Parser-2781"><a href="#Parser-2781"><span class="linenos">2781</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2783"><a href="#Parser-2783"><span class="linenos">2783</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
+</span><span id="Parser-2784"><a href="#Parser-2784"><span class="linenos">2784</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-2785"><a href="#Parser-2785"><span class="linenos">2785</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-2786"><a href="#Parser-2786"><span class="linenos">2786</span></a>
+</span><span id="Parser-2787"><a href="#Parser-2787"><span class="linenos">2787</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;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
+</span><span id="Parser-2788"><a href="#Parser-2788"><span class="linenos">2788</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">FOR</span><span class="p">):</span>
+</span><span id="Parser-2789"><a href="#Parser-2789"><span class="linenos">2789</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a>
+</span><span id="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
+</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2793"><a href="#Parser-2793"><span class="linenos">2793</span></a>
+</span><span id="Parser-2794"><a href="#Parser-2794"><span class="linenos">2794</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a>
+</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</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">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="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</span></a> <span class="ow">or</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><span id="Parser-2800"><a href="#Parser-2800"><span class="linenos">2800</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a> <span class="p">)</span>
+</span><span id="Parser-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a>
+</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</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="n">is_db_reference</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">Table</span><span class="p">:</span>
+</span><span id="Parser-2805"><a href="#Parser-2805"><span class="linenos">2805</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2806"><a href="#Parser-2806"><span class="linenos">2806</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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="Parser-2808"><a href="#Parser-2808"><span class="linenos">2808</span></a>
+</span><span id="Parser-2809"><a href="#Parser-2809"><span class="linenos">2809</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="Parser-2810"><a href="#Parser-2810"><span class="linenos">2810</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="Parser-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="n">table</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="Parser-2813"><a href="#Parser-2813"><span class="linenos">2813</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</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="Parser-2814"><a href="#Parser-2814"><span class="linenos">2814</span></a> <span class="p">)</span>
+</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2816"><a href="#Parser-2816"><span class="linenos">2816</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="Parser-2817"><a href="#Parser-2817"><span class="linenos">2817</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Parser-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a>
+</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="Parser-2822"><a href="#Parser-2822"><span class="linenos">2822</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Parser-2823"><a href="#Parser-2823"><span class="linenos">2823</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2824"><a href="#Parser-2824"><span class="linenos">2824</span></a>
+</span><span id="Parser-2825"><a href="#Parser-2825"><span class="linenos">2825</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="Parser-2826"><a href="#Parser-2826"><span class="linenos">2826</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-2827"><a href="#Parser-2827"><span class="linenos">2827</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="Parser-2828"><a href="#Parser-2828"><span class="linenos">2828</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-2829"><a href="#Parser-2829"><span class="linenos">2829</span></a>
+</span><span id="Parser-2830"><a href="#Parser-2830"><span class="linenos">2830</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="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
+</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a> <span class="p">)</span>
+</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</span></a>
+</span><span id="Parser-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2836"><a href="#Parser-2836"><span class="linenos">2836</span></a> <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><span id="Parser-2837"><a href="#Parser-2837"><span class="linenos">2837</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-2839"><a href="#Parser-2839"><span class="linenos">2839</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2840"><a href="#Parser-2840"><span class="linenos">2840</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2841"><a href="#Parser-2841"><span class="linenos">2841</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="Parser-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
+</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="Parser-2844"><a href="#Parser-2844"><span class="linenos">2844</span></a> <span class="k">return</span> <span class="n">lateral</span>
+</span><span id="Parser-2845"><a href="#Parser-2845"><span class="linenos">2845</span></a>
+</span><span id="Parser-2846"><a href="#Parser-2846"><span class="linenos">2846</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="Parser-2847"><a href="#Parser-2847"><span class="linenos">2847</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a> <span class="k">return</span> <span class="n">unnest</span>
+</span><span id="Parser-2849"><a href="#Parser-2849"><span class="linenos">2849</span></a>
+</span><span id="Parser-2850"><a href="#Parser-2850"><span class="linenos">2850</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
+</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="Parser-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="Parser-2853"><a href="#Parser-2853"><span class="linenos">2853</span></a>
-</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2855"><a href="#Parser-2855"><span class="linenos">2855</span></a> <span class="n">bracket</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">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
-</span><span id="Parser-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="n">bracket</span>
-</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
-</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="bp">self</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 class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
-</span><span id="Parser-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a> <span class="p">),</span>
-</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a> <span class="p">)</span>
-</span><span id="Parser-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a>
-</span><span id="Parser-2864"><a href="#Parser-2864"><span class="linenos">2864</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="Parser-2865"><a href="#Parser-2865"><span class="linenos">2865</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a>
-</span><span id="Parser-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
-</span><span id="Parser-2868"><a href="#Parser-2868"><span class="linenos">2868</span></a>
-</span><span id="Parser-2869"><a href="#Parser-2869"><span class="linenos">2869</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
-</span><span id="Parser-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
-</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</span></a>
-</span><span id="Parser-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2855"><a href="#Parser-2855"><span class="linenos">2855</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</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;pivots&quot;</span><span class="p">):</span>
+</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="Parser-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a>
+</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a> <span class="n">bracket</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">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="Parser-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
+</span><span id="Parser-2864"><a href="#Parser-2864"><span class="linenos">2864</span></a> <span class="n">bracket</span>
+</span><span id="Parser-2865"><a href="#Parser-2865"><span class="linenos">2865</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
+</span><span id="Parser-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a> <span class="bp">self</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 class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
+</span><span id="Parser-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a> <span class="p">),</span>
+</span><span id="Parser-2868"><a href="#Parser-2868"><span class="linenos">2868</span></a> <span class="p">)</span>
+</span><span id="Parser-2869"><a href="#Parser-2869"><span class="linenos">2869</span></a>
+</span><span id="Parser-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a>
+</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
</span><span id="Parser-2874"><a href="#Parser-2874"><span class="linenos">2874</span></a>
-</span><span id="Parser-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2877"><a href="#Parser-2877"><span class="linenos">2877</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-2878"><a href="#Parser-2878"><span class="linenos">2878</span></a>
-</span><span id="Parser-2879"><a href="#Parser-2879"><span class="linenos">2879</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</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;AT&quot;</span><span class="p">):</span>
-</span><span id="Parser-2880"><a href="#Parser-2880"><span class="linenos">2880</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="Parser-2881"><a href="#Parser-2881"><span class="linenos">2881</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</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><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="p">)</span>
-</span><span id="Parser-2883"><a href="#Parser-2883"><span class="linenos">2883</span></a>
-</span><span id="Parser-2884"><a href="#Parser-2884"><span class="linenos">2884</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
-</span><span id="Parser-2885"><a href="#Parser-2885"><span class="linenos">2885</span></a>
-</span><span id="Parser-2886"><a href="#Parser-2886"><span class="linenos">2886</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</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;pivots&quot;</span><span class="p">):</span>
-</span><span id="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="Parser-2888"><a href="#Parser-2888"><span class="linenos">2888</span></a>
-</span><span id="Parser-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="Parser-2890"><a href="#Parser-2890"><span class="linenos">2890</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+</span><span id="Parser-2877"><a href="#Parser-2877"><span class="linenos">2877</span></a>
+</span><span id="Parser-2878"><a href="#Parser-2878"><span class="linenos">2878</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="Parser-2879"><a href="#Parser-2879"><span class="linenos">2879</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2880"><a href="#Parser-2880"><span class="linenos">2880</span></a>
+</span><span id="Parser-2881"><a href="#Parser-2881"><span class="linenos">2881</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2883"><a href="#Parser-2883"><span class="linenos">2883</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-2884"><a href="#Parser-2884"><span class="linenos">2884</span></a>
+</span><span id="Parser-2885"><a href="#Parser-2885"><span class="linenos">2885</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</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;AT&quot;</span><span class="p">):</span>
+</span><span id="Parser-2886"><a href="#Parser-2886"><span class="linenos">2886</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="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</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><span id="Parser-2888"><a href="#Parser-2888"><span class="linenos">2888</span></a> <span class="p">)</span>
+</span><span id="Parser-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a>
+</span><span id="Parser-2890"><a href="#Parser-2890"><span class="linenos">2890</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
</span><span id="Parser-2891"><a href="#Parser-2891"><span class="linenos">2891</span></a>
-</span><span id="Parser-2892"><a href="#Parser-2892"><span class="linenos">2892</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="Parser-2893"><a href="#Parser-2893"><span class="linenos">2893</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
-</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</span></a>
-</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
-</span><span id="Parser-2897"><a href="#Parser-2897"><span class="linenos">2897</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-2898"><a href="#Parser-2898"><span class="linenos">2898</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
-</span><span id="Parser-2899"><a href="#Parser-2899"><span class="linenos">2899</span></a>
-</span><span id="Parser-2900"><a href="#Parser-2900"><span class="linenos">2900</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
-</span><span id="Parser-2901"><a href="#Parser-2901"><span class="linenos">2901</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a>
-</span><span id="Parser-2904"><a href="#Parser-2904"><span class="linenos">2904</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2892"><a href="#Parser-2892"><span class="linenos">2892</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</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;pivots&quot;</span><span class="p">):</span>
+</span><span id="Parser-2893"><a href="#Parser-2893"><span class="linenos">2893</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="Parser-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a>
+</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2897"><a href="#Parser-2897"><span class="linenos">2897</span></a>
+</span><span id="Parser-2898"><a href="#Parser-2898"><span class="linenos">2898</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="Parser-2899"><a href="#Parser-2899"><span class="linenos">2899</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-2900"><a href="#Parser-2900"><span class="linenos">2900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
+</span><span id="Parser-2901"><a href="#Parser-2901"><span class="linenos">2901</span></a>
+</span><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
+</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-2904"><a href="#Parser-2904"><span class="linenos">2904</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="Parser-2905"><a href="#Parser-2905"><span class="linenos">2905</span></a>
-</span><span id="Parser-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a> <span class="k">def</span> <span class="nf">_parse_version</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">Version</span><span class="p">]:</span>
-</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</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">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="Parser-2908"><a href="#Parser-2908"><span class="linenos">2908</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
-</span><span id="Parser-2909"><a href="#Parser-2909"><span class="linenos">2909</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">VERSION_SNAPSHOT</span><span class="p">):</span>
-</span><span id="Parser-2910"><a href="#Parser-2910"><span class="linenos">2910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
-</span><span id="Parser-2911"><a href="#Parser-2911"><span class="linenos">2911</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2912"><a href="#Parser-2912"><span class="linenos">2912</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2913"><a href="#Parser-2913"><span class="linenos">2913</span></a>
-</span><span id="Parser-2914"><a href="#Parser-2914"><span class="linenos">2914</span></a> <span class="k">if</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="Parser-2915"><a href="#Parser-2915"><span class="linenos">2915</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-2916"><a href="#Parser-2916"><span class="linenos">2916</span></a> <span class="n">start</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="Parser-2917"><a href="#Parser-2917"><span class="linenos">2917</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="Parser-2918"><a href="#Parser-2918"><span class="linenos">2918</span></a> <span class="n">end</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="Parser-2919"><a href="#Parser-2919"><span class="linenos">2919</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2920"><a href="#Parser-2920"><span class="linenos">2920</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
-</span><span id="Parser-2921"><a href="#Parser-2921"><span class="linenos">2921</span></a> <span class="p">)</span>
-</span><span id="Parser-2922"><a href="#Parser-2922"><span class="linenos">2922</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="Parser-2923"><a href="#Parser-2923"><span class="linenos">2923</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
-</span><span id="Parser-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a> <span class="n">expression</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="Parser-2925"><a href="#Parser-2925"><span class="linenos">2925</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</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="Parser-2926"><a href="#Parser-2926"><span class="linenos">2926</span></a> <span class="p">)</span>
-</span><span id="Parser-2927"><a href="#Parser-2927"><span class="linenos">2927</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="Parser-2928"><a href="#Parser-2928"><span class="linenos">2928</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
-</span><span id="Parser-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="Parser-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
-</span><span id="Parser-2933"><a href="#Parser-2933"><span class="linenos">2933</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Parser-2934"><a href="#Parser-2934"><span class="linenos">2934</span></a>
-</span><span id="Parser-2935"><a href="#Parser-2935"><span class="linenos">2935</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">Version</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 class="p">)</span>
-</span><span id="Parser-2936"><a href="#Parser-2936"><span class="linenos">2936</span></a>
-</span><span id="Parser-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Unnest</span><span class="p">]:</span>
-</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
-</span><span id="Parser-2939"><a href="#Parser-2939"><span class="linenos">2939</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
+</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2908"><a href="#Parser-2908"><span class="linenos">2908</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-2909"><a href="#Parser-2909"><span class="linenos">2909</span></a>
+</span><span id="Parser-2910"><a href="#Parser-2910"><span class="linenos">2910</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2911"><a href="#Parser-2911"><span class="linenos">2911</span></a>
+</span><span id="Parser-2912"><a href="#Parser-2912"><span class="linenos">2912</span></a> <span class="k">def</span> <span class="nf">_parse_version</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">Version</span><span class="p">]:</span>
+</span><span id="Parser-2913"><a href="#Parser-2913"><span class="linenos">2913</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">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-2914"><a href="#Parser-2914"><span class="linenos">2914</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
+</span><span id="Parser-2915"><a href="#Parser-2915"><span class="linenos">2915</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">VERSION_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-2916"><a href="#Parser-2916"><span class="linenos">2916</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
+</span><span id="Parser-2917"><a href="#Parser-2917"><span class="linenos">2917</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2918"><a href="#Parser-2918"><span class="linenos">2918</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2919"><a href="#Parser-2919"><span class="linenos">2919</span></a>
+</span><span id="Parser-2920"><a href="#Parser-2920"><span class="linenos">2920</span></a> <span class="k">if</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="Parser-2921"><a href="#Parser-2921"><span class="linenos">2921</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-2922"><a href="#Parser-2922"><span class="linenos">2922</span></a> <span class="n">start</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="Parser-2923"><a href="#Parser-2923"><span class="linenos">2923</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="Parser-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a> <span class="n">end</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="Parser-2925"><a href="#Parser-2925"><span class="linenos">2925</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2926"><a href="#Parser-2926"><span class="linenos">2926</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
+</span><span id="Parser-2927"><a href="#Parser-2927"><span class="linenos">2927</span></a> <span class="p">)</span>
+</span><span id="Parser-2928"><a href="#Parser-2928"><span class="linenos">2928</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="Parser-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
+</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="n">expression</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="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</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="Parser-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a> <span class="p">)</span>
+</span><span id="Parser-2933"><a href="#Parser-2933"><span class="linenos">2933</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="Parser-2934"><a href="#Parser-2934"><span class="linenos">2934</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
+</span><span id="Parser-2935"><a href="#Parser-2935"><span class="linenos">2935</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2936"><a href="#Parser-2936"><span class="linenos">2936</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
+</span><span id="Parser-2939"><a href="#Parser-2939"><span class="linenos">2939</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="Parser-2940"><a href="#Parser-2940"><span class="linenos">2940</span></a>
-</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</span></a> <span class="n">expressions</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_equality</span><span class="p">)</span>
-</span><span id="Parser-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
-</span><span id="Parser-2943"><a href="#Parser-2943"><span class="linenos">2943</span></a>
-</span><span id="Parser-2944"><a href="#Parser-2944"><span class="linenos">2944</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2945"><a href="#Parser-2945"><span class="linenos">2945</span></a>
-</span><span id="Parser-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</span></a> <span class="k">if</span> <span class="n">alias</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;columns&quot;</span><span class="p">):</span>
-</span><span id="Parser-2949"><a href="#Parser-2949"><span class="linenos">2949</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;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
-</span><span id="Parser-2950"><a href="#Parser-2950"><span class="linenos">2950</span></a>
-</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
-</span><span id="Parser-2952"><a href="#Parser-2952"><span class="linenos">2952</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2953"><a href="#Parser-2953"><span class="linenos">2953</span></a>
-</span><span id="Parser-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</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;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
-</span><span id="Parser-2956"><a href="#Parser-2956"><span class="linenos">2956</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="Parser-2957"><a href="#Parser-2957"><span class="linenos">2957</span></a>
-</span><span id="Parser-2958"><a href="#Parser-2958"><span class="linenos">2958</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="Parser-2959"><a href="#Parser-2959"><span class="linenos">2959</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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a> <span class="n">offset</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><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</span></a> <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">UNNEST_OFFSET_ALIAS_TOKENS</span>
-</span><span id="Parser-2962"><a href="#Parser-2962"><span class="linenos">2962</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</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">Version</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 class="p">)</span>
+</span><span id="Parser-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a>
+</span><span id="Parser-2943"><a href="#Parser-2943"><span class="linenos">2943</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Unnest</span><span class="p">]:</span>
+</span><span id="Parser-2944"><a href="#Parser-2944"><span class="linenos">2944</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
+</span><span id="Parser-2945"><a href="#Parser-2945"><span class="linenos">2945</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a>
+</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="n">expressions</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_equality</span><span class="p">)</span>
+</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
+</span><span id="Parser-2949"><a href="#Parser-2949"><span class="linenos">2949</span></a>
+</span><span id="Parser-2950"><a href="#Parser-2950"><span class="linenos">2950</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</span></a>
+</span><span id="Parser-2952"><a href="#Parser-2952"><span class="linenos">2952</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2953"><a href="#Parser-2953"><span class="linenos">2953</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="Parser-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a> <span class="k">if</span> <span class="n">alias</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;columns&quot;</span><span class="p">):</span>
+</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</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;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
+</span><span id="Parser-2956"><a href="#Parser-2956"><span class="linenos">2956</span></a>
+</span><span id="Parser-2957"><a href="#Parser-2957"><span class="linenos">2957</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
+</span><span id="Parser-2958"><a href="#Parser-2958"><span class="linenos">2958</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2959"><a href="#Parser-2959"><span class="linenos">2959</span></a>
+</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</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;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
+</span><span id="Parser-2962"><a href="#Parser-2962"><span class="linenos">2962</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="Parser-2963"><a href="#Parser-2963"><span class="linenos">2963</span></a>
-</span><span id="Parser-2964"><a href="#Parser-2964"><span class="linenos">2964</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">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
-</span><span id="Parser-2965"><a href="#Parser-2965"><span class="linenos">2965</span></a>
-</span><span id="Parser-2966"><a href="#Parser-2966"><span class="linenos">2966</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</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">Values</span><span class="p">]:</span>
-</span><span id="Parser-2967"><a href="#Parser-2967"><span class="linenos">2967</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
-</span><span id="Parser-2968"><a href="#Parser-2968"><span class="linenos">2968</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</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">VALUES</span><span class="p">):</span>
-</span><span id="Parser-2969"><a href="#Parser-2969"><span class="linenos">2969</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2970"><a href="#Parser-2970"><span class="linenos">2970</span></a>
-</span><span id="Parser-2971"><a href="#Parser-2971"><span class="linenos">2971</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_value</span><span class="p">)</span>
-</span><span id="Parser-2972"><a href="#Parser-2972"><span class="linenos">2972</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="Parser-2973"><a href="#Parser-2973"><span class="linenos">2973</span></a>
-</span><span id="Parser-2974"><a href="#Parser-2974"><span class="linenos">2974</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="Parser-2975"><a href="#Parser-2975"><span class="linenos">2975</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2964"><a href="#Parser-2964"><span class="linenos">2964</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="Parser-2965"><a href="#Parser-2965"><span class="linenos">2965</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">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-2966"><a href="#Parser-2966"><span class="linenos">2966</span></a> <span class="n">offset</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><span id="Parser-2967"><a href="#Parser-2967"><span class="linenos">2967</span></a> <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">UNNEST_OFFSET_ALIAS_TOKENS</span>
+</span><span id="Parser-2968"><a href="#Parser-2968"><span class="linenos">2968</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="Parser-2969"><a href="#Parser-2969"><span class="linenos">2969</span></a>
+</span><span id="Parser-2970"><a href="#Parser-2970"><span class="linenos">2970</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">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="Parser-2971"><a href="#Parser-2971"><span class="linenos">2971</span></a>
+</span><span id="Parser-2972"><a href="#Parser-2972"><span class="linenos">2972</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</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">Values</span><span class="p">]:</span>
+</span><span id="Parser-2973"><a href="#Parser-2973"><span class="linenos">2973</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
+</span><span id="Parser-2974"><a href="#Parser-2974"><span class="linenos">2974</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</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">VALUES</span><span class="p">):</span>
+</span><span id="Parser-2975"><a href="#Parser-2975"><span class="linenos">2975</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2976"><a href="#Parser-2976"><span class="linenos">2976</span></a>
-</span><span id="Parser-2977"><a href="#Parser-2977"><span class="linenos">2977</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="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="Parser-2979"><a href="#Parser-2979"><span class="linenos">2979</span></a> <span class="p">)</span>
-</span><span id="Parser-2980"><a href="#Parser-2980"><span class="linenos">2980</span></a>
-</span><span id="Parser-2981"><a href="#Parser-2981"><span class="linenos">2981</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</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">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">TableSample</span><span class="p">]:</span>
-</span><span id="Parser-2982"><a href="#Parser-2982"><span class="linenos">2982</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="Parser-2983"><a href="#Parser-2983"><span class="linenos">2983</span></a> <span class="n">as_modifier</span> <span class="ow">and</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;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-2984"><a href="#Parser-2984"><span class="linenos">2984</span></a> <span class="p">):</span>
-</span><span id="Parser-2985"><a href="#Parser-2985"><span class="linenos">2985</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2977"><a href="#Parser-2977"><span class="linenos">2977</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_value</span><span class="p">)</span>
+</span><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="Parser-2979"><a href="#Parser-2979"><span class="linenos">2979</span></a>
+</span><span id="Parser-2980"><a href="#Parser-2980"><span class="linenos">2980</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="Parser-2981"><a href="#Parser-2981"><span class="linenos">2981</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a>
+</span><span id="Parser-2983"><a href="#Parser-2983"><span class="linenos">2983</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="Parser-2984"><a href="#Parser-2984"><span class="linenos">2984</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="Parser-2985"><a href="#Parser-2985"><span class="linenos">2985</span></a> <span class="p">)</span>
</span><span id="Parser-2986"><a href="#Parser-2986"><span class="linenos">2986</span></a>
-</span><span id="Parser-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2992"><a href="#Parser-2992"><span class="linenos">2992</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a>
-</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</span></a> <span class="n">matched_l_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
-</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a>
-</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
-</span><span id="Parser-2998"><a href="#Parser-2998"><span class="linenos">2998</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2999"><a href="#Parser-2999"><span class="linenos">2999</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_primary</span><span class="p">)</span>
-</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3002"><a href="#Parser-3002"><span class="linenos">3002</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3003"><a href="#Parser-3003"><span class="linenos">3003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
-</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</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">NUMBER</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="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <span class="p">)</span>
-</span><span id="Parser-3007"><a href="#Parser-3007"><span class="linenos">3007</span></a>
-</span><span id="Parser-3008"><a href="#Parser-3008"><span class="linenos">3008</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;BUCKET&quot;</span><span class="p">):</span>
-</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a> <span class="n">bucket_numerator</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="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</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="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</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">ON</span><span class="p">)</span>
-</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-3014"><a href="#Parser-3014"><span class="linenos">3014</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">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
-</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-3016"><a href="#Parser-3016"><span class="linenos">3016</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">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
-</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-3018"><a href="#Parser-3018"><span class="linenos">3018</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3019"><a href="#Parser-3019"><span class="linenos">3019</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-3020"><a href="#Parser-3020"><span class="linenos">3020</span></a>
-</span><span id="Parser-3021"><a href="#Parser-3021"><span class="linenos">3021</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="Parser-3022"><a href="#Parser-3022"><span class="linenos">3022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3023"><a href="#Parser-3023"><span class="linenos">3023</span></a>
-</span><span id="Parser-3024"><a href="#Parser-3024"><span class="linenos">3024</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a> <span class="n">seed</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="Parser-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
-</span><span id="Parser-3029"><a href="#Parser-3029"><span class="linenos">3029</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
-</span><span id="Parser-3030"><a href="#Parser-3030"><span class="linenos">3030</span></a>
-</span><span id="Parser-3031"><a href="#Parser-3031"><span class="linenos">3031</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="Parser-3032"><a href="#Parser-3032"><span class="linenos">3032</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="Parser-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3034"><a href="#Parser-3034"><span class="linenos">3034</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
-</span><span id="Parser-3036"><a href="#Parser-3036"><span class="linenos">3036</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
-</span><span id="Parser-3037"><a href="#Parser-3037"><span class="linenos">3037</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
-</span><span id="Parser-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="Parser-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a> <span class="p">)</span>
-</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</span></a>
-</span><span id="Parser-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
-</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-3045"><a href="#Parser-3045"><span class="linenos">3045</span></a>
-</span><span id="Parser-3046"><a href="#Parser-3046"><span class="linenos">3046</span></a> <span class="k">def</span> <span class="nf">_parse_joins</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
-</span><span id="Parser-3047"><a href="#Parser-3047"><span class="linenos">3047</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</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">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">TableSample</span><span class="p">]:</span>
+</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
+</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</span></a> <span class="n">as_modifier</span> <span class="ow">and</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;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="p">):</span>
+</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2992"><a href="#Parser-2992"><span class="linenos">2992</span></a>
+</span><span id="Parser-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2998"><a href="#Parser-2998"><span class="linenos">2998</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2999"><a href="#Parser-2999"><span class="linenos">2999</span></a>
+</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="n">matched_l_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-3002"><a href="#Parser-3002"><span class="linenos">3002</span></a>
+</span><span id="Parser-3003"><a href="#Parser-3003"><span class="linenos">3003</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
+</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</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_primary</span><span class="p">)</span>
+</span><span id="Parser-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3007"><a href="#Parser-3007"><span class="linenos">3007</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3008"><a href="#Parser-3008"><span class="linenos">3008</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
+</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</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">NUMBER</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="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</span></a> <span class="p">)</span>
+</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a>
+</span><span id="Parser-3014"><a href="#Parser-3014"><span class="linenos">3014</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;BUCKET&quot;</span><span class="p">):</span>
+</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="n">bucket_numerator</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="Parser-3016"><a href="#Parser-3016"><span class="linenos">3016</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</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="Parser-3018"><a href="#Parser-3018"><span class="linenos">3018</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">ON</span><span class="p">)</span>
+</span><span id="Parser-3019"><a href="#Parser-3019"><span class="linenos">3019</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-3020"><a href="#Parser-3020"><span class="linenos">3020</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">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
+</span><span id="Parser-3021"><a href="#Parser-3021"><span class="linenos">3021</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-3022"><a href="#Parser-3022"><span class="linenos">3022</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">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
+</span><span id="Parser-3023"><a href="#Parser-3023"><span class="linenos">3023</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a>
+</span><span id="Parser-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3029"><a href="#Parser-3029"><span class="linenos">3029</span></a>
+</span><span id="Parser-3030"><a href="#Parser-3030"><span class="linenos">3030</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3031"><a href="#Parser-3031"><span class="linenos">3031</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3032"><a href="#Parser-3032"><span class="linenos">3032</span></a> <span class="n">seed</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="Parser-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3034"><a href="#Parser-3034"><span class="linenos">3034</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
+</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
+</span><span id="Parser-3036"><a href="#Parser-3036"><span class="linenos">3036</span></a>
+</span><span id="Parser-3037"><a href="#Parser-3037"><span class="linenos">3037</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="Parser-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Parser-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
+</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
+</span><span id="Parser-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
+</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-3045"><a href="#Parser-3045"><span class="linenos">3045</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="Parser-3046"><a href="#Parser-3046"><span class="linenos">3046</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="Parser-3047"><a href="#Parser-3047"><span class="linenos">3047</span></a> <span class="p">)</span>
</span><span id="Parser-3048"><a href="#Parser-3048"><span class="linenos">3048</span></a>
-</span><span id="Parser-3049"><a href="#Parser-3049"><span class="linenos">3049</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
-</span><span id="Parser-3050"><a href="#Parser-3050"><span class="linenos">3050</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</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">Pivot</span><span class="p">:</span>
-</span><span id="Parser-3051"><a href="#Parser-3051"><span class="linenos">3051</span></a> <span class="k">def</span> <span class="nf">_parse_on</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="Parser-3052"><a href="#Parser-3052"><span class="linenos">3052</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="Parser-3053"><a href="#Parser-3053"><span class="linenos">3053</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="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">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Parser-3049"><a href="#Parser-3049"><span class="linenos">3049</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
+</span><span id="Parser-3050"><a href="#Parser-3050"><span class="linenos">3050</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-3051"><a href="#Parser-3051"><span class="linenos">3051</span></a>
+</span><span id="Parser-3052"><a href="#Parser-3052"><span class="linenos">3052</span></a> <span class="k">def</span> <span class="nf">_parse_joins</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">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
+</span><span id="Parser-3053"><a href="#Parser-3053"><span class="linenos">3053</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-3054"><a href="#Parser-3054"><span class="linenos">3054</span></a>
-</span><span id="Parser-3055"><a href="#Parser-3055"><span class="linenos">3055</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</span></a> <span class="n">expressions</span> <span class="o">=</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">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
-</span><span id="Parser-3057"><a href="#Parser-3057"><span class="linenos">3057</span></a> <span class="n">using</span> <span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-3058"><a href="#Parser-3058"><span class="linenos">3058</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
-</span><span id="Parser-3059"><a href="#Parser-3059"><span class="linenos">3059</span></a> <span class="p">)</span>
-</span><span id="Parser-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
-</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</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="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</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 class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
-</span><span id="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</span></a> <span class="p">)</span>
-</span><span id="Parser-3064"><a href="#Parser-3064"><span class="linenos">3064</span></a>
-</span><span id="Parser-3065"><a href="#Parser-3065"><span class="linenos">3065</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</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">In</span><span class="p">:</span>
-</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</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="Parser-3067"><a href="#Parser-3067"><span class="linenos">3067</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="Parser-3068"><a href="#Parser-3068"><span class="linenos">3068</span></a>
-</span><span id="Parser-3069"><a href="#Parser-3069"><span class="linenos">3069</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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-3072"><a href="#Parser-3072"><span class="linenos">3072</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">PivotAlias</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-3073"><a href="#Parser-3073"><span class="linenos">3073</span></a>
-</span><span id="Parser-3074"><a href="#Parser-3074"><span class="linenos">3074</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3075"><a href="#Parser-3075"><span class="linenos">3075</span></a>
-</span><span id="Parser-3076"><a href="#Parser-3076"><span class="linenos">3076</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3077"><a href="#Parser-3077"><span class="linenos">3077</span></a>
-</span><span id="Parser-3078"><a href="#Parser-3078"><span class="linenos">3078</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</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;Expecting IN (&quot;</span><span class="p">)</span>
-</span><span id="Parser-3080"><a href="#Parser-3080"><span class="linenos">3080</span></a>
-</span><span id="Parser-3081"><a href="#Parser-3081"><span class="linenos">3081</span></a> <span class="n">aliased_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="n">_parse_aliased_expression</span><span class="p">)</span>
-</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a>
-</span><span id="Parser-3083"><a href="#Parser-3083"><span class="linenos">3083</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3084"><a href="#Parser-3084"><span class="linenos">3084</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">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
-</span><span id="Parser-3085"><a href="#Parser-3085"><span class="linenos">3085</span></a>
-</span><span id="Parser-3086"><a href="#Parser-3086"><span class="linenos">3086</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</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">Pivot</span><span class="p">]:</span>
-</span><span id="Parser-3087"><a href="#Parser-3087"><span class="linenos">3087</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3088"><a href="#Parser-3088"><span class="linenos">3088</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3089"><a href="#Parser-3089"><span class="linenos">3089</span></a>
-</span><span id="Parser-3090"><a href="#Parser-3090"><span class="linenos">3090</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">PIVOT</span><span class="p">):</span>
-</span><span id="Parser-3091"><a href="#Parser-3091"><span class="linenos">3091</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3092"><a href="#Parser-3092"><span class="linenos">3092</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">UNPIVOT</span><span class="p">):</span>
-</span><span id="Parser-3093"><a href="#Parser-3093"><span class="linenos">3093</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3094"><a href="#Parser-3094"><span class="linenos">3094</span></a>
-</span><span id="Parser-3095"><a href="#Parser-3095"><span class="linenos">3095</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
-</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</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;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-3097"><a href="#Parser-3097"><span class="linenos">3097</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3098"><a href="#Parser-3098"><span class="linenos">3098</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;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-3099"><a href="#Parser-3099"><span class="linenos">3099</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3100"><a href="#Parser-3100"><span class="linenos">3100</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</span></a>
-</span><span id="Parser-3103"><a href="#Parser-3103"><span class="linenos">3103</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a>
-</span><span id="Parser-3105"><a href="#Parser-3105"><span class="linenos">3105</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3055"><a href="#Parser-3055"><span class="linenos">3055</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
+</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</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">Pivot</span><span class="p">:</span>
+</span><span id="Parser-3057"><a href="#Parser-3057"><span class="linenos">3057</span></a> <span class="k">def</span> <span class="nf">_parse_on</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="Parser-3058"><a href="#Parser-3058"><span class="linenos">3058</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="Parser-3059"><a href="#Parser-3059"><span class="linenos">3059</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="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">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Parser-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a>
+</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</span></a> <span class="n">expressions</span> <span class="o">=</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">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
+</span><span id="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</span></a> <span class="n">using</span> <span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-3064"><a href="#Parser-3064"><span class="linenos">3064</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
+</span><span id="Parser-3065"><a href="#Parser-3065"><span class="linenos">3065</span></a> <span class="p">)</span>
+</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="Parser-3067"><a href="#Parser-3067"><span class="linenos">3067</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="Parser-3068"><a href="#Parser-3068"><span class="linenos">3068</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</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 class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
+</span><span id="Parser-3069"><a href="#Parser-3069"><span class="linenos">3069</span></a> <span class="p">)</span>
+</span><span id="Parser-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a>
+</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</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">In</span><span class="p">:</span>
+</span><span id="Parser-3072"><a href="#Parser-3072"><span class="linenos">3072</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</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="Parser-3073"><a href="#Parser-3073"><span class="linenos">3073</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="Parser-3074"><a href="#Parser-3074"><span class="linenos">3074</span></a>
+</span><span id="Parser-3075"><a href="#Parser-3075"><span class="linenos">3075</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">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-3076"><a href="#Parser-3076"><span class="linenos">3076</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-3077"><a href="#Parser-3077"><span class="linenos">3077</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-3078"><a href="#Parser-3078"><span class="linenos">3078</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">PivotAlias</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</span></a>
+</span><span id="Parser-3080"><a href="#Parser-3080"><span class="linenos">3080</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3081"><a href="#Parser-3081"><span class="linenos">3081</span></a>
+</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3083"><a href="#Parser-3083"><span class="linenos">3083</span></a>
+</span><span id="Parser-3084"><a href="#Parser-3084"><span class="linenos">3084</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_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3085"><a href="#Parser-3085"><span class="linenos">3085</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;Expecting IN (&quot;</span><span class="p">)</span>
+</span><span id="Parser-3086"><a href="#Parser-3086"><span class="linenos">3086</span></a>
+</span><span id="Parser-3087"><a href="#Parser-3087"><span class="linenos">3087</span></a> <span class="n">aliased_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="n">_parse_aliased_expression</span><span class="p">)</span>
+</span><span id="Parser-3088"><a href="#Parser-3088"><span class="linenos">3088</span></a>
+</span><span id="Parser-3089"><a href="#Parser-3089"><span class="linenos">3089</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3090"><a href="#Parser-3090"><span class="linenos">3090</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">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
+</span><span id="Parser-3091"><a href="#Parser-3091"><span class="linenos">3091</span></a>
+</span><span id="Parser-3092"><a href="#Parser-3092"><span class="linenos">3092</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</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">Pivot</span><span class="p">]:</span>
+</span><span id="Parser-3093"><a href="#Parser-3093"><span class="linenos">3093</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3094"><a href="#Parser-3094"><span class="linenos">3094</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3095"><a href="#Parser-3095"><span class="linenos">3095</span></a>
+</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</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">PIVOT</span><span class="p">):</span>
+</span><span id="Parser-3097"><a href="#Parser-3097"><span class="linenos">3097</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3098"><a href="#Parser-3098"><span class="linenos">3098</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">UNPIVOT</span><span class="p">):</span>
+</span><span id="Parser-3099"><a href="#Parser-3099"><span class="linenos">3099</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3100"><a href="#Parser-3100"><span class="linenos">3100</span></a>
+</span><span id="Parser-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
+</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</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;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-3103"><a href="#Parser-3103"><span class="linenos">3103</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3104"><a href="#Parser-3104"><span class="linenos">3104</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;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-3105"><a href="#Parser-3105"><span class="linenos">3105</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3107"><a href="#Parser-3107"><span class="linenos">3107</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3108"><a href="#Parser-3108"><span class="linenos">3108</span></a>
-</span><span id="Parser-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</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_column</span><span class="p">)</span>
-</span><span id="Parser-3111"><a href="#Parser-3111"><span class="linenos">3111</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3112"><a href="#Parser-3112"><span class="linenos">3112</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
-</span><span id="Parser-3113"><a href="#Parser-3113"><span class="linenos">3113</span></a>
-</span><span id="Parser-3114"><a href="#Parser-3114"><span class="linenos">3114</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3115"><a href="#Parser-3115"><span class="linenos">3115</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;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
-</span><span id="Parser-3116"><a href="#Parser-3116"><span class="linenos">3116</span></a>
-</span><span id="Parser-3117"><a href="#Parser-3117"><span class="linenos">3117</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="Parser-3118"><a href="#Parser-3118"><span class="linenos">3118</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;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="Parser-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</span></a>
+</span><span id="Parser-3111"><a href="#Parser-3111"><span class="linenos">3111</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3112"><a href="#Parser-3112"><span class="linenos">3112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3113"><a href="#Parser-3113"><span class="linenos">3113</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3114"><a href="#Parser-3114"><span class="linenos">3114</span></a>
+</span><span id="Parser-3115"><a href="#Parser-3115"><span class="linenos">3115</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="Parser-3116"><a href="#Parser-3116"><span class="linenos">3116</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_column</span><span class="p">)</span>
+</span><span id="Parser-3117"><a href="#Parser-3117"><span class="linenos">3117</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3118"><a href="#Parser-3118"><span class="linenos">3118</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
</span><span id="Parser-3119"><a href="#Parser-3119"><span class="linenos">3119</span></a>
-</span><span id="Parser-3120"><a href="#Parser-3120"><span class="linenos">3120</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
-</span><span id="Parser-3121"><a href="#Parser-3121"><span class="linenos">3121</span></a>
-</span><span id="Parser-3122"><a href="#Parser-3122"><span class="linenos">3122</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3123"><a href="#Parser-3123"><span class="linenos">3123</span></a>
-</span><span id="Parser-3124"><a href="#Parser-3124"><span class="linenos">3124</span></a> <span class="n">pivot</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="Parser-3125"><a href="#Parser-3125"><span class="linenos">3125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
-</span><span id="Parser-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="Parser-3128"><a href="#Parser-3128"><span class="linenos">3128</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
-</span><span id="Parser-3129"><a href="#Parser-3129"><span class="linenos">3129</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
-</span><span id="Parser-3130"><a href="#Parser-3130"><span class="linenos">3130</span></a> <span class="p">)</span>
-</span><span id="Parser-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a>
-</span><span id="Parser-3132"><a href="#Parser-3132"><span class="linenos">3132</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</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="Parser-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</span></a>
-</span><span id="Parser-3135"><a href="#Parser-3135"><span class="linenos">3135</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="Parser-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="Parser-3120"><a href="#Parser-3120"><span class="linenos">3120</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3121"><a href="#Parser-3121"><span class="linenos">3121</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;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
+</span><span id="Parser-3122"><a href="#Parser-3122"><span class="linenos">3122</span></a>
+</span><span id="Parser-3123"><a href="#Parser-3123"><span class="linenos">3123</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="Parser-3124"><a href="#Parser-3124"><span class="linenos">3124</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;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="Parser-3125"><a href="#Parser-3125"><span class="linenos">3125</span></a>
+</span><span id="Parser-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
+</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</span></a>
+</span><span id="Parser-3128"><a href="#Parser-3128"><span class="linenos">3128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3129"><a href="#Parser-3129"><span class="linenos">3129</span></a>
+</span><span id="Parser-3130"><a href="#Parser-3130"><span class="linenos">3130</span></a> <span class="n">pivot</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="Parser-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
+</span><span id="Parser-3132"><a href="#Parser-3132"><span class="linenos">3132</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
+</span><span id="Parser-3135"><a href="#Parser-3135"><span class="linenos">3135</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
+</span><span id="Parser-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="p">)</span>
</span><span id="Parser-3137"><a href="#Parser-3137"><span class="linenos">3137</span></a>
-</span><span id="Parser-3138"><a href="#Parser-3138"><span class="linenos">3138</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3140"><a href="#Parser-3140"><span class="linenos">3140</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="Parser-3141"><a href="#Parser-3141"><span class="linenos">3141</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
-</span><span id="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
-</span><span id="Parser-3143"><a href="#Parser-3143"><span class="linenos">3143</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="Parser-3144"><a href="#Parser-3144"><span class="linenos">3144</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3145"><a href="#Parser-3145"><span class="linenos">3145</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="Parser-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a>
-</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
-</span><span id="Parser-3148"><a href="#Parser-3148"><span class="linenos">3148</span></a>
-</span><span id="Parser-3149"><a href="#Parser-3149"><span class="linenos">3149</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
-</span><span id="Parser-3150"><a href="#Parser-3150"><span class="linenos">3150</span></a>
-</span><span id="Parser-3151"><a href="#Parser-3151"><span class="linenos">3151</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="Parser-3138"><a href="#Parser-3138"><span class="linenos">3138</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</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="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-3140"><a href="#Parser-3140"><span class="linenos">3140</span></a>
+</span><span id="Parser-3141"><a href="#Parser-3141"><span class="linenos">3141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="Parser-3143"><a href="#Parser-3143"><span class="linenos">3143</span></a>
+</span><span id="Parser-3144"><a href="#Parser-3144"><span class="linenos">3144</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3145"><a href="#Parser-3145"><span class="linenos">3145</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
+</span><span id="Parser-3148"><a href="#Parser-3148"><span class="linenos">3148</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
+</span><span id="Parser-3149"><a href="#Parser-3149"><span class="linenos">3149</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="Parser-3150"><a href="#Parser-3150"><span class="linenos">3150</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3151"><a href="#Parser-3151"><span class="linenos">3151</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="Parser-3152"><a href="#Parser-3152"><span class="linenos">3152</span></a>
-</span><span id="Parser-3153"><a href="#Parser-3153"><span class="linenos">3153</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Parser-3154"><a href="#Parser-3154"><span class="linenos">3154</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
-</span><span id="Parser-3155"><a href="#Parser-3155"><span class="linenos">3155</span></a>
-</span><span id="Parser-3156"><a href="#Parser-3156"><span class="linenos">3156</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">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">Where</span><span class="p">]:</span>
-</span><span id="Parser-3157"><a href="#Parser-3157"><span class="linenos">3157</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</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">WHERE</span><span class="p">):</span>
-</span><span id="Parser-3158"><a href="#Parser-3158"><span class="linenos">3158</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3159"><a href="#Parser-3159"><span class="linenos">3159</span></a>
-</span><span id="Parser-3160"><a href="#Parser-3160"><span class="linenos">3160</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="Parser-3161"><a href="#Parser-3161"><span class="linenos">3161</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a> <span class="p">)</span>
-</span><span id="Parser-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a>
-</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</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">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">Group</span><span class="p">]:</span>
-</span><span id="Parser-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</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">GROUP_BY</span><span class="p">):</span>
-</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</span></a>
-</span><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Parser-3153"><a href="#Parser-3153"><span class="linenos">3153</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+</span><span id="Parser-3154"><a href="#Parser-3154"><span class="linenos">3154</span></a>
+</span><span id="Parser-3155"><a href="#Parser-3155"><span class="linenos">3155</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
+</span><span id="Parser-3156"><a href="#Parser-3156"><span class="linenos">3156</span></a>
+</span><span id="Parser-3157"><a href="#Parser-3157"><span class="linenos">3157</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="Parser-3158"><a href="#Parser-3158"><span class="linenos">3158</span></a>
+</span><span id="Parser-3159"><a href="#Parser-3159"><span class="linenos">3159</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Parser-3160"><a href="#Parser-3160"><span class="linenos">3160</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
+</span><span id="Parser-3161"><a href="#Parser-3161"><span class="linenos">3161</span></a>
+</span><span id="Parser-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">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">Where</span><span class="p">]:</span>
+</span><span id="Parser-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</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">WHERE</span><span class="p">):</span>
+</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a>
+</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</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="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</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_conjunction</span><span class="p">()</span>
+</span><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <span class="p">)</span>
</span><span id="Parser-3169"><a href="#Parser-3169"><span class="linenos">3169</span></a>
-</span><span id="Parser-3170"><a href="#Parser-3170"><span class="linenos">3170</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">ALL</span><span class="p">):</span>
-</span><span id="Parser-3171"><a href="#Parser-3171"><span class="linenos">3171</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">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a>
-</span><span id="Parser-3173"><a href="#Parser-3173"><span class="linenos">3173</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3174"><a href="#Parser-3174"><span class="linenos">3174</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_conjunction</span><span class="p">)</span>
-</span><span id="Parser-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-3177"><a href="#Parser-3177"><span class="linenos">3177</span></a>
-</span><span id="Parser-3178"><a href="#Parser-3178"><span class="linenos">3178</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
-</span><span id="Parser-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="Parser-3180"><a href="#Parser-3180"><span class="linenos">3180</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
-</span><span id="Parser-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a>
-</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3183"><a href="#Parser-3183"><span class="linenos">3183</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a>
-</span><span id="Parser-3186"><a href="#Parser-3186"><span class="linenos">3186</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3187"><a href="#Parser-3187"><span class="linenos">3187</span></a> <span class="n">with_</span> <span class="o">=</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">WITH</span><span class="p">)</span>
-</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</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">ROLLUP</span><span class="p">):</span>
-</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
-</span><span id="Parser-3190"><a href="#Parser-3190"><span class="linenos">3190</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="Parser-3170"><a href="#Parser-3170"><span class="linenos">3170</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</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">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">Group</span><span class="p">]:</span>
+</span><span id="Parser-3171"><a href="#Parser-3171"><span class="linenos">3171</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</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">GROUP_BY</span><span class="p">):</span>
+</span><span id="Parser-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3173"><a href="#Parser-3173"><span class="linenos">3173</span></a>
+</span><span id="Parser-3174"><a href="#Parser-3174"><span class="linenos">3174</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Parser-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a>
+</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</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">ALL</span><span class="p">):</span>
+</span><span id="Parser-3177"><a href="#Parser-3177"><span class="linenos">3177</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">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3178"><a href="#Parser-3178"><span class="linenos">3178</span></a>
+</span><span id="Parser-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3180"><a href="#Parser-3180"><span class="linenos">3180</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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3183"><a href="#Parser-3183"><span class="linenos">3183</span></a>
+</span><span id="Parser-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
+</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="Parser-3186"><a href="#Parser-3186"><span class="linenos">3186</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
+</span><span id="Parser-3187"><a href="#Parser-3187"><span class="linenos">3187</span></a>
+</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3190"><a href="#Parser-3190"><span class="linenos">3190</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3191"><a href="#Parser-3191"><span class="linenos">3191</span></a>
-</span><span id="Parser-3192"><a href="#Parser-3192"><span class="linenos">3192</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">CUBE</span><span class="p">):</span>
-</span><span id="Parser-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
-</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
-</span><span id="Parser-3195"><a href="#Parser-3195"><span class="linenos">3195</span></a>
-</span><span id="Parser-3196"><a href="#Parser-3196"><span class="linenos">3196</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;TOTALS&quot;</span><span class="p">):</span>
-</span><span id="Parser-3197"><a href="#Parser-3197"><span class="linenos">3197</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3198"><a href="#Parser-3198"><span class="linenos">3198</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3199"><a href="#Parser-3199"><span class="linenos">3199</span></a>
-</span><span id="Parser-3200"><a href="#Parser-3200"><span class="linenos">3200</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
-</span><span id="Parser-3201"><a href="#Parser-3201"><span class="linenos">3201</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="Parser-3202"><a href="#Parser-3202"><span class="linenos">3202</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a> <span class="k">break</span>
-</span><span id="Parser-3204"><a href="#Parser-3204"><span class="linenos">3204</span></a>
-</span><span id="Parser-3205"><a href="#Parser-3205"><span class="linenos">3205</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">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3206"><a href="#Parser-3206"><span class="linenos">3206</span></a>
-</span><span id="Parser-3207"><a href="#Parser-3207"><span class="linenos">3207</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</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">t</span><span class="o">.</span><span class="n">List</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="Parser-3208"><a href="#Parser-3208"><span class="linenos">3208</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
-</span><span id="Parser-3209"><a href="#Parser-3209"><span class="linenos">3209</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3192"><a href="#Parser-3192"><span class="linenos">3192</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a> <span class="n">with_</span> <span class="o">=</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">WITH</span><span class="p">)</span>
+</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</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">ROLLUP</span><span class="p">):</span>
+</span><span id="Parser-3195"><a href="#Parser-3195"><span class="linenos">3195</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
+</span><span id="Parser-3196"><a href="#Parser-3196"><span class="linenos">3196</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="Parser-3197"><a href="#Parser-3197"><span class="linenos">3197</span></a>
+</span><span id="Parser-3198"><a href="#Parser-3198"><span class="linenos">3198</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">CUBE</span><span class="p">):</span>
+</span><span id="Parser-3199"><a href="#Parser-3199"><span class="linenos">3199</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</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_column</span><span class="p">)</span>
+</span><span id="Parser-3200"><a href="#Parser-3200"><span class="linenos">3200</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
+</span><span id="Parser-3201"><a href="#Parser-3201"><span class="linenos">3201</span></a>
+</span><span id="Parser-3202"><a href="#Parser-3202"><span class="linenos">3202</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;TOTALS&quot;</span><span class="p">):</span>
+</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3204"><a href="#Parser-3204"><span class="linenos">3204</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-3205"><a href="#Parser-3205"><span class="linenos">3205</span></a>
+</span><span id="Parser-3206"><a href="#Parser-3206"><span class="linenos">3206</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
+</span><span id="Parser-3207"><a href="#Parser-3207"><span class="linenos">3207</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="Parser-3208"><a href="#Parser-3208"><span class="linenos">3208</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3209"><a href="#Parser-3209"><span class="linenos">3209</span></a> <span class="k">break</span>
</span><span id="Parser-3210"><a href="#Parser-3210"><span class="linenos">3210</span></a>
-</span><span id="Parser-3211"><a href="#Parser-3211"><span class="linenos">3211</span></a> <span class="k">return</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_grouping_set</span><span class="p">)</span>
+</span><span id="Parser-3211"><a href="#Parser-3211"><span class="linenos">3211</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">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-3212"><a href="#Parser-3212"><span class="linenos">3212</span></a>
-</span><span id="Parser-3213"><a href="#Parser-3213"><span class="linenos">3213</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</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="Parser-3214"><a href="#Parser-3214"><span class="linenos">3214</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-3216"><a href="#Parser-3216"><span class="linenos">3216</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3217"><a href="#Parser-3217"><span class="linenos">3217</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">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="Parser-3213"><a href="#Parser-3213"><span class="linenos">3213</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</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">t</span><span class="o">.</span><span class="n">List</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="Parser-3214"><a href="#Parser-3214"><span class="linenos">3214</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
+</span><span id="Parser-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3216"><a href="#Parser-3216"><span class="linenos">3216</span></a>
+</span><span id="Parser-3217"><a href="#Parser-3217"><span class="linenos">3217</span></a> <span class="k">return</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_grouping_set</span><span class="p">)</span>
</span><span id="Parser-3218"><a href="#Parser-3218"><span class="linenos">3218</span></a>
-</span><span id="Parser-3219"><a href="#Parser-3219"><span class="linenos">3219</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</span></a>
-</span><span id="Parser-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</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">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">Having</span><span class="p">]:</span>
-</span><span id="Parser-3222"><a href="#Parser-3222"><span class="linenos">3222</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</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">HAVING</span><span class="p">):</span>
-</span><span id="Parser-3223"><a href="#Parser-3223"><span class="linenos">3223</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3224"><a href="#Parser-3224"><span class="linenos">3224</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">Having</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_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3225"><a href="#Parser-3225"><span class="linenos">3225</span></a>
-</span><span id="Parser-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</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">Qualify</span><span class="p">]:</span>
-</span><span id="Parser-3227"><a href="#Parser-3227"><span class="linenos">3227</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
-</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</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">Qualify</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_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3230"><a href="#Parser-3230"><span class="linenos">3230</span></a>
-</span><span id="Parser-3231"><a href="#Parser-3231"><span class="linenos">3231</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</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">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">Connect</span><span class="p">]:</span>
-</span><span id="Parser-3232"><a href="#Parser-3232"><span class="linenos">3232</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
-</span><span id="Parser-3233"><a href="#Parser-3233"><span class="linenos">3233</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3234"><a href="#Parser-3234"><span class="linenos">3234</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">START_WITH</span><span class="p">):</span>
-</span><span id="Parser-3235"><a href="#Parser-3235"><span class="linenos">3235</span></a> <span class="n">start</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="Parser-3236"><a href="#Parser-3236"><span class="linenos">3236</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3237"><a href="#Parser-3237"><span class="linenos">3237</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3238"><a href="#Parser-3238"><span class="linenos">3238</span></a>
-</span><span id="Parser-3239"><a href="#Parser-3239"><span class="linenos">3239</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">CONNECT_BY</span><span class="p">)</span>
-</span><span id="Parser-3240"><a href="#Parser-3240"><span class="linenos">3240</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</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">expression</span><span class="p">(</span>
-</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</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><span id="Parser-3242"><a href="#Parser-3242"><span class="linenos">3242</span></a> <span class="p">)</span>
-</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</span></a> <span class="n">connect</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="Parser-3244"><a href="#Parser-3244"><span class="linenos">3244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
-</span><span id="Parser-3245"><a href="#Parser-3245"><span class="linenos">3245</span></a>
-</span><span id="Parser-3246"><a href="#Parser-3246"><span class="linenos">3246</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</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">START_WITH</span><span class="p">):</span>
-</span><span id="Parser-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a> <span class="n">start</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="Parser-3248"><a href="#Parser-3248"><span class="linenos">3248</span></a>
-</span><span id="Parser-3249"><a href="#Parser-3249"><span class="linenos">3249</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">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
-</span><span id="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a>
-</span><span id="Parser-3251"><a href="#Parser-3251"><span class="linenos">3251</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</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">Alias</span><span class="p">:</span>
-</span><span id="Parser-3252"><a href="#Parser-3252"><span class="linenos">3252</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="Parser-3253"><a href="#Parser-3253"><span class="linenos">3253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="Parser-3254"><a href="#Parser-3254"><span class="linenos">3254</span></a> <span class="n">alias</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">True</span><span class="p">),</span>
-</span><span id="Parser-3255"><a href="#Parser-3255"><span class="linenos">3255</span></a> <span class="n">this</span><span class="o">=</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="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a> <span class="p">)</span>
-</span><span id="Parser-3257"><a href="#Parser-3257"><span class="linenos">3257</span></a>
-</span><span id="Parser-3258"><a href="#Parser-3258"><span class="linenos">3258</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</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">t</span><span class="o">.</span><span class="n">List</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="Parser-3259"><a href="#Parser-3259"><span class="linenos">3259</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;INTERPOLATE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3260"><a href="#Parser-3260"><span class="linenos">3260</span></a> <span class="k">return</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_name_as_expression</span><span class="p">)</span>
-</span><span id="Parser-3261"><a href="#Parser-3261"><span class="linenos">3261</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3262"><a href="#Parser-3262"><span class="linenos">3262</span></a>
-</span><span id="Parser-3263"><a href="#Parser-3263"><span class="linenos">3263</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="Parser-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</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="Parser-3266"><a href="#Parser-3266"><span class="linenos">3266</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</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">ORDER_BY</span><span class="p">):</span>
-</span><span id="Parser-3268"><a href="#Parser-3268"><span class="linenos">3268</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
-</span><span id="Parser-3269"><a href="#Parser-3269"><span class="linenos">3269</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3270"><a href="#Parser-3270"><span class="linenos">3270</span></a>
-</span><span id="Parser-3271"><a href="#Parser-3271"><span class="linenos">3271</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3272"><a href="#Parser-3272"><span class="linenos">3272</span></a>
-</span><span id="Parser-3273"><a href="#Parser-3273"><span class="linenos">3273</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="Parser-3274"><a href="#Parser-3274"><span class="linenos">3274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="Parser-3275"><a href="#Parser-3275"><span class="linenos">3275</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3276"><a href="#Parser-3276"><span class="linenos">3276</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_ordered</span><span class="p">),</span>
-</span><span id="Parser-3277"><a href="#Parser-3277"><span class="linenos">3277</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
-</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
-</span><span id="Parser-3279"><a href="#Parser-3279"><span class="linenos">3279</span></a> <span class="p">)</span>
-</span><span id="Parser-3280"><a href="#Parser-3280"><span class="linenos">3280</span></a>
-</span><span id="Parser-3281"><a href="#Parser-3281"><span class="linenos">3281</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="Parser-3282"><a href="#Parser-3282"><span class="linenos">3282</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</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
-</span><span id="Parser-3283"><a href="#Parser-3283"><span class="linenos">3283</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3284"><a href="#Parser-3284"><span class="linenos">3284</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_class</span><span class="p">,</span> <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_ordered</span><span class="p">))</span>
-</span><span id="Parser-3285"><a href="#Parser-3285"><span class="linenos">3285</span></a>
-</span><span id="Parser-3286"><a href="#Parser-3286"><span class="linenos">3286</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
-</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3288"><a href="#Parser-3288"><span class="linenos">3288</span></a>
-</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</span></a> <span class="n">asc</span> <span class="o">=</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">ASC</span><span class="p">)</span>
-</span><span id="Parser-3290"><a href="#Parser-3290"><span class="linenos">3290</span></a> <span class="n">desc</span> <span class="o">=</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">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3219"><a href="#Parser-3219"><span class="linenos">3219</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</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="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-3222"><a href="#Parser-3222"><span class="linenos">3222</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3223"><a href="#Parser-3223"><span class="linenos">3223</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">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="Parser-3224"><a href="#Parser-3224"><span class="linenos">3224</span></a>
+</span><span id="Parser-3225"><a href="#Parser-3225"><span class="linenos">3225</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a>
+</span><span id="Parser-3227"><a href="#Parser-3227"><span class="linenos">3227</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</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">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">Having</span><span class="p">]:</span>
+</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</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">HAVING</span><span class="p">):</span>
+</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3230"><a href="#Parser-3230"><span class="linenos">3230</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">Having</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_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3231"><a href="#Parser-3231"><span class="linenos">3231</span></a>
+</span><span id="Parser-3232"><a href="#Parser-3232"><span class="linenos">3232</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</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">Qualify</span><span class="p">]:</span>
+</span><span id="Parser-3233"><a href="#Parser-3233"><span class="linenos">3233</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
+</span><span id="Parser-3234"><a href="#Parser-3234"><span class="linenos">3234</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3235"><a href="#Parser-3235"><span class="linenos">3235</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">Qualify</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_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3236"><a href="#Parser-3236"><span class="linenos">3236</span></a>
+</span><span id="Parser-3237"><a href="#Parser-3237"><span class="linenos">3237</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</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">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">Connect</span><span class="p">]:</span>
+</span><span id="Parser-3238"><a href="#Parser-3238"><span class="linenos">3238</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
+</span><span id="Parser-3239"><a href="#Parser-3239"><span class="linenos">3239</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3240"><a href="#Parser-3240"><span class="linenos">3240</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">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</span></a> <span class="n">start</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="Parser-3242"><a href="#Parser-3242"><span class="linenos">3242</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3244"><a href="#Parser-3244"><span class="linenos">3244</span></a>
+</span><span id="Parser-3245"><a href="#Parser-3245"><span class="linenos">3245</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">CONNECT_BY</span><span class="p">)</span>
+</span><span id="Parser-3246"><a href="#Parser-3246"><span class="linenos">3246</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</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">expression</span><span class="p">(</span>
+</span><span id="Parser-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</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><span id="Parser-3248"><a href="#Parser-3248"><span class="linenos">3248</span></a> <span class="p">)</span>
+</span><span id="Parser-3249"><a href="#Parser-3249"><span class="linenos">3249</span></a> <span class="n">connect</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="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
+</span><span id="Parser-3251"><a href="#Parser-3251"><span class="linenos">3251</span></a>
+</span><span id="Parser-3252"><a href="#Parser-3252"><span class="linenos">3252</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</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">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-3253"><a href="#Parser-3253"><span class="linenos">3253</span></a> <span class="n">start</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="Parser-3254"><a href="#Parser-3254"><span class="linenos">3254</span></a>
+</span><span id="Parser-3255"><a href="#Parser-3255"><span class="linenos">3255</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">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
+</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a>
+</span><span id="Parser-3257"><a href="#Parser-3257"><span class="linenos">3257</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</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">Alias</span><span class="p">:</span>
+</span><span id="Parser-3258"><a href="#Parser-3258"><span class="linenos">3258</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="Parser-3259"><a href="#Parser-3259"><span class="linenos">3259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
+</span><span id="Parser-3260"><a href="#Parser-3260"><span class="linenos">3260</span></a> <span class="n">alias</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">True</span><span class="p">),</span>
+</span><span id="Parser-3261"><a href="#Parser-3261"><span class="linenos">3261</span></a> <span class="n">this</span><span class="o">=</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="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="Parser-3262"><a href="#Parser-3262"><span class="linenos">3262</span></a> <span class="p">)</span>
+</span><span id="Parser-3263"><a href="#Parser-3263"><span class="linenos">3263</span></a>
+</span><span id="Parser-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</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">t</span><span class="o">.</span><span class="n">List</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="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</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;INTERPOLATE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3266"><a href="#Parser-3266"><span class="linenos">3266</span></a> <span class="k">return</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_name_as_expression</span><span class="p">)</span>
+</span><span id="Parser-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3268"><a href="#Parser-3268"><span class="linenos">3268</span></a>
+</span><span id="Parser-3269"><a href="#Parser-3269"><span class="linenos">3269</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
+</span><span id="Parser-3270"><a href="#Parser-3270"><span class="linenos">3270</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3271"><a href="#Parser-3271"><span class="linenos">3271</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="Parser-3272"><a href="#Parser-3272"><span class="linenos">3272</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3273"><a href="#Parser-3273"><span class="linenos">3273</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</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">ORDER_BY</span><span class="p">):</span>
+</span><span id="Parser-3274"><a href="#Parser-3274"><span class="linenos">3274</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
+</span><span id="Parser-3275"><a href="#Parser-3275"><span class="linenos">3275</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3276"><a href="#Parser-3276"><span class="linenos">3276</span></a>
+</span><span id="Parser-3277"><a href="#Parser-3277"><span class="linenos">3277</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</span></a>
+</span><span id="Parser-3279"><a href="#Parser-3279"><span class="linenos">3279</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="Parser-3280"><a href="#Parser-3280"><span class="linenos">3280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="Parser-3281"><a href="#Parser-3281"><span class="linenos">3281</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3282"><a href="#Parser-3282"><span class="linenos">3282</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_ordered</span><span class="p">),</span>
+</span><span id="Parser-3283"><a href="#Parser-3283"><span class="linenos">3283</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
+</span><span id="Parser-3284"><a href="#Parser-3284"><span class="linenos">3284</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
+</span><span id="Parser-3285"><a href="#Parser-3285"><span class="linenos">3285</span></a> <span class="p">)</span>
+</span><span id="Parser-3286"><a href="#Parser-3286"><span class="linenos">3286</span></a>
+</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="Parser-3288"><a href="#Parser-3288"><span class="linenos">3288</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</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
+</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3290"><a href="#Parser-3290"><span class="linenos">3290</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_class</span><span class="p">,</span> <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_ordered</span><span class="p">))</span>
</span><span id="Parser-3291"><a href="#Parser-3291"><span class="linenos">3291</span></a>
-</span><span id="Parser-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
-</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
+</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
</span><span id="Parser-3294"><a href="#Parser-3294"><span class="linenos">3294</span></a>
-</span><span id="Parser-3295"><a href="#Parser-3295"><span class="linenos">3295</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="Parser-3296"><a href="#Parser-3296"><span class="linenos">3296</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="Parser-3295"><a href="#Parser-3295"><span class="linenos">3295</span></a> <span class="n">asc</span> <span class="o">=</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">ASC</span><span class="p">)</span>
+</span><span id="Parser-3296"><a href="#Parser-3296"><span class="linenos">3296</span></a> <span class="n">desc</span> <span class="o">=</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">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3297"><a href="#Parser-3297"><span class="linenos">3297</span></a>
-</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="Parser-3300"><a href="#Parser-3300"><span class="linenos">3300</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="Parser-3302"><a href="#Parser-3302"><span class="linenos">3302</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="Parser-3303"><a href="#Parser-3303"><span class="linenos">3303</span></a> <span class="p">)</span>
-</span><span id="Parser-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</span></a> <span class="p">):</span>
-</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a>
-</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
-</span><span id="Parser-3309"><a href="#Parser-3309"><span class="linenos">3309</span></a> <span class="n">with_fill</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="Parser-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
-</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</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;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</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;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</span></a> <span class="p">},</span>
-</span><span id="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="p">)</span>
-</span><span id="Parser-3317"><a href="#Parser-3317"><span class="linenos">3317</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</span></a>
-</span><span id="Parser-3320"><a href="#Parser-3320"><span class="linenos">3320</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="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</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">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
-</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</span></a> <span class="p">)</span>
-</span><span id="Parser-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a>
-</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
-</span><span id="Parser-3325"><a href="#Parser-3325"><span class="linenos">3325</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</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="Parser-3327"><a href="#Parser-3327"><span class="linenos">3327</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">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
-</span><span id="Parser-3328"><a href="#Parser-3328"><span class="linenos">3328</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-3329"><a href="#Parser-3329"><span class="linenos">3329</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
-</span><span id="Parser-3330"><a href="#Parser-3330"><span class="linenos">3330</span></a> <span class="n">limit_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
-</span><span id="Parser-3331"><a href="#Parser-3331"><span class="linenos">3331</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="Parser-3332"><a href="#Parser-3332"><span class="linenos">3332</span></a>
-</span><span id="Parser-3333"><a href="#Parser-3333"><span class="linenos">3333</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</span><span id="Parser-3334"><a href="#Parser-3334"><span class="linenos">3334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3335"><a href="#Parser-3335"><span class="linenos">3335</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3336"><a href="#Parser-3336"><span class="linenos">3336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3337"><a href="#Parser-3337"><span class="linenos">3337</span></a>
-</span><span id="Parser-3338"><a href="#Parser-3338"><span class="linenos">3338</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="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-3340"><a href="#Parser-3340"><span class="linenos">3340</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
+</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-3300"><a href="#Parser-3300"><span class="linenos">3300</span></a>
+</span><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
+</span><span id="Parser-3302"><a href="#Parser-3302"><span class="linenos">3302</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="Parser-3303"><a href="#Parser-3303"><span class="linenos">3303</span></a>
+</span><span id="Parser-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Parser-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="Parser-3309"><a href="#Parser-3309"><span class="linenos">3309</span></a> <span class="p">)</span>
+</span><span id="Parser-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="p">):</span>
+</span><span id="Parser-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</span></a>
+</span><span id="Parser-3314"><a href="#Parser-3314"><span class="linenos">3314</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
+</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</span></a> <span class="n">with_fill</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="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
+</span><span id="Parser-3317"><a href="#Parser-3317"><span class="linenos">3317</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</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;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-3320"><a href="#Parser-3320"><span class="linenos">3320</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</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;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="p">},</span>
+</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</span></a> <span class="p">)</span>
+</span><span id="Parser-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3325"><a href="#Parser-3325"><span class="linenos">3325</span></a>
+</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</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="Parser-3327"><a href="#Parser-3327"><span class="linenos">3327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</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">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
+</span><span id="Parser-3328"><a href="#Parser-3328"><span class="linenos">3328</span></a> <span class="p">)</span>
+</span><span id="Parser-3329"><a href="#Parser-3329"><span class="linenos">3329</span></a>
+</span><span id="Parser-3330"><a href="#Parser-3330"><span class="linenos">3330</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="Parser-3331"><a href="#Parser-3331"><span class="linenos">3331</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3332"><a href="#Parser-3332"><span class="linenos">3332</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="Parser-3333"><a href="#Parser-3333"><span class="linenos">3333</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">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
+</span><span id="Parser-3334"><a href="#Parser-3334"><span class="linenos">3334</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="Parser-3335"><a href="#Parser-3335"><span class="linenos">3335</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
+</span><span id="Parser-3336"><a href="#Parser-3336"><span class="linenos">3336</span></a> <span class="n">limit_paren</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-3337"><a href="#Parser-3337"><span class="linenos">3337</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="Parser-3338"><a href="#Parser-3338"><span class="linenos">3338</span></a>
+</span><span id="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
+</span><span id="Parser-3340"><a href="#Parser-3340"><span class="linenos">3340</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3341"><a href="#Parser-3341"><span class="linenos">3341</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-3343"><a href="#Parser-3343"><span class="linenos">3343</span></a>
-</span><span id="Parser-3344"><a href="#Parser-3344"><span class="linenos">3344</span></a> <span class="n">limit_exp</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="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
-</span><span id="Parser-3346"><a href="#Parser-3346"><span class="linenos">3346</span></a> <span class="p">)</span>
-</span><span id="Parser-3347"><a href="#Parser-3347"><span class="linenos">3347</span></a>
-</span><span id="Parser-3348"><a href="#Parser-3348"><span class="linenos">3348</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="Parser-3344"><a href="#Parser-3344"><span class="linenos">3344</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="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-3346"><a href="#Parser-3346"><span class="linenos">3346</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3347"><a href="#Parser-3347"><span class="linenos">3347</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3348"><a href="#Parser-3348"><span class="linenos">3348</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3349"><a href="#Parser-3349"><span class="linenos">3349</span></a>
-</span><span id="Parser-3350"><a href="#Parser-3350"><span class="linenos">3350</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">FETCH</span><span class="p">):</span>
-</span><span id="Parser-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="n">direction</span> <span class="o">=</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">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
-</span><span id="Parser-3352"><a href="#Parser-3352"><span class="linenos">3352</span></a> <span class="n">direction</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 class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
-</span><span id="Parser-3353"><a href="#Parser-3353"><span class="linenos">3353</span></a>
-</span><span id="Parser-3354"><a href="#Parser-3354"><span class="linenos">3354</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</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">FETCH_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-3355"><a href="#Parser-3355"><span class="linenos">3355</span></a> <span class="n">percent</span> <span class="o">=</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">PERCENT</span><span class="p">)</span>
-</span><span id="Parser-3356"><a href="#Parser-3356"><span class="linenos">3356</span></a>
-</span><span id="Parser-3357"><a href="#Parser-3357"><span class="linenos">3357</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="Parser-3350"><a href="#Parser-3350"><span class="linenos">3350</span></a> <span class="n">limit_exp</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="Parser-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="Parser-3352"><a href="#Parser-3352"><span class="linenos">3352</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3353"><a href="#Parser-3353"><span class="linenos">3353</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-3354"><a href="#Parser-3354"><span class="linenos">3354</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="Parser-3355"><a href="#Parser-3355"><span class="linenos">3355</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-3356"><a href="#Parser-3356"><span class="linenos">3356</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">(),</span>
+</span><span id="Parser-3357"><a href="#Parser-3357"><span class="linenos">3357</span></a> <span class="p">)</span>
</span><span id="Parser-3358"><a href="#Parser-3358"><span class="linenos">3358</span></a>
-</span><span id="Parser-3359"><a href="#Parser-3359"><span class="linenos">3359</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="Parser-3360"><a href="#Parser-3360"><span class="linenos">3360</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
-</span><span id="Parser-3361"><a href="#Parser-3361"><span class="linenos">3361</span></a>
-</span><span id="Parser-3362"><a href="#Parser-3362"><span class="linenos">3362</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
-</span><span id="Parser-3363"><a href="#Parser-3363"><span class="linenos">3363</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;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="Parser-3359"><a href="#Parser-3359"><span class="linenos">3359</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="Parser-3360"><a href="#Parser-3360"><span class="linenos">3360</span></a>
+</span><span id="Parser-3361"><a href="#Parser-3361"><span class="linenos">3361</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">FETCH</span><span class="p">):</span>
+</span><span id="Parser-3362"><a href="#Parser-3362"><span class="linenos">3362</span></a> <span class="n">direction</span> <span class="o">=</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">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
+</span><span id="Parser-3363"><a href="#Parser-3363"><span class="linenos">3363</span></a> <span class="n">direction</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 class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
</span><span id="Parser-3364"><a href="#Parser-3364"><span class="linenos">3364</span></a>
-</span><span id="Parser-3365"><a href="#Parser-3365"><span class="linenos">3365</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="Parser-3366"><a href="#Parser-3366"><span class="linenos">3366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="Parser-3367"><a href="#Parser-3367"><span class="linenos">3367</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="Parser-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
-</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a> <span class="p">)</span>
+</span><span id="Parser-3365"><a href="#Parser-3365"><span class="linenos">3365</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</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">FETCH_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-3366"><a href="#Parser-3366"><span class="linenos">3366</span></a> <span class="n">percent</span> <span class="o">=</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">PERCENT</span><span class="p">)</span>
+</span><span id="Parser-3367"><a href="#Parser-3367"><span class="linenos">3367</span></a>
+</span><span id="Parser-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a>
+</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
</span><span id="Parser-3372"><a href="#Parser-3372"><span class="linenos">3372</span></a>
-</span><span id="Parser-3373"><a href="#Parser-3373"><span class="linenos">3373</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3374"><a href="#Parser-3374"><span class="linenos">3374</span></a>
-</span><span id="Parser-3375"><a href="#Parser-3375"><span class="linenos">3375</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-3376"><a href="#Parser-3376"><span class="linenos">3376</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3378"><a href="#Parser-3378"><span class="linenos">3378</span></a>
-</span><span id="Parser-3379"><a href="#Parser-3379"><span class="linenos">3379</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3380"><a href="#Parser-3380"><span class="linenos">3380</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
-</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</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">Offset</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">count</span><span class="p">)</span>
-</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</span></a>
-</span><span id="Parser-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a> <span class="k">def</span> <span class="nf">_parse_locks</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
-</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3385"><a href="#Parser-3385"><span class="linenos">3385</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3386"><a href="#Parser-3386"><span class="linenos">3386</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3387"><a href="#Parser-3387"><span class="linenos">3387</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3388"><a href="#Parser-3388"><span class="linenos">3388</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
-</span><span id="Parser-3389"><a href="#Parser-3389"><span class="linenos">3389</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
-</span><span id="Parser-3390"><a href="#Parser-3390"><span class="linenos">3390</span></a> <span class="p">):</span>
-</span><span id="Parser-3391"><a href="#Parser-3391"><span class="linenos">3391</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3392"><a href="#Parser-3392"><span class="linenos">3392</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3393"><a href="#Parser-3393"><span class="linenos">3393</span></a> <span class="k">break</span>
-</span><span id="Parser-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a>
-</span><span id="Parser-3395"><a href="#Parser-3395"><span class="linenos">3395</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3396"><a href="#Parser-3396"><span class="linenos">3396</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;OF&quot;</span><span class="p">):</span>
-</span><span id="Parser-3397"><a href="#Parser-3397"><span class="linenos">3397</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-3398"><a href="#Parser-3398"><span class="linenos">3398</span></a>
-</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3400"><a href="#Parser-3400"><span class="linenos">3400</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;NOWAIT&quot;</span><span class="p">):</span>
-</span><span id="Parser-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</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;WAIT&quot;</span><span class="p">):</span>
-</span><span id="Parser-3403"><a href="#Parser-3403"><span class="linenos">3403</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-3404"><a href="#Parser-3404"><span class="linenos">3404</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;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
-</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3406"><a href="#Parser-3406"><span class="linenos">3406</span></a>
-</span><span id="Parser-3407"><a href="#Parser-3407"><span class="linenos">3407</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a> <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">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
-</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</span></a> <span class="p">)</span>
-</span><span id="Parser-3410"><a href="#Parser-3410"><span class="linenos">3410</span></a>
-</span><span id="Parser-3411"><a href="#Parser-3411"><span class="linenos">3411</span></a> <span class="k">return</span> <span class="n">locks</span>
-</span><span id="Parser-3412"><a href="#Parser-3412"><span class="linenos">3412</span></a>
-</span><span id="Parser-3413"><a href="#Parser-3413"><span class="linenos">3413</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3414"><a href="#Parser-3414"><span class="linenos">3414</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
-</span><span id="Parser-3415"><a href="#Parser-3415"><span class="linenos">3415</span></a> <span class="n">token_type</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">token_type</span>
-</span><span id="Parser-3416"><a href="#Parser-3416"><span class="linenos">3416</span></a>
-</span><span id="Parser-3417"><a href="#Parser-3417"><span class="linenos">3417</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
-</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
-</span><span id="Parser-3419"><a href="#Parser-3419"><span class="linenos">3419</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
-</span><span id="Parser-3420"><a href="#Parser-3420"><span class="linenos">3420</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
-</span><span id="Parser-3421"><a href="#Parser-3421"><span class="linenos">3421</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3422"><a href="#Parser-3422"><span class="linenos">3422</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
+</span><span id="Parser-3373"><a href="#Parser-3373"><span class="linenos">3373</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
+</span><span id="Parser-3374"><a href="#Parser-3374"><span class="linenos">3374</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;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="Parser-3375"><a href="#Parser-3375"><span class="linenos">3375</span></a>
+</span><span id="Parser-3376"><a href="#Parser-3376"><span class="linenos">3376</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="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="Parser-3378"><a href="#Parser-3378"><span class="linenos">3378</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="Parser-3379"><a href="#Parser-3379"><span class="linenos">3379</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="Parser-3380"><a href="#Parser-3380"><span class="linenos">3380</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
+</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</span></a> <span class="p">)</span>
+</span><span id="Parser-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a>
+</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3385"><a href="#Parser-3385"><span class="linenos">3385</span></a>
+</span><span id="Parser-3386"><a href="#Parser-3386"><span class="linenos">3386</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-3387"><a href="#Parser-3387"><span class="linenos">3387</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="Parser-3388"><a href="#Parser-3388"><span class="linenos">3388</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3389"><a href="#Parser-3389"><span class="linenos">3389</span></a>
+</span><span id="Parser-3390"><a href="#Parser-3390"><span class="linenos">3390</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3391"><a href="#Parser-3391"><span class="linenos">3391</span></a> <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">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="Parser-3392"><a href="#Parser-3392"><span class="linenos">3392</span></a>
+</span><span id="Parser-3393"><a href="#Parser-3393"><span class="linenos">3393</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="Parser-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</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">count</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">()</span>
+</span><span id="Parser-3395"><a href="#Parser-3395"><span class="linenos">3395</span></a> <span class="p">)</span>
+</span><span id="Parser-3396"><a href="#Parser-3396"><span class="linenos">3396</span></a>
+</span><span id="Parser-3397"><a href="#Parser-3397"><span class="linenos">3397</span></a> <span class="k">def</span> <span class="nf">_parse_limit_by</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">t</span><span class="o">.</span><span class="n">List</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="Parser-3398"><a href="#Parser-3398"><span class="linenos">3398</span></a> <span class="k">return</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;BY&quot;</span><span class="p">)</span> <span class="ow">and</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_bitwise</span><span class="p">)</span>
+</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</span></a>
+</span><span id="Parser-3400"><a href="#Parser-3400"><span class="linenos">3400</span></a> <span class="k">def</span> <span class="nf">_parse_locks</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
+</span><span id="Parser-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3403"><a href="#Parser-3403"><span class="linenos">3403</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3404"><a href="#Parser-3404"><span class="linenos">3404</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
+</span><span id="Parser-3406"><a href="#Parser-3406"><span class="linenos">3406</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
+</span><span id="Parser-3407"><a href="#Parser-3407"><span class="linenos">3407</span></a> <span class="p">):</span>
+</span><span id="Parser-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3410"><a href="#Parser-3410"><span class="linenos">3410</span></a> <span class="k">break</span>
+</span><span id="Parser-3411"><a href="#Parser-3411"><span class="linenos">3411</span></a>
+</span><span id="Parser-3412"><a href="#Parser-3412"><span class="linenos">3412</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3413"><a href="#Parser-3413"><span class="linenos">3413</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;OF&quot;</span><span class="p">):</span>
+</span><span id="Parser-3414"><a href="#Parser-3414"><span class="linenos">3414</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-3415"><a href="#Parser-3415"><span class="linenos">3415</span></a>
+</span><span id="Parser-3416"><a href="#Parser-3416"><span class="linenos">3416</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3417"><a href="#Parser-3417"><span class="linenos">3417</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;NOWAIT&quot;</span><span class="p">):</span>
+</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3419"><a href="#Parser-3419"><span class="linenos">3419</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;WAIT&quot;</span><span class="p">):</span>
+</span><span id="Parser-3420"><a href="#Parser-3420"><span class="linenos">3420</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3421"><a href="#Parser-3421"><span class="linenos">3421</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;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
+</span><span id="Parser-3422"><a href="#Parser-3422"><span class="linenos">3422</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3423"><a href="#Parser-3423"><span class="linenos">3423</span></a>
-</span><span id="Parser-3424"><a href="#Parser-3424"><span class="linenos">3424</span></a> <span class="n">comments</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">comments</span>
-</span><span id="Parser-3425"><a href="#Parser-3425"><span class="linenos">3425</span></a> <span class="n">distinct</span> <span class="o">=</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">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</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="Parser-3426"><a href="#Parser-3426"><span class="linenos">3426</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
-</span><span id="Parser-3427"><a href="#Parser-3427"><span class="linenos">3427</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3428"><a href="#Parser-3428"><span class="linenos">3428</span></a>
-</span><span id="Parser-3429"><a href="#Parser-3429"><span class="linenos">3429</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><span id="Parser-3430"><a href="#Parser-3430"><span class="linenos">3430</span></a> <span class="n">operation</span><span class="p">,</span>
-</span><span id="Parser-3431"><a href="#Parser-3431"><span class="linenos">3431</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-3432"><a href="#Parser-3432"><span class="linenos">3432</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3433"><a href="#Parser-3433"><span class="linenos">3433</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="Parser-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
-</span><span id="Parser-3435"><a href="#Parser-3435"><span class="linenos">3435</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Parser-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a> <span class="p">)</span>
-</span><span id="Parser-3437"><a href="#Parser-3437"><span class="linenos">3437</span></a>
-</span><span id="Parser-3438"><a href="#Parser-3438"><span class="linenos">3438</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
-</span><span id="Parser-3439"><a href="#Parser-3439"><span class="linenos">3439</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Parser-3424"><a href="#Parser-3424"><span class="linenos">3424</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-3425"><a href="#Parser-3425"><span class="linenos">3425</span></a> <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">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
+</span><span id="Parser-3426"><a href="#Parser-3426"><span class="linenos">3426</span></a> <span class="p">)</span>
+</span><span id="Parser-3427"><a href="#Parser-3427"><span class="linenos">3427</span></a>
+</span><span id="Parser-3428"><a href="#Parser-3428"><span class="linenos">3428</span></a> <span class="k">return</span> <span class="n">locks</span>
+</span><span id="Parser-3429"><a href="#Parser-3429"><span class="linenos">3429</span></a>
+</span><span id="Parser-3430"><a href="#Parser-3430"><span class="linenos">3430</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3431"><a href="#Parser-3431"><span class="linenos">3431</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
+</span><span id="Parser-3432"><a href="#Parser-3432"><span class="linenos">3432</span></a> <span class="n">token_type</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">token_type</span>
+</span><span id="Parser-3433"><a href="#Parser-3433"><span class="linenos">3433</span></a>
+</span><span id="Parser-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
+</span><span id="Parser-3435"><a href="#Parser-3435"><span class="linenos">3435</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
+</span><span id="Parser-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
+</span><span id="Parser-3437"><a href="#Parser-3437"><span class="linenos">3437</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
+</span><span id="Parser-3438"><a href="#Parser-3438"><span class="linenos">3438</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3439"><a href="#Parser-3439"><span class="linenos">3439</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
</span><span id="Parser-3440"><a href="#Parser-3440"><span class="linenos">3440</span></a>
-</span><span id="Parser-3441"><a href="#Parser-3441"><span class="linenos">3441</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-3442"><a href="#Parser-3442"><span class="linenos">3442</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
-</span><span id="Parser-3443"><a href="#Parser-3443"><span class="linenos">3443</span></a> <span class="n">expr</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="n">arg</span><span class="p">)</span>
-</span><span id="Parser-3444"><a href="#Parser-3444"><span class="linenos">3444</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
-</span><span id="Parser-3445"><a href="#Parser-3445"><span class="linenos">3445</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
-</span><span id="Parser-3446"><a href="#Parser-3446"><span class="linenos">3446</span></a>
-</span><span id="Parser-3447"><a href="#Parser-3447"><span class="linenos">3447</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3448"><a href="#Parser-3448"><span class="linenos">3448</span></a>
-</span><span id="Parser-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a> <span class="k">def</span> <span class="nf">_parse_expression</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="Parser-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a>
-</span><span id="Parser-3452"><a href="#Parser-3452"><span class="linenos">3452</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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="Parser-3453"><a href="#Parser-3453"><span class="linenos">3453</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="Parser-3441"><a href="#Parser-3441"><span class="linenos">3441</span></a> <span class="n">comments</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">comments</span>
+</span><span id="Parser-3442"><a href="#Parser-3442"><span class="linenos">3442</span></a> <span class="n">distinct</span> <span class="o">=</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">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</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="Parser-3443"><a href="#Parser-3443"><span class="linenos">3443</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
+</span><span id="Parser-3444"><a href="#Parser-3444"><span class="linenos">3444</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3445"><a href="#Parser-3445"><span class="linenos">3445</span></a>
+</span><span id="Parser-3446"><a href="#Parser-3446"><span class="linenos">3446</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><span id="Parser-3447"><a href="#Parser-3447"><span class="linenos">3447</span></a> <span class="n">operation</span><span class="p">,</span>
+</span><span id="Parser-3448"><a href="#Parser-3448"><span class="linenos">3448</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
+</span><span id="Parser-3452"><a href="#Parser-3452"><span class="linenos">3452</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-3453"><a href="#Parser-3453"><span class="linenos">3453</span></a> <span class="p">)</span>
</span><span id="Parser-3454"><a href="#Parser-3454"><span class="linenos">3454</span></a>
-</span><span id="Parser-3455"><a href="#Parser-3455"><span class="linenos">3455</span></a> <span class="k">def</span> <span class="nf">_parse_equality</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="Parser-3456"><a href="#Parser-3456"><span class="linenos">3456</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="Parser-3455"><a href="#Parser-3455"><span class="linenos">3455</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
+</span><span id="Parser-3456"><a href="#Parser-3456"><span class="linenos">3456</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="Parser-3457"><a href="#Parser-3457"><span class="linenos">3457</span></a>
-</span><span id="Parser-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</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="Parser-3459"><a href="#Parser-3459"><span class="linenos">3459</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
-</span><span id="Parser-3460"><a href="#Parser-3460"><span class="linenos">3460</span></a>
-</span><span id="Parser-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-3463"><a href="#Parser-3463"><span class="linenos">3463</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
-</span><span id="Parser-3464"><a href="#Parser-3464"><span class="linenos">3464</span></a>
-</span><span id="Parser-3465"><a href="#Parser-3465"><span class="linenos">3465</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-3466"><a href="#Parser-3466"><span class="linenos">3466</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-3468"><a href="#Parser-3468"><span class="linenos">3468</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3469"><a href="#Parser-3469"><span class="linenos">3469</span></a>
-</span><span id="Parser-3470"><a href="#Parser-3470"><span class="linenos">3470</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-3471"><a href="#Parser-3471"><span class="linenos">3471</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">ISNULL</span><span class="p">):</span>
-</span><span id="Parser-3472"><a href="#Parser-3472"><span class="linenos">3472</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="Parser-3473"><a href="#Parser-3473"><span class="linenos">3473</span></a>
-</span><span id="Parser-3474"><a href="#Parser-3474"><span class="linenos">3474</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="Parser-3475"><a href="#Parser-3475"><span class="linenos">3475</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</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">NOTNULL</span><span class="p">):</span>
-</span><span id="Parser-3477"><a href="#Parser-3477"><span class="linenos">3477</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="Parser-3478"><a href="#Parser-3478"><span class="linenos">3478</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3479"><a href="#Parser-3479"><span class="linenos">3479</span></a>
-</span><span id="Parser-3480"><a href="#Parser-3480"><span class="linenos">3480</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
-</span><span id="Parser-3481"><a href="#Parser-3481"><span class="linenos">3481</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3482"><a href="#Parser-3482"><span class="linenos">3482</span></a>
-</span><span id="Parser-3483"><a href="#Parser-3483"><span class="linenos">3483</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">IS</span><span class="p">):</span>
-</span><span id="Parser-3484"><a href="#Parser-3484"><span class="linenos">3484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3485"><a href="#Parser-3485"><span class="linenos">3485</span></a>
-</span><span id="Parser-3486"><a href="#Parser-3486"><span class="linenos">3486</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3487"><a href="#Parser-3487"><span class="linenos">3487</span></a>
-</span><span id="Parser-3488"><a href="#Parser-3488"><span class="linenos">3488</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-3490"><a href="#Parser-3490"><span class="linenos">3490</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
-</span><span id="Parser-3491"><a href="#Parser-3491"><span class="linenos">3491</span></a>
-</span><span id="Parser-3492"><a href="#Parser-3492"><span class="linenos">3492</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;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
-</span><span id="Parser-3493"><a href="#Parser-3493"><span class="linenos">3493</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
-</span><span id="Parser-3494"><a href="#Parser-3494"><span class="linenos">3494</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">klass</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3495"><a href="#Parser-3495"><span class="linenos">3495</span></a>
-</span><span id="Parser-3496"><a href="#Parser-3496"><span class="linenos">3496</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
-</span><span id="Parser-3497"><a href="#Parser-3497"><span class="linenos">3497</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-3498"><a href="#Parser-3498"><span class="linenos">3498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3499"><a href="#Parser-3499"><span class="linenos">3499</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3500"><a href="#Parser-3500"><span class="linenos">3500</span></a>
-</span><span id="Parser-3501"><a href="#Parser-3501"><span class="linenos">3501</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">Is</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><span id="Parser-3502"><a href="#Parser-3502"><span class="linenos">3502</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">Not</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="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="Parser-3503"><a href="#Parser-3503"><span class="linenos">3503</span></a>
-</span><span id="Parser-3504"><a href="#Parser-3504"><span class="linenos">3504</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</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">In</span><span class="p">:</span>
-</span><span id="Parser-3505"><a href="#Parser-3505"><span class="linenos">3505</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3506"><a href="#Parser-3506"><span class="linenos">3506</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Parser-3507"><a href="#Parser-3507"><span class="linenos">3507</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">In</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">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
-</span><span id="Parser-3508"><a href="#Parser-3508"><span class="linenos">3508</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">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
-</span><span id="Parser-3509"><a href="#Parser-3509"><span class="linenos">3509</span></a> <span class="n">matched_l_paren</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
-</span><span id="Parser-3510"><a href="#Parser-3510"><span class="linenos">3510</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
-</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</span></a>
-</span><span id="Parser-3512"><a href="#Parser-3512"><span class="linenos">3512</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Parser-3513"><a href="#Parser-3513"><span class="linenos">3513</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">In</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">query</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="Parser-3514"><a href="#Parser-3514"><span class="linenos">3514</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3515"><a href="#Parser-3515"><span class="linenos">3515</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">In</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="Parser-3516"><a href="#Parser-3516"><span class="linenos">3516</span></a>
-</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="Parser-3518"><a href="#Parser-3518"><span class="linenos">3518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3519"><a href="#Parser-3519"><span class="linenos">3519</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
-</span><span id="Parser-3520"><a href="#Parser-3520"><span class="linenos">3520</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;Expecting ]&quot;</span><span class="p">)</span>
-</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3522"><a href="#Parser-3522"><span class="linenos">3522</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">In</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">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
-</span><span id="Parser-3523"><a href="#Parser-3523"><span class="linenos">3523</span></a>
-</span><span id="Parser-3524"><a href="#Parser-3524"><span class="linenos">3524</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3525"><a href="#Parser-3525"><span class="linenos">3525</span></a>
-</span><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
-</span><span id="Parser-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="n">low</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="Parser-3528"><a href="#Parser-3528"><span class="linenos">3528</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">AND</span><span class="p">)</span>
-</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a> <span class="n">high</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="Parser-3530"><a href="#Parser-3530"><span class="linenos">3530</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">Between</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">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
-</span><span id="Parser-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a>
-</span><span id="Parser-3532"><a href="#Parser-3532"><span class="linenos">3532</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
-</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3535"><a href="#Parser-3535"><span class="linenos">3535</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">Escape</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="Parser-3536"><a href="#Parser-3536"><span class="linenos">3536</span></a>
-</span><span id="Parser-3537"><a href="#Parser-3537"><span class="linenos">3537</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Interval</span><span class="p">]:</span>
-</span><span id="Parser-3538"><a href="#Parser-3538"><span class="linenos">3538</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</span></a>
-</span><span id="Parser-3540"><a href="#Parser-3540"><span class="linenos">3540</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
-</span><span id="Parser-3541"><a href="#Parser-3541"><span class="linenos">3541</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-3459"><a href="#Parser-3459"><span class="linenos">3459</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
+</span><span id="Parser-3460"><a href="#Parser-3460"><span class="linenos">3460</span></a> <span class="n">expr</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="n">arg</span><span class="p">)</span>
+</span><span id="Parser-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
+</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
+</span><span id="Parser-3463"><a href="#Parser-3463"><span class="linenos">3463</span></a>
+</span><span id="Parser-3464"><a href="#Parser-3464"><span class="linenos">3464</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3465"><a href="#Parser-3465"><span class="linenos">3465</span></a>
+</span><span id="Parser-3466"><a href="#Parser-3466"><span class="linenos">3466</span></a> <span class="k">def</span> <span class="nf">_parse_expression</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="Parser-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3468"><a href="#Parser-3468"><span class="linenos">3468</span></a>
+</span><span id="Parser-3469"><a href="#Parser-3469"><span class="linenos">3469</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</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="Parser-3470"><a href="#Parser-3470"><span class="linenos">3470</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="Parser-3471"><a href="#Parser-3471"><span class="linenos">3471</span></a>
+</span><span id="Parser-3472"><a href="#Parser-3472"><span class="linenos">3472</span></a> <span class="k">def</span> <span class="nf">_parse_equality</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="Parser-3473"><a href="#Parser-3473"><span class="linenos">3473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="Parser-3474"><a href="#Parser-3474"><span class="linenos">3474</span></a>
+</span><span id="Parser-3475"><a href="#Parser-3475"><span class="linenos">3475</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</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="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
+</span><span id="Parser-3477"><a href="#Parser-3477"><span class="linenos">3477</span></a>
+</span><span id="Parser-3478"><a href="#Parser-3478"><span class="linenos">3478</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-3479"><a href="#Parser-3479"><span class="linenos">3479</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-3480"><a href="#Parser-3480"><span class="linenos">3480</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
+</span><span id="Parser-3481"><a href="#Parser-3481"><span class="linenos">3481</span></a>
+</span><span id="Parser-3482"><a href="#Parser-3482"><span class="linenos">3482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-3483"><a href="#Parser-3483"><span class="linenos">3483</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3484"><a href="#Parser-3484"><span class="linenos">3484</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-3485"><a href="#Parser-3485"><span class="linenos">3485</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3486"><a href="#Parser-3486"><span class="linenos">3486</span></a>
+</span><span id="Parser-3487"><a href="#Parser-3487"><span class="linenos">3487</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-3488"><a href="#Parser-3488"><span class="linenos">3488</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">ISNULL</span><span class="p">):</span>
+</span><span id="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="Parser-3490"><a href="#Parser-3490"><span class="linenos">3490</span></a>
+</span><span id="Parser-3491"><a href="#Parser-3491"><span class="linenos">3491</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="Parser-3492"><a href="#Parser-3492"><span class="linenos">3492</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="Parser-3493"><a href="#Parser-3493"><span class="linenos">3493</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">NOTNULL</span><span class="p">):</span>
+</span><span id="Parser-3494"><a href="#Parser-3494"><span class="linenos">3494</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">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="Parser-3495"><a href="#Parser-3495"><span class="linenos">3495</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3496"><a href="#Parser-3496"><span class="linenos">3496</span></a>
+</span><span id="Parser-3497"><a href="#Parser-3497"><span class="linenos">3497</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
+</span><span id="Parser-3498"><a href="#Parser-3498"><span class="linenos">3498</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">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3499"><a href="#Parser-3499"><span class="linenos">3499</span></a>
+</span><span id="Parser-3500"><a href="#Parser-3500"><span class="linenos">3500</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">IS</span><span class="p">):</span>
+</span><span id="Parser-3501"><a href="#Parser-3501"><span class="linenos">3501</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3502"><a href="#Parser-3502"><span class="linenos">3502</span></a>
+</span><span id="Parser-3503"><a href="#Parser-3503"><span class="linenos">3503</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3504"><a href="#Parser-3504"><span class="linenos">3504</span></a>
+</span><span id="Parser-3505"><a href="#Parser-3505"><span class="linenos">3505</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3506"><a href="#Parser-3506"><span class="linenos">3506</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-3507"><a href="#Parser-3507"><span class="linenos">3507</span></a> <span class="n">negate</span> <span class="o">=</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">NOT</span><span class="p">)</span>
+</span><span id="Parser-3508"><a href="#Parser-3508"><span class="linenos">3508</span></a>
+</span><span id="Parser-3509"><a href="#Parser-3509"><span class="linenos">3509</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;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
+</span><span id="Parser-3510"><a href="#Parser-3510"><span class="linenos">3510</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
+</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</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">klass</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3512"><a href="#Parser-3512"><span class="linenos">3512</span></a>
+</span><span id="Parser-3513"><a href="#Parser-3513"><span class="linenos">3513</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
+</span><span id="Parser-3514"><a href="#Parser-3514"><span class="linenos">3514</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-3515"><a href="#Parser-3515"><span class="linenos">3515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3516"><a href="#Parser-3516"><span class="linenos">3516</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</span></a>
+</span><span id="Parser-3518"><a href="#Parser-3518"><span class="linenos">3518</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">Is</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><span id="Parser-3519"><a href="#Parser-3519"><span class="linenos">3519</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">Not</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="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Parser-3520"><a href="#Parser-3520"><span class="linenos">3520</span></a>
+</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</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">In</span><span class="p">:</span>
+</span><span id="Parser-3522"><a href="#Parser-3522"><span class="linenos">3522</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3523"><a href="#Parser-3523"><span class="linenos">3523</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-3524"><a href="#Parser-3524"><span class="linenos">3524</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">In</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">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
+</span><span id="Parser-3525"><a href="#Parser-3525"><span class="linenos">3525</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">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
+</span><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a> <span class="n">matched_l_paren</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
+</span><span id="Parser-3527"><a href="#Parser-3527"><span class="linenos">3527</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-3528"><a href="#Parser-3528"><span class="linenos">3528</span></a>
+</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Parser-3530"><a href="#Parser-3530"><span class="linenos">3530</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">In</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">query</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="Parser-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3532"><a href="#Parser-3532"><span class="linenos">3532</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">In</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="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</span></a>
+</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="Parser-3535"><a href="#Parser-3535"><span class="linenos">3535</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3536"><a href="#Parser-3536"><span class="linenos">3536</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
+</span><span id="Parser-3537"><a href="#Parser-3537"><span class="linenos">3537</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;Expecting ]&quot;</span><span class="p">)</span>
+</span><span id="Parser-3538"><a href="#Parser-3538"><span class="linenos">3538</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</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">In</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">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
+</span><span id="Parser-3540"><a href="#Parser-3540"><span class="linenos">3540</span></a>
+</span><span id="Parser-3541"><a href="#Parser-3541"><span class="linenos">3541</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3542"><a href="#Parser-3542"><span class="linenos">3542</span></a>
-</span><span id="Parser-3543"><a href="#Parser-3543"><span class="linenos">3543</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">STRING</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="Parser-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</span></a>
-</span><span id="Parser-3548"><a href="#Parser-3548"><span class="linenos">3548</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="Parser-3549"><a href="#Parser-3549"><span class="linenos">3549</span></a> <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">Column</span><span class="p">)</span>
-</span><span id="Parser-3550"><a href="#Parser-3550"><span class="linenos">3550</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
-</span><span id="Parser-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</span></a> <span class="ow">and</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;IS&quot;</span>
-</span><span id="Parser-3553"><a href="#Parser-3553"><span class="linenos">3553</span></a> <span class="p">):</span>
-</span><span id="Parser-3554"><a href="#Parser-3554"><span class="linenos">3554</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3543"><a href="#Parser-3543"><span class="linenos">3543</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
+</span><span id="Parser-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a> <span class="n">low</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="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</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">AND</span><span class="p">)</span>
+</span><span id="Parser-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a> <span class="n">high</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="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</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">Between</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">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
+</span><span id="Parser-3548"><a href="#Parser-3548"><span class="linenos">3548</span></a>
+</span><span id="Parser-3549"><a href="#Parser-3549"><span class="linenos">3549</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3550"><a href="#Parser-3550"><span class="linenos">3550</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
+</span><span id="Parser-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</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">Escape</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="Parser-3553"><a href="#Parser-3553"><span class="linenos">3553</span></a>
+</span><span id="Parser-3554"><a href="#Parser-3554"><span class="linenos">3554</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Interval</span><span class="p">]:</span>
+</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3556"><a href="#Parser-3556"><span class="linenos">3556</span></a>
-</span><span id="Parser-3557"><a href="#Parser-3557"><span class="linenos">3557</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</span></a> <span class="ow">not</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="Parser-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a> <span class="p">)</span>
-</span><span id="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</span></a>
-</span><span id="Parser-3562"><a href="#Parser-3562"><span class="linenos">3562</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
-</span><span id="Parser-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="Parser-3564"><a href="#Parser-3564"><span class="linenos">3564</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="Parser-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Parser-3566"><a href="#Parser-3566"><span class="linenos">3566</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Parser-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
-</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a>
-</span><span id="Parser-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Parser-3571"><a href="#Parser-3571"><span class="linenos">3571</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
-</span><span id="Parser-3572"><a href="#Parser-3572"><span class="linenos">3572</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-3574"><a href="#Parser-3574"><span class="linenos">3574</span></a>
-</span><span id="Parser-3575"><a href="#Parser-3575"><span class="linenos">3575</span></a> <span class="n">this</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">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="Parser-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <span class="n">unit</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">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-3577"><a href="#Parser-3577"><span class="linenos">3577</span></a>
-</span><span id="Parser-3578"><a href="#Parser-3578"><span class="linenos">3578</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">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</span></a>
-</span><span id="Parser-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</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="Parser-3581"><a href="#Parser-3581"><span class="linenos">3581</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a>
-</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
-</span><span id="Parser-3585"><a href="#Parser-3585"><span class="linenos">3585</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><span id="Parser-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="Parser-3587"><a href="#Parser-3587"><span class="linenos">3587</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3588"><a href="#Parser-3588"><span class="linenos">3588</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="Parser-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="p">)</span>
-</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</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">DPIPE</span><span class="p">):</span>
-</span><span id="Parser-3591"><a href="#Parser-3591"><span class="linenos">3591</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><span id="Parser-3592"><a href="#Parser-3592"><span class="linenos">3592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
-</span><span id="Parser-3593"><a href="#Parser-3593"><span class="linenos">3593</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3594"><a href="#Parser-3594"><span class="linenos">3594</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="Parser-3595"><a href="#Parser-3595"><span class="linenos">3595</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
-</span><span id="Parser-3596"><a href="#Parser-3596"><span class="linenos">3596</span></a> <span class="p">)</span>
-</span><span id="Parser-3597"><a href="#Parser-3597"><span class="linenos">3597</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">DQMARK</span><span class="p">):</span>
-</span><span id="Parser-3598"><a href="#Parser-3598"><span class="linenos">3598</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">Coalesce</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
-</span><span id="Parser-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
-</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</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><span id="Parser-3601"><a href="#Parser-3601"><span class="linenos">3601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3602"><a href="#Parser-3602"><span class="linenos">3602</span></a> <span class="p">)</span>
-</span><span id="Parser-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</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><span id="Parser-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3557"><a href="#Parser-3557"><span class="linenos">3557</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
+</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a>
+</span><span id="Parser-3560"><a href="#Parser-3560"><span class="linenos">3560</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">STRING</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="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3562"><a href="#Parser-3562"><span class="linenos">3562</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3564"><a href="#Parser-3564"><span class="linenos">3564</span></a>
+</span><span id="Parser-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="Parser-3566"><a href="#Parser-3566"><span class="linenos">3566</span></a> <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">Column</span><span class="p">)</span>
+</span><span id="Parser-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
+</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Parser-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a> <span class="ow">and</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;IS&quot;</span>
+</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</span></a> <span class="p">):</span>
+</span><span id="Parser-3571"><a href="#Parser-3571"><span class="linenos">3571</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3572"><a href="#Parser-3572"><span class="linenos">3572</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a>
+</span><span id="Parser-3574"><a href="#Parser-3574"><span class="linenos">3574</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="Parser-3575"><a href="#Parser-3575"><span class="linenos">3575</span></a> <span class="ow">not</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="Parser-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3577"><a href="#Parser-3577"><span class="linenos">3577</span></a> <span class="p">)</span>
+</span><span id="Parser-3578"><a href="#Parser-3578"><span class="linenos">3578</span></a>
+</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
+</span><span id="Parser-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="Parser-3581"><a href="#Parser-3581"><span class="linenos">3581</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="Parser-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Parser-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
+</span><span id="Parser-3585"><a href="#Parser-3585"><span class="linenos">3585</span></a>
+</span><span id="Parser-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Parser-3587"><a href="#Parser-3587"><span class="linenos">3587</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Parser-3588"><a href="#Parser-3588"><span class="linenos">3588</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
+</span><span id="Parser-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-3591"><a href="#Parser-3591"><span class="linenos">3591</span></a>
+</span><span id="Parser-3592"><a href="#Parser-3592"><span class="linenos">3592</span></a> <span class="n">this</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">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="Parser-3593"><a href="#Parser-3593"><span class="linenos">3593</span></a> <span class="n">unit</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">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-3594"><a href="#Parser-3594"><span class="linenos">3594</span></a>
+</span><span id="Parser-3595"><a href="#Parser-3595"><span class="linenos">3595</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">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="Parser-3596"><a href="#Parser-3596"><span class="linenos">3596</span></a>
+</span><span id="Parser-3597"><a href="#Parser-3597"><span class="linenos">3597</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</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="Parser-3598"><a href="#Parser-3598"><span class="linenos">3598</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a>
+</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3601"><a href="#Parser-3601"><span class="linenos">3601</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
+</span><span id="Parser-3602"><a href="#Parser-3602"><span class="linenos">3602</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><span id="Parser-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="Parser-3606"><a href="#Parser-3606"><span class="linenos">3606</span></a> <span class="p">)</span>
-</span><span id="Parser-3607"><a href="#Parser-3607"><span class="linenos">3607</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3608"><a href="#Parser-3608"><span class="linenos">3608</span></a> <span class="k">break</span>
-</span><span id="Parser-3609"><a href="#Parser-3609"><span class="linenos">3609</span></a>
-</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</span></a>
-</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a> <span class="k">def</span> <span class="nf">_parse_term</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="Parser-3613"><a href="#Parser-3613"><span class="linenos">3613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
-</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</span></a>
-</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</span></a> <span class="k">def</span> <span class="nf">_parse_factor</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="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
-</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-3618"><a href="#Parser-3618"><span class="linenos">3618</span></a>
-</span><span id="Parser-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
-</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</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><span id="Parser-3621"><a href="#Parser-3621"><span class="linenos">3621</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="Parser-3622"><a href="#Parser-3622"><span class="linenos">3622</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</span></a> <span class="p">)</span>
-</span><span id="Parser-3626"><a href="#Parser-3626"><span class="linenos">3626</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">):</span>
-</span><span id="Parser-3627"><a href="#Parser-3627"><span class="linenos">3627</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
-</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
-</span><span id="Parser-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a>
-</span><span id="Parser-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3607"><a href="#Parser-3607"><span class="linenos">3607</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</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">DPIPE</span><span class="p">):</span>
+</span><span id="Parser-3608"><a href="#Parser-3608"><span class="linenos">3608</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><span id="Parser-3609"><a href="#Parser-3609"><span class="linenos">3609</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
+</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
+</span><span id="Parser-3613"><a href="#Parser-3613"><span class="linenos">3613</span></a> <span class="p">)</span>
+</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</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">DQMARK</span><span class="p">):</span>
+</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</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">Coalesce</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
+</span><span id="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</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><span id="Parser-3618"><a href="#Parser-3618"><span class="linenos">3618</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a> <span class="p">)</span>
+</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="Parser-3621"><a href="#Parser-3621"><span class="linenos">3621</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><span id="Parser-3622"><a href="#Parser-3622"><span class="linenos">3622</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a> <span class="p">)</span>
+</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</span></a> <span class="k">break</span>
+</span><span id="Parser-3626"><a href="#Parser-3626"><span class="linenos">3626</span></a>
+</span><span id="Parser-3627"><a href="#Parser-3627"><span class="linenos">3627</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</span></a>
+</span><span id="Parser-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a> <span class="k">def</span> <span class="nf">_parse_term</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="Parser-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
</span><span id="Parser-3631"><a href="#Parser-3631"><span class="linenos">3631</span></a>
-</span><span id="Parser-3632"><a href="#Parser-3632"><span class="linenos">3632</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</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="Parser-3633"><a href="#Parser-3633"><span class="linenos">3633</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
-</span><span id="Parser-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a>
-</span><span id="Parser-3635"><a href="#Parser-3635"><span class="linenos">3635</span></a> <span class="k">def</span> <span class="nf">_parse_unary</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="Parser-3636"><a href="#Parser-3636"><span class="linenos">3636</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-3637"><a href="#Parser-3637"><span class="linenos">3637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-3638"><a href="#Parser-3638"><span class="linenos">3638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
-</span><span id="Parser-3639"><a href="#Parser-3639"><span class="linenos">3639</span></a>
-</span><span id="Parser-3640"><a href="#Parser-3640"><span class="linenos">3640</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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="Parser-3641"><a href="#Parser-3641"><span class="linenos">3641</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
-</span><span id="Parser-3642"><a href="#Parser-3642"><span class="linenos">3642</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
-</span><span id="Parser-3643"><a href="#Parser-3643"><span class="linenos">3643</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
-</span><span id="Parser-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="k">while</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</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="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="n">interval</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="c1"># type: ignore</span>
-</span><span id="Parser-3646"><a href="#Parser-3646"><span class="linenos">3646</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3647"><a href="#Parser-3647"><span class="linenos">3647</span></a> <span class="p">)</span>
+</span><span id="Parser-3632"><a href="#Parser-3632"><span class="linenos">3632</span></a> <span class="k">def</span> <span class="nf">_parse_factor</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="Parser-3633"><a href="#Parser-3633"><span class="linenos">3633</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
+</span><span id="Parser-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-3635"><a href="#Parser-3635"><span class="linenos">3635</span></a>
+</span><span id="Parser-3636"><a href="#Parser-3636"><span class="linenos">3636</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
+</span><span id="Parser-3637"><a href="#Parser-3637"><span class="linenos">3637</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><span id="Parser-3638"><a href="#Parser-3638"><span class="linenos">3638</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="Parser-3639"><a href="#Parser-3639"><span class="linenos">3639</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3640"><a href="#Parser-3640"><span class="linenos">3640</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="Parser-3641"><a href="#Parser-3641"><span class="linenos">3641</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="Parser-3642"><a href="#Parser-3642"><span class="linenos">3642</span></a> <span class="p">)</span>
+</span><span id="Parser-3643"><a href="#Parser-3643"><span class="linenos">3643</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">):</span>
+</span><span id="Parser-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
+</span><span id="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
+</span><span id="Parser-3646"><a href="#Parser-3646"><span class="linenos">3646</span></a>
+</span><span id="Parser-3647"><a href="#Parser-3647"><span class="linenos">3647</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3648"><a href="#Parser-3648"><span class="linenos">3648</span></a>
-</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="k">return</span> <span class="n">interval</span>
-</span><span id="Parser-3650"><a href="#Parser-3650"><span class="linenos">3650</span></a>
-</span><span id="Parser-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</span></a> <span class="n">data_type</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 class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</span></a>
-</span><span id="Parser-3655"><a href="#Parser-3655"><span class="linenos">3655</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="Parser-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Parser-3657"><a href="#Parser-3657"><span class="linenos">3657</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3658"><a href="#Parser-3658"><span class="linenos">3658</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
-</span><span id="Parser-3660"><a href="#Parser-3660"><span class="linenos">3660</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="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">data_type</span><span class="p">)</span>
-</span><span id="Parser-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3662"><a href="#Parser-3662"><span class="linenos">3662</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3663"><a href="#Parser-3663"><span class="linenos">3663</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3664"><a href="#Parser-3664"><span class="linenos">3664</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</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="Parser-3650"><a href="#Parser-3650"><span class="linenos">3650</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
+</span><span id="Parser-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a>
+</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</span></a> <span class="k">def</span> <span class="nf">_parse_unary</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="Parser-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-3655"><a href="#Parser-3655"><span class="linenos">3655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
+</span><span id="Parser-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a>
+</span><span id="Parser-3657"><a href="#Parser-3657"><span class="linenos">3657</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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="Parser-3658"><a href="#Parser-3658"><span class="linenos">3658</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
+</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="Parser-3660"><a href="#Parser-3660"><span class="linenos">3660</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
+</span><span id="Parser-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a> <span class="k">while</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</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="Parser-3662"><a href="#Parser-3662"><span class="linenos">3662</span></a> <span class="n">interval</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="c1"># type: ignore</span>
+</span><span id="Parser-3663"><a href="#Parser-3663"><span class="linenos">3663</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3664"><a href="#Parser-3664"><span class="linenos">3664</span></a> <span class="p">)</span>
</span><span id="Parser-3665"><a href="#Parser-3665"><span class="linenos">3665</span></a>
-</span><span id="Parser-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="Parser-3667"><a href="#Parser-3667"><span class="linenos">3667</span></a>
-</span><span id="Parser-3668"><a href="#Parser-3668"><span class="linenos">3668</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</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">DataTypeParam</span><span class="p">]:</span>
-</span><span id="Parser-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3671"><a href="#Parser-3671"><span class="linenos">3671</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3672"><a href="#Parser-3672"><span class="linenos">3672</span></a>
-</span><span id="Parser-3673"><a href="#Parser-3673"><span class="linenos">3673</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="Parser-3674"><a href="#Parser-3674"><span class="linenos">3674</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3675"><a href="#Parser-3675"><span class="linenos">3675</span></a> <span class="p">)</span>
-</span><span id="Parser-3676"><a href="#Parser-3676"><span class="linenos">3676</span></a>
-</span><span id="Parser-3677"><a href="#Parser-3677"><span class="linenos">3677</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3679"><a href="#Parser-3679"><span class="linenos">3679</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="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3681"><a href="#Parser-3681"><span class="linenos">3681</span></a>
-</span><span id="Parser-3682"><a href="#Parser-3682"><span class="linenos">3682</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="Parser-3683"><a href="#Parser-3683"><span class="linenos">3683</span></a>
-</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="Parser-3687"><a href="#Parser-3687"><span class="linenos">3687</span></a> <span class="p">)</span>
-</span><span id="Parser-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="Parser-3689"><a href="#Parser-3689"><span class="linenos">3689</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Parser-3690"><a href="#Parser-3690"><span class="linenos">3690</span></a>
-</span><span id="Parser-3691"><a href="#Parser-3691"><span class="linenos">3691</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-3692"><a href="#Parser-3692"><span class="linenos">3692</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;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-3668"><a href="#Parser-3668"><span class="linenos">3668</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a> <span class="n">data_type</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 class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3671"><a href="#Parser-3671"><span class="linenos">3671</span></a>
+</span><span id="Parser-3672"><a href="#Parser-3672"><span class="linenos">3672</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="Parser-3673"><a href="#Parser-3673"><span class="linenos">3673</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Parser-3674"><a href="#Parser-3674"><span class="linenos">3674</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3675"><a href="#Parser-3675"><span class="linenos">3675</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-3676"><a href="#Parser-3676"><span class="linenos">3676</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
+</span><span id="Parser-3677"><a href="#Parser-3677"><span class="linenos">3677</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="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">data_type</span><span class="p">)</span>
+</span><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3679"><a href="#Parser-3679"><span class="linenos">3679</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3681"><a href="#Parser-3681"><span class="linenos">3681</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="Parser-3682"><a href="#Parser-3682"><span class="linenos">3682</span></a>
+</span><span id="Parser-3683"><a href="#Parser-3683"><span class="linenos">3683</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a>
+</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</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">DataTypeParam</span><span class="p">]:</span>
+</span><span id="Parser-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-3687"><a href="#Parser-3687"><span class="linenos">3687</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3689"><a href="#Parser-3689"><span class="linenos">3689</span></a>
+</span><span id="Parser-3690"><a href="#Parser-3690"><span class="linenos">3690</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="Parser-3691"><a href="#Parser-3691"><span class="linenos">3691</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3692"><a href="#Parser-3692"><span class="linenos">3692</span></a> <span class="p">)</span>
</span><span id="Parser-3693"><a href="#Parser-3693"><span class="linenos">3693</span></a>
-</span><span id="Parser-3694"><a href="#Parser-3694"><span class="linenos">3694</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="Parser-3696"><a href="#Parser-3696"><span class="linenos">3696</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
-</span><span id="Parser-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Parser-3694"><a href="#Parser-3694"><span class="linenos">3694</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3696"><a href="#Parser-3696"><span class="linenos">3696</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="Parser-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3698"><a href="#Parser-3698"><span class="linenos">3698</span></a>
-</span><span id="Parser-3699"><a href="#Parser-3699"><span class="linenos">3699</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="Parser-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </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 class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Parser-3701"><a href="#Parser-3701"><span class="linenos">3701</span></a>
-</span><span id="Parser-3702"><a href="#Parser-3702"><span class="linenos">3702</span></a> <span class="k">return</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">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-3705"><a href="#Parser-3705"><span class="linenos">3705</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3706"><a href="#Parser-3706"><span class="linenos">3706</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3708"><a href="#Parser-3708"><span class="linenos">3708</span></a>
-</span><span id="Parser-3709"><a href="#Parser-3709"><span class="linenos">3709</span></a> <span class="n">type_token</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">token_type</span>
+</span><span id="Parser-3699"><a href="#Parser-3699"><span class="linenos">3699</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="Parser-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a>
+</span><span id="Parser-3701"><a href="#Parser-3701"><span class="linenos">3701</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_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-3702"><a href="#Parser-3702"><span class="linenos">3702</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a> <span class="p">)</span>
+</span><span id="Parser-3705"><a href="#Parser-3705"><span class="linenos">3705</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="Parser-3706"><a href="#Parser-3706"><span class="linenos">3706</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</span></a>
+</span><span id="Parser-3708"><a href="#Parser-3708"><span class="linenos">3708</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-3709"><a href="#Parser-3709"><span class="linenos">3709</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;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-3710"><a href="#Parser-3710"><span class="linenos">3710</span></a>
-</span><span id="Parser-3711"><a href="#Parser-3711"><span class="linenos">3711</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
-</span><span id="Parser-3712"><a href="#Parser-3712"><span class="linenos">3712</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">PseudoType</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-3713"><a href="#Parser-3713"><span class="linenos">3713</span></a>
-</span><span id="Parser-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
-</span><span id="Parser-3715"><a href="#Parser-3715"><span class="linenos">3715</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">ObjectIdentifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-3716"><a href="#Parser-3716"><span class="linenos">3716</span></a>
-</span><span id="Parser-3717"><a href="#Parser-3717"><span class="linenos">3717</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
-</span><span id="Parser-3718"><a href="#Parser-3718"><span class="linenos">3718</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
-</span><span id="Parser-3719"><a href="#Parser-3719"><span class="linenos">3719</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
-</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</span></a>
-</span><span id="Parser-3723"><a href="#Parser-3723"><span class="linenos">3723</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</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_struct_types</span><span class="p">)</span>
-</span><span id="Parser-3726"><a href="#Parser-3726"><span class="linenos">3726</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="Parser-3727"><a href="#Parser-3727"><span class="linenos">3727</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><span id="Parser-3728"><a href="#Parser-3728"><span class="linenos">3728</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3729"><a href="#Parser-3729"><span class="linenos">3729</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Parser-3730"><a href="#Parser-3730"><span class="linenos">3730</span></a> <span class="p">)</span>
-</span><span id="Parser-3731"><a href="#Parser-3731"><span class="linenos">3731</span></a> <span class="p">)</span>
-</span><span id="Parser-3732"><a href="#Parser-3732"><span class="linenos">3732</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-3733"><a href="#Parser-3733"><span class="linenos">3733</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_equality</span><span class="p">)</span>
-</span><span id="Parser-3734"><a href="#Parser-3734"><span class="linenos">3734</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
-</span><span id="Parser-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-3736"><a href="#Parser-3736"><span class="linenos">3736</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a> <span class="p">)</span>
-</span><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</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="Parser-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</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><span id="Parser-3741"><a href="#Parser-3741"><span class="linenos">3741</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3742"><a href="#Parser-3742"><span class="linenos">3742</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Parser-3743"><a href="#Parser-3743"><span class="linenos">3743</span></a> <span class="p">)</span>
-</span><span id="Parser-3744"><a href="#Parser-3744"><span class="linenos">3744</span></a> <span class="p">)</span>
-</span><span id="Parser-3745"><a href="#Parser-3745"><span class="linenos">3745</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
-</span><span id="Parser-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3747"><a href="#Parser-3747"><span class="linenos">3747</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_type_size</span><span class="p">)</span>
-</span><span id="Parser-3748"><a href="#Parser-3748"><span class="linenos">3748</span></a>
-</span><span id="Parser-3749"><a href="#Parser-3749"><span class="linenos">3749</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</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">R_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3750"><a href="#Parser-3750"><span class="linenos">3750</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3752"><a href="#Parser-3752"><span class="linenos">3752</span></a>
-</span><span id="Parser-3753"><a href="#Parser-3753"><span class="linenos">3753</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a>
-</span><span id="Parser-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3756"><a href="#Parser-3756"><span class="linenos">3756</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3757"><a href="#Parser-3757"><span class="linenos">3757</span></a>
-</span><span id="Parser-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</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">LT</span><span class="p">):</span>
-</span><span id="Parser-3759"><a href="#Parser-3759"><span class="linenos">3759</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-3760"><a href="#Parser-3760"><span class="linenos">3760</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-3761"><a href="#Parser-3761"><span class="linenos">3761</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3762"><a href="#Parser-3762"><span class="linenos">3762</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><span id="Parser-3763"><a href="#Parser-3763"><span class="linenos">3763</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3764"><a href="#Parser-3764"><span class="linenos">3764</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</span></a> <span class="p">)</span>
-</span><span id="Parser-3766"><a href="#Parser-3766"><span class="linenos">3766</span></a> <span class="p">)</span>
-</span><span id="Parser-3767"><a href="#Parser-3767"><span class="linenos">3767</span></a>
-</span><span id="Parser-3768"><a href="#Parser-3768"><span class="linenos">3768</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="Parser-3769"><a href="#Parser-3769"><span class="linenos">3769</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;Expecting &gt;&quot;</span><span class="p">)</span>
-</span><span id="Parser-3770"><a href="#Parser-3770"><span class="linenos">3770</span></a>
-</span><span id="Parser-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a> <span class="k">if</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">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
-</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="n">values</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_conjunction</span><span class="p">)</span>
-</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a> <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">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
+</span><span id="Parser-3711"><a href="#Parser-3711"><span class="linenos">3711</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Parser-3713"><a href="#Parser-3713"><span class="linenos">3713</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
+</span><span id="Parser-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Parser-3715"><a href="#Parser-3715"><span class="linenos">3715</span></a>
+</span><span id="Parser-3716"><a href="#Parser-3716"><span class="linenos">3716</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="Parser-3717"><a href="#Parser-3717"><span class="linenos">3717</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </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 class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Parser-3718"><a href="#Parser-3718"><span class="linenos">3718</span></a>
+</span><span id="Parser-3719"><a href="#Parser-3719"><span class="linenos">3719</span></a> <span class="k">return</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">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</span></a>
+</span><span id="Parser-3726"><a href="#Parser-3726"><span class="linenos">3726</span></a> <span class="n">type_token</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">token_type</span>
+</span><span id="Parser-3727"><a href="#Parser-3727"><span class="linenos">3727</span></a>
+</span><span id="Parser-3728"><a href="#Parser-3728"><span class="linenos">3728</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
+</span><span id="Parser-3729"><a href="#Parser-3729"><span class="linenos">3729</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">PseudoType</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-3730"><a href="#Parser-3730"><span class="linenos">3730</span></a>
+</span><span id="Parser-3731"><a href="#Parser-3731"><span class="linenos">3731</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
+</span><span id="Parser-3732"><a href="#Parser-3732"><span class="linenos">3732</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">ObjectIdentifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-3733"><a href="#Parser-3733"><span class="linenos">3733</span></a>
+</span><span id="Parser-3734"><a href="#Parser-3734"><span class="linenos">3734</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
+</span><span id="Parser-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
+</span><span id="Parser-3736"><a href="#Parser-3736"><span class="linenos">3736</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
+</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a>
+</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3741"><a href="#Parser-3741"><span class="linenos">3741</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-3742"><a href="#Parser-3742"><span class="linenos">3742</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_struct_types</span><span class="p">)</span>
+</span><span id="Parser-3743"><a href="#Parser-3743"><span class="linenos">3743</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="Parser-3744"><a href="#Parser-3744"><span class="linenos">3744</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><span id="Parser-3745"><a href="#Parser-3745"><span class="linenos">3745</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3747"><a href="#Parser-3747"><span class="linenos">3747</span></a> <span class="p">)</span>
+</span><span id="Parser-3748"><a href="#Parser-3748"><span class="linenos">3748</span></a> <span class="p">)</span>
+</span><span id="Parser-3749"><a href="#Parser-3749"><span class="linenos">3749</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-3750"><a href="#Parser-3750"><span class="linenos">3750</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_equality</span><span class="p">)</span>
+</span><span id="Parser-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
+</span><span id="Parser-3752"><a href="#Parser-3752"><span class="linenos">3752</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-3753"><a href="#Parser-3753"><span class="linenos">3753</span></a> <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="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a> <span class="p">)</span>
+</span><span id="Parser-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</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="Parser-3756"><a href="#Parser-3756"><span class="linenos">3756</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3757"><a href="#Parser-3757"><span class="linenos">3757</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><span id="Parser-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3759"><a href="#Parser-3759"><span class="linenos">3759</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3760"><a href="#Parser-3760"><span class="linenos">3760</span></a> <span class="p">)</span>
+</span><span id="Parser-3761"><a href="#Parser-3761"><span class="linenos">3761</span></a> <span class="p">)</span>
+</span><span id="Parser-3762"><a href="#Parser-3762"><span class="linenos">3762</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
+</span><span id="Parser-3763"><a href="#Parser-3763"><span class="linenos">3763</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3764"><a href="#Parser-3764"><span class="linenos">3764</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_type_size</span><span class="p">)</span>
+</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</span></a>
+</span><span id="Parser-3766"><a href="#Parser-3766"><span class="linenos">3766</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</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">R_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3767"><a href="#Parser-3767"><span class="linenos">3767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3768"><a href="#Parser-3768"><span class="linenos">3768</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3769"><a href="#Parser-3769"><span class="linenos">3769</span></a>
+</span><span id="Parser-3770"><a href="#Parser-3770"><span class="linenos">3770</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a>
+</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3774"><a href="#Parser-3774"><span class="linenos">3774</span></a>
-</span><span id="Parser-3775"><a href="#Parser-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
-</span><span id="Parser-3776"><a href="#Parser-3776"><span class="linenos">3776</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3777"><a href="#Parser-3777"><span class="linenos">3777</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3778"><a href="#Parser-3778"><span class="linenos">3778</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3779"><a href="#Parser-3779"><span class="linenos">3779</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
-</span><span id="Parser-3780"><a href="#Parser-3780"><span class="linenos">3780</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
-</span><span id="Parser-3781"><a href="#Parser-3781"><span class="linenos">3781</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
-</span><span id="Parser-3782"><a href="#Parser-3782"><span class="linenos">3782</span></a> <span class="p">)</span>
-</span><span id="Parser-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</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="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3785"><a href="#Parser-3785"><span class="linenos">3785</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3786"><a href="#Parser-3786"><span class="linenos">3786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</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="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3789"><a href="#Parser-3789"><span class="linenos">3789</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
-</span><span id="Parser-3790"><a href="#Parser-3790"><span class="linenos">3790</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-3775"><a href="#Parser-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</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">LT</span><span class="p">):</span>
+</span><span id="Parser-3776"><a href="#Parser-3776"><span class="linenos">3776</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-3777"><a href="#Parser-3777"><span class="linenos">3777</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="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-3778"><a href="#Parser-3778"><span class="linenos">3778</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3779"><a href="#Parser-3779"><span class="linenos">3779</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><span id="Parser-3780"><a href="#Parser-3780"><span class="linenos">3780</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3781"><a href="#Parser-3781"><span class="linenos">3781</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3782"><a href="#Parser-3782"><span class="linenos">3782</span></a> <span class="p">)</span>
+</span><span id="Parser-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a> <span class="p">)</span>
+</span><span id="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</span></a>
+</span><span id="Parser-3785"><a href="#Parser-3785"><span class="linenos">3785</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="Parser-3786"><a href="#Parser-3786"><span class="linenos">3786</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;Expecting &gt;&quot;</span><span class="p">)</span>
+</span><span id="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a>
+</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</span></a> <span class="k">if</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">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
+</span><span id="Parser-3789"><a href="#Parser-3789"><span class="linenos">3789</span></a> <span class="n">values</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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-3790"><a href="#Parser-3790"><span class="linenos">3790</span></a> <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">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
</span><span id="Parser-3791"><a href="#Parser-3791"><span class="linenos">3791</span></a>
-</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</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;TO&quot;</span><span class="p">):</span>
-</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
-</span><span id="Parser-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3795"><a href="#Parser-3795"><span class="linenos">3795</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3796"><a href="#Parser-3796"><span class="linenos">3796</span></a>
-</span><span id="Parser-3797"><a href="#Parser-3797"><span class="linenos">3797</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Parser-3798"><a href="#Parser-3798"><span class="linenos">3798</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><span id="Parser-3799"><a href="#Parser-3799"><span class="linenos">3799</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
-</span><span id="Parser-3800"><a href="#Parser-3800"><span class="linenos">3800</span></a> <span class="p">)</span>
-</span><span id="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3802"><a href="#Parser-3802"><span class="linenos">3802</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">DataType</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
-</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a>
-</span><span id="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
-</span><span id="Parser-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-3807"><a href="#Parser-3807"><span class="linenos">3807</span></a>
-</span><span id="Parser-3808"><a href="#Parser-3808"><span class="linenos">3808</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="Parser-3809"><a href="#Parser-3809"><span class="linenos">3809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</span></a>
-</span><span id="Parser-3812"><a href="#Parser-3812"><span class="linenos">3812</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
+</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3795"><a href="#Parser-3795"><span class="linenos">3795</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-3796"><a href="#Parser-3796"><span class="linenos">3796</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
+</span><span id="Parser-3797"><a href="#Parser-3797"><span class="linenos">3797</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
+</span><span id="Parser-3798"><a href="#Parser-3798"><span class="linenos">3798</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
+</span><span id="Parser-3799"><a href="#Parser-3799"><span class="linenos">3799</span></a> <span class="p">)</span>
+</span><span id="Parser-3800"><a href="#Parser-3800"><span class="linenos">3800</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</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="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3802"><a href="#Parser-3802"><span class="linenos">3802</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</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="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="Parser-3807"><a href="#Parser-3807"><span class="linenos">3807</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-3808"><a href="#Parser-3808"><span class="linenos">3808</span></a>
+</span><span id="Parser-3809"><a href="#Parser-3809"><span class="linenos">3809</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;TO&quot;</span><span class="p">):</span>
+</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
+</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3812"><a href="#Parser-3812"><span class="linenos">3812</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3813"><a href="#Parser-3813"><span class="linenos">3813</span></a>
-</span><span id="Parser-3814"><a href="#Parser-3814"><span class="linenos">3814</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3815"><a href="#Parser-3815"><span class="linenos">3815</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;UNSIGNED&quot;</span><span class="p">):</span>
-</span><span id="Parser-3816"><a href="#Parser-3816"><span class="linenos">3816</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
-</span><span id="Parser-3817"><a href="#Parser-3817"><span class="linenos">3817</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
-</span><span id="Parser-3818"><a href="#Parser-3818"><span class="linenos">3818</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
-</span><span id="Parser-3819"><a href="#Parser-3819"><span class="linenos">3819</span></a>
-</span><span id="Parser-3820"><a href="#Parser-3820"><span class="linenos">3820</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
-</span><span id="Parser-3821"><a href="#Parser-3821"><span class="linenos">3821</span></a>
-</span><span id="Parser-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="Parser-3826"><a href="#Parser-3826"><span class="linenos">3826</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="Parser-3827"><a href="#Parser-3827"><span class="linenos">3827</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="Parser-3828"><a href="#Parser-3828"><span class="linenos">3828</span></a> <span class="p">)</span>
-</span><span id="Parser-3829"><a href="#Parser-3829"><span class="linenos">3829</span></a>
-</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
-</span><span id="Parser-3831"><a href="#Parser-3831"><span class="linenos">3831</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</span></a>
-</span><span id="Parser-3833"><a href="#Parser-3833"><span class="linenos">3833</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3834"><a href="#Parser-3834"><span class="linenos">3834</span></a>
-</span><span id="Parser-3835"><a href="#Parser-3835"><span class="linenos">3835</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</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">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="Parser-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</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">COLON</span><span class="p">)</span>
-</span><span id="Parser-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a>
-</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Parser-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a> <span class="p">(</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
-</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a> <span class="p">):</span>
-</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-3814"><a href="#Parser-3814"><span class="linenos">3814</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Parser-3815"><a href="#Parser-3815"><span class="linenos">3815</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><span id="Parser-3816"><a href="#Parser-3816"><span class="linenos">3816</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
+</span><span id="Parser-3817"><a href="#Parser-3817"><span class="linenos">3817</span></a> <span class="p">)</span>
+</span><span id="Parser-3818"><a href="#Parser-3818"><span class="linenos">3818</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3819"><a href="#Parser-3819"><span class="linenos">3819</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">DataType</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
+</span><span id="Parser-3820"><a href="#Parser-3820"><span class="linenos">3820</span></a>
+</span><span id="Parser-3821"><a href="#Parser-3821"><span class="linenos">3821</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="Parser-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a>
+</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
+</span><span id="Parser-3826"><a href="#Parser-3826"><span class="linenos">3826</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3827"><a href="#Parser-3827"><span class="linenos">3827</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3828"><a href="#Parser-3828"><span class="linenos">3828</span></a>
+</span><span id="Parser-3829"><a href="#Parser-3829"><span class="linenos">3829</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</span></a>
+</span><span id="Parser-3831"><a href="#Parser-3831"><span class="linenos">3831</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</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;UNSIGNED&quot;</span><span class="p">):</span>
+</span><span id="Parser-3833"><a href="#Parser-3833"><span class="linenos">3833</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
+</span><span id="Parser-3834"><a href="#Parser-3834"><span class="linenos">3834</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
+</span><span id="Parser-3835"><a href="#Parser-3835"><span class="linenos">3835</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
+</span><span id="Parser-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a>
+</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
+</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</span></a>
+</span><span id="Parser-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="Parser-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
+</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</span></a> <span class="p">)</span>
</span><span id="Parser-3846"><a href="#Parser-3846"><span class="linenos">3846</span></a>
-</span><span id="Parser-3847"><a href="#Parser-3847"><span class="linenos">3847</span></a> <span class="k">return</span> <span class="n">column_def</span>
-</span><span id="Parser-3848"><a href="#Parser-3848"><span class="linenos">3848</span></a>
-</span><span id="Parser-3849"><a href="#Parser-3849"><span class="linenos">3849</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3850"><a href="#Parser-3850"><span class="linenos">3850</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3851"><a href="#Parser-3851"><span class="linenos">3851</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</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">AtTimeZone</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">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
-</span><span id="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a>
-</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3855"><a href="#Parser-3855"><span class="linenos">3855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="Parser-3857"><a href="#Parser-3857"><span class="linenos">3857</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">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3859"><a href="#Parser-3859"><span class="linenos">3859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3860"><a href="#Parser-3860"><span class="linenos">3860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a>
-</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a>
-</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
-</span><span id="Parser-3866"><a href="#Parser-3866"><span class="linenos">3866</span></a> <span class="n">op_token</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">token_type</span>
-</span><span id="Parser-3867"><a href="#Parser-3867"><span class="linenos">3867</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
-</span><span id="Parser-3868"><a href="#Parser-3868"><span class="linenos">3868</span></a>
-</span><span id="Parser-3869"><a href="#Parser-3869"><span class="linenos">3869</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
-</span><span id="Parser-3870"><a href="#Parser-3870"><span class="linenos">3870</span></a> <span class="n">field</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="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Parser-3872"><a href="#Parser-3872"><span class="linenos">3872</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
-</span><span id="Parser-3873"><a href="#Parser-3873"><span class="linenos">3873</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-3874"><a href="#Parser-3874"><span class="linenos">3874</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3875"><a href="#Parser-3875"><span class="linenos">3875</span></a> <span class="n">value</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="Parser-3876"><a href="#Parser-3876"><span class="linenos">3876</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3877"><a href="#Parser-3877"><span class="linenos">3877</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Parser-3878"><a href="#Parser-3878"><span class="linenos">3878</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span>
-</span><span id="Parser-3879"><a href="#Parser-3879"><span class="linenos">3879</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">value</span><span class="p">)</span>
-</span><span id="Parser-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a> <span class="p">)</span>
-</span><span id="Parser-3881"><a href="#Parser-3881"><span class="linenos">3881</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3882"><a href="#Parser-3882"><span class="linenos">3882</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3847"><a href="#Parser-3847"><span class="linenos">3847</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
+</span><span id="Parser-3848"><a href="#Parser-3848"><span class="linenos">3848</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3849"><a href="#Parser-3849"><span class="linenos">3849</span></a>
+</span><span id="Parser-3850"><a href="#Parser-3850"><span class="linenos">3850</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3851"><a href="#Parser-3851"><span class="linenos">3851</span></a>
+</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</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">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="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-3855"><a href="#Parser-3855"><span class="linenos">3855</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">COLON</span><span class="p">)</span>
+</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3857"><a href="#Parser-3857"><span class="linenos">3857</span></a>
+</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Parser-3859"><a href="#Parser-3859"><span class="linenos">3859</span></a> <span class="p">(</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
+</span><span id="Parser-3860"><a href="#Parser-3860"><span class="linenos">3860</span></a> <span class="p">):</span>
+</span><span id="Parser-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a>
+</span><span id="Parser-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a> <span class="k">return</span> <span class="n">column_def</span>
+</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</span></a>
+</span><span id="Parser-3866"><a href="#Parser-3866"><span class="linenos">3866</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3867"><a href="#Parser-3867"><span class="linenos">3867</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;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3868"><a href="#Parser-3868"><span class="linenos">3868</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3869"><a href="#Parser-3869"><span class="linenos">3869</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">AtTimeZone</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">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
+</span><span id="Parser-3870"><a href="#Parser-3870"><span class="linenos">3870</span></a>
+</span><span id="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3872"><a href="#Parser-3872"><span class="linenos">3872</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="Parser-3873"><a href="#Parser-3873"><span class="linenos">3873</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3874"><a href="#Parser-3874"><span class="linenos">3874</span></a>
+</span><span id="Parser-3875"><a href="#Parser-3875"><span class="linenos">3875</span></a> <span class="k">def</span> <span class="nf">_parse_column_reference</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="Parser-3876"><a href="#Parser-3876"><span class="linenos">3876</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-3877"><a href="#Parser-3877"><span class="linenos">3877</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Parser-3878"><a href="#Parser-3878"><span class="linenos">3878</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">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a>
+</span><span id="Parser-3881"><a href="#Parser-3881"><span class="linenos">3881</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-3882"><a href="#Parser-3882"><span class="linenos">3882</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-3883"><a href="#Parser-3883"><span class="linenos">3883</span></a>
-</span><span id="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="Parser-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="Parser-3888"><a href="#Parser-3888"><span class="linenos">3888</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3889"><a href="#Parser-3889"><span class="linenos">3889</span></a>
-</span><span id="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="Parser-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
-</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</span></a> <span class="k">elif</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</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;catalog&quot;</span><span class="p">):</span>
-</span><span id="Parser-3893"><a href="#Parser-3893"><span class="linenos">3893</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><span id="Parser-3894"><a href="#Parser-3894"><span class="linenos">3894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="Parser-3895"><a href="#Parser-3895"><span class="linenos">3895</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="Parser-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a> <span class="n">table</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="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</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="Parser-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</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;db&quot;</span><span class="p">),</span>
-</span><span id="Parser-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a> <span class="p">)</span>
-</span><span id="Parser-3900"><a href="#Parser-3900"><span class="linenos">3900</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3901"><a href="#Parser-3901"><span class="linenos">3901</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">Dot</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">field</span><span class="p">)</span>
-</span><span id="Parser-3902"><a href="#Parser-3902"><span class="linenos">3902</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3903"><a href="#Parser-3903"><span class="linenos">3903</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3904"><a href="#Parser-3904"><span class="linenos">3904</span></a>
-</span><span id="Parser-3905"><a href="#Parser-3905"><span class="linenos">3905</span></a> <span class="k">def</span> <span class="nf">_parse_primary</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="Parser-3906"><a href="#Parser-3906"><span class="linenos">3906</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-3907"><a href="#Parser-3907"><span class="linenos">3907</span></a> <span class="n">token_type</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">token_type</span>
-</span><span id="Parser-3908"><a href="#Parser-3908"><span class="linenos">3908</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-3909"><a href="#Parser-3909"><span class="linenos">3909</span></a>
-</span><span id="Parser-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
-</span><span id="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
-</span><span id="Parser-3912"><a href="#Parser-3912"><span class="linenos">3912</span></a> <span class="k">while</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">STRING</span><span class="p">):</span>
-</span><span id="Parser-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
-</span><span id="Parser-3914"><a href="#Parser-3914"><span class="linenos">3914</span></a>
-</span><span id="Parser-3915"><a href="#Parser-3915"><span class="linenos">3915</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-3916"><a href="#Parser-3916"><span class="linenos">3916</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">Concat</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="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
+</span><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</span></a> <span class="n">op_token</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">token_type</span>
+</span><span id="Parser-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
+</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</span></a>
+</span><span id="Parser-3888"><a href="#Parser-3888"><span class="linenos">3888</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
+</span><span id="Parser-3889"><a href="#Parser-3889"><span class="linenos">3889</span></a> <span class="n">field</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="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Parser-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
+</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-3893"><a href="#Parser-3893"><span class="linenos">3893</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="Parser-3894"><a href="#Parser-3894"><span class="linenos">3894</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3895"><a href="#Parser-3895"><span class="linenos">3895</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a>
+</span><span id="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Parser-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="Parser-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="Parser-3900"><a href="#Parser-3900"><span class="linenos">3900</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
+</span><span id="Parser-3901"><a href="#Parser-3901"><span class="linenos">3901</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3902"><a href="#Parser-3902"><span class="linenos">3902</span></a>
+</span><span id="Parser-3903"><a href="#Parser-3903"><span class="linenos">3903</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="Parser-3904"><a href="#Parser-3904"><span class="linenos">3904</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
+</span><span id="Parser-3905"><a href="#Parser-3905"><span class="linenos">3905</span></a> <span class="k">elif</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</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;catalog&quot;</span><span class="p">):</span>
+</span><span id="Parser-3906"><a href="#Parser-3906"><span class="linenos">3906</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><span id="Parser-3907"><a href="#Parser-3907"><span class="linenos">3907</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="Parser-3908"><a href="#Parser-3908"><span class="linenos">3908</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="Parser-3909"><a href="#Parser-3909"><span class="linenos">3909</span></a> <span class="n">table</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="Parser-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</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="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</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;db&quot;</span><span class="p">),</span>
+</span><span id="Parser-3912"><a href="#Parser-3912"><span class="linenos">3912</span></a> <span class="p">)</span>
+</span><span id="Parser-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3914"><a href="#Parser-3914"><span class="linenos">3914</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">Dot</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">field</span><span class="p">)</span>
+</span><span id="Parser-3915"><a href="#Parser-3915"><span class="linenos">3915</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3916"><a href="#Parser-3916"><span class="linenos">3916</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3917"><a href="#Parser-3917"><span class="linenos">3917</span></a>
-</span><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a> <span class="k">return</span> <span class="n">primary</span>
-</span><span id="Parser-3919"><a href="#Parser-3919"><span class="linenos">3919</span></a>
-</span><span id="Parser-3920"><a href="#Parser-3920"><span class="linenos">3920</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
-</span><span id="Parser-3921"><a href="#Parser-3921"><span class="linenos">3921</span></a> <span class="k">return</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="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</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 class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a> <span class="k">def</span> <span class="nf">_parse_primary</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="Parser-3919"><a href="#Parser-3919"><span class="linenos">3919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-3920"><a href="#Parser-3920"><span class="linenos">3920</span></a> <span class="n">token_type</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">token_type</span>
+</span><span id="Parser-3921"><a href="#Parser-3921"><span class="linenos">3921</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-3922"><a href="#Parser-3922"><span class="linenos">3922</span></a>
-</span><span id="Parser-3923"><a href="#Parser-3923"><span class="linenos">3923</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
-</span><span id="Parser-3926"><a href="#Parser-3926"><span class="linenos">3926</span></a>
-</span><span id="Parser-3927"><a href="#Parser-3927"><span class="linenos">3927</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Parser-3928"><a href="#Parser-3928"><span class="linenos">3928</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
-</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3930"><a href="#Parser-3930"><span class="linenos">3930</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
-</span><span id="Parser-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a>
-</span><span id="Parser-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Parser-3933"><a href="#Parser-3933"><span class="linenos">3933</span></a>
-</span><span id="Parser-3934"><a href="#Parser-3934"><span class="linenos">3934</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Parser-3935"><a href="#Parser-3935"><span class="linenos">3935</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="Parser-3936"><a href="#Parser-3936"><span class="linenos">3936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</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">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="p">)</span>
-</span><span id="Parser-3938"><a href="#Parser-3938"><span class="linenos">3938</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-3939"><a href="#Parser-3939"><span class="linenos">3939</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">Tuple</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="Parser-3940"><a href="#Parser-3940"><span class="linenos">3940</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3941"><a href="#Parser-3941"><span class="linenos">3941</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">Paren</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_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="Parser-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a>
-</span><span id="Parser-3943"><a href="#Parser-3943"><span class="linenos">3943</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Parser-3945"><a href="#Parser-3945"><span class="linenos">3945</span></a>
-</span><span id="Parser-3946"><a href="#Parser-3946"><span class="linenos">3946</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3947"><a href="#Parser-3947"><span class="linenos">3947</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3948"><a href="#Parser-3948"><span class="linenos">3948</span></a>
-</span><span id="Parser-3949"><a href="#Parser-3949"><span class="linenos">3949</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3950"><a href="#Parser-3950"><span class="linenos">3950</span></a>
-</span><span id="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3953"><a href="#Parser-3953"><span class="linenos">3953</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3954"><a href="#Parser-3954"><span class="linenos">3954</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-3955"><a href="#Parser-3955"><span class="linenos">3955</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3956"><a href="#Parser-3956"><span class="linenos">3956</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="Parser-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-3958"><a href="#Parser-3958"><span class="linenos">3958</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-3959"><a href="#Parser-3959"><span class="linenos">3959</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
-</span><span id="Parser-3960"><a href="#Parser-3960"><span class="linenos">3960</span></a> <span class="ow">or</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="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
-</span><span id="Parser-3961"><a href="#Parser-3961"><span class="linenos">3961</span></a> <span class="p">)</span>
-</span><span id="Parser-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a>
-</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="Parser-3964"><a href="#Parser-3964"><span class="linenos">3964</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3965"><a href="#Parser-3965"><span class="linenos">3965</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3967"><a href="#Parser-3967"><span class="linenos">3967</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-3968"><a href="#Parser-3968"><span class="linenos">3968</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="Parser-3969"><a href="#Parser-3969"><span class="linenos">3969</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
-</span><span id="Parser-3970"><a href="#Parser-3970"><span class="linenos">3970</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
-</span><span id="Parser-3971"><a href="#Parser-3971"><span class="linenos">3971</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3972"><a href="#Parser-3972"><span class="linenos">3972</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-3973"><a href="#Parser-3973"><span class="linenos">3973</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">L_BRACE</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="Parser-3974"><a href="#Parser-3974"><span class="linenos">3974</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
-</span><span id="Parser-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
-</span><span id="Parser-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a> <span class="p">):</span>
-</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-3978"><a href="#Parser-3978"><span class="linenos">3978</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3979"><a href="#Parser-3979"><span class="linenos">3979</span></a>
-</span><span id="Parser-3980"><a href="#Parser-3980"><span class="linenos">3980</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
-</span><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="Parser-3982"><a href="#Parser-3982"><span class="linenos">3982</span></a> <span class="p">)</span>
-</span><span id="Parser-3983"><a href="#Parser-3983"><span class="linenos">3983</span></a>
-</span><span id="Parser-3984"><a href="#Parser-3984"><span class="linenos">3984</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
-</span><span id="Parser-3985"><a href="#Parser-3985"><span class="linenos">3985</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">R_BRACE</span><span class="p">)</span>
-</span><span id="Parser-3986"><a href="#Parser-3986"><span class="linenos">3986</span></a>
-</span><span id="Parser-3987"><a href="#Parser-3987"><span class="linenos">3987</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="Parser-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a>
-</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
-</span><span id="Parser-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3991"><a href="#Parser-3991"><span class="linenos">3991</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-3992"><a href="#Parser-3992"><span class="linenos">3992</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3993"><a href="#Parser-3993"><span class="linenos">3993</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-3994"><a href="#Parser-3994"><span class="linenos">3994</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="Parser-3995"><a href="#Parser-3995"><span class="linenos">3995</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-3996"><a href="#Parser-3996"><span class="linenos">3996</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a>
-</span><span id="Parser-3998"><a href="#Parser-3998"><span class="linenos">3998</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Parser-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="Parser-4000"><a href="#Parser-4000"><span class="linenos">4000</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-4001"><a href="#Parser-4001"><span class="linenos">4001</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4002"><a href="#Parser-4002"><span class="linenos">4002</span></a>
-</span><span id="Parser-4003"><a href="#Parser-4003"><span class="linenos">4003</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="Parser-4004"><a href="#Parser-4004"><span class="linenos">4004</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-4007"><a href="#Parser-4007"><span class="linenos">4007</span></a>
-</span><span id="Parser-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
-</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4011"><a href="#Parser-4011"><span class="linenos">4011</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="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
-</span><span id="Parser-4012"><a href="#Parser-4012"><span class="linenos">4012</span></a>
-</span><span id="Parser-4013"><a href="#Parser-4013"><span class="linenos">4013</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a>
-</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-4016"><a href="#Parser-4016"><span class="linenos">4016</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a>
-</span><span id="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a>
-</span><span id="Parser-4020"><a href="#Parser-4020"><span class="linenos">4020</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="Parser-4021"><a href="#Parser-4021"><span class="linenos">4021</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="Parser-3923"><a href="#Parser-3923"><span class="linenos">3923</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
+</span><span id="Parser-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
+</span><span id="Parser-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a> <span class="k">while</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">STRING</span><span class="p">):</span>
+</span><span id="Parser-3926"><a href="#Parser-3926"><span class="linenos">3926</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+</span><span id="Parser-3927"><a href="#Parser-3927"><span class="linenos">3927</span></a>
+</span><span id="Parser-3928"><a href="#Parser-3928"><span class="linenos">3928</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</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">Concat</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="Parser-3930"><a href="#Parser-3930"><span class="linenos">3930</span></a>
+</span><span id="Parser-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a> <span class="k">return</span> <span class="n">primary</span>
+</span><span id="Parser-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a>
+</span><span id="Parser-3933"><a href="#Parser-3933"><span class="linenos">3933</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
+</span><span id="Parser-3934"><a href="#Parser-3934"><span class="linenos">3934</span></a> <span class="k">return</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="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</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 class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-3935"><a href="#Parser-3935"><span class="linenos">3935</span></a>
+</span><span id="Parser-3936"><a href="#Parser-3936"><span class="linenos">3936</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="Parser-3938"><a href="#Parser-3938"><span class="linenos">3938</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
+</span><span id="Parser-3939"><a href="#Parser-3939"><span class="linenos">3939</span></a>
+</span><span id="Parser-3940"><a href="#Parser-3940"><span class="linenos">3940</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Parser-3941"><a href="#Parser-3941"><span class="linenos">3941</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
+</span><span id="Parser-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3943"><a href="#Parser-3943"><span class="linenos">3943</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="Parser-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a>
+</span><span id="Parser-3945"><a href="#Parser-3945"><span class="linenos">3945</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Parser-3946"><a href="#Parser-3946"><span class="linenos">3946</span></a>
+</span><span id="Parser-3947"><a href="#Parser-3947"><span class="linenos">3947</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Parser-3948"><a href="#Parser-3948"><span class="linenos">3948</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="Parser-3949"><a href="#Parser-3949"><span class="linenos">3949</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</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">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3950"><a href="#Parser-3950"><span class="linenos">3950</span></a> <span class="p">)</span>
+</span><span id="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</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">Tuple</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="Parser-3953"><a href="#Parser-3953"><span class="linenos">3953</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3954"><a href="#Parser-3954"><span class="linenos">3954</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">Paren</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_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+</span><span id="Parser-3955"><a href="#Parser-3955"><span class="linenos">3955</span></a>
+</span><span id="Parser-3956"><a href="#Parser-3956"><span class="linenos">3956</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Parser-3958"><a href="#Parser-3958"><span class="linenos">3958</span></a>
+</span><span id="Parser-3959"><a href="#Parser-3959"><span class="linenos">3959</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3960"><a href="#Parser-3960"><span class="linenos">3960</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3961"><a href="#Parser-3961"><span class="linenos">3961</span></a>
+</span><span id="Parser-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a>
+</span><span id="Parser-3964"><a href="#Parser-3964"><span class="linenos">3964</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
+</span><span id="Parser-3965"><a href="#Parser-3965"><span class="linenos">3965</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3967"><a href="#Parser-3967"><span class="linenos">3967</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-3968"><a href="#Parser-3968"><span class="linenos">3968</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3969"><a href="#Parser-3969"><span class="linenos">3969</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="Parser-3970"><a href="#Parser-3970"><span class="linenos">3970</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-3971"><a href="#Parser-3971"><span class="linenos">3971</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3972"><a href="#Parser-3972"><span class="linenos">3972</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
+</span><span id="Parser-3973"><a href="#Parser-3973"><span class="linenos">3973</span></a> <span class="ow">or</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="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
+</span><span id="Parser-3974"><a href="#Parser-3974"><span class="linenos">3974</span></a> <span class="p">)</span>
+</span><span id="Parser-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a>
+</span><span id="Parser-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3978"><a href="#Parser-3978"><span class="linenos">3978</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-3979"><a href="#Parser-3979"><span class="linenos">3979</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3980"><a href="#Parser-3980"><span class="linenos">3980</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</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="Parser-3982"><a href="#Parser-3982"><span class="linenos">3982</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
+</span><span id="Parser-3983"><a href="#Parser-3983"><span class="linenos">3983</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
+</span><span id="Parser-3984"><a href="#Parser-3984"><span class="linenos">3984</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3985"><a href="#Parser-3985"><span class="linenos">3985</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-3986"><a href="#Parser-3986"><span class="linenos">3986</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">L_BRACE</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="Parser-3987"><a href="#Parser-3987"><span class="linenos">3987</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
+</span><span id="Parser-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
+</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</span></a> <span class="p">):</span>
+</span><span id="Parser-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-3991"><a href="#Parser-3991"><span class="linenos">3991</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3992"><a href="#Parser-3992"><span class="linenos">3992</span></a>
+</span><span id="Parser-3993"><a href="#Parser-3993"><span class="linenos">3993</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
+</span><span id="Parser-3994"><a href="#Parser-3994"><span class="linenos">3994</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="Parser-3995"><a href="#Parser-3995"><span class="linenos">3995</span></a> <span class="p">)</span>
+</span><span id="Parser-3996"><a href="#Parser-3996"><span class="linenos">3996</span></a>
+</span><span id="Parser-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
+</span><span id="Parser-3998"><a href="#Parser-3998"><span class="linenos">3998</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">R_BRACE</span><span class="p">)</span>
+</span><span id="Parser-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a>
+</span><span id="Parser-4000"><a href="#Parser-4000"><span class="linenos">4000</span></a> <span class="k">return</span> <span class="n">func</span>
+</span><span id="Parser-4001"><a href="#Parser-4001"><span class="linenos">4001</span></a>
+</span><span id="Parser-4002"><a href="#Parser-4002"><span class="linenos">4002</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
+</span><span id="Parser-4003"><a href="#Parser-4003"><span class="linenos">4003</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4004"><a href="#Parser-4004"><span class="linenos">4004</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-4007"><a href="#Parser-4007"><span class="linenos">4007</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="Parser-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</span></a>
+</span><span id="Parser-4011"><a href="#Parser-4011"><span class="linenos">4011</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Parser-4012"><a href="#Parser-4012"><span class="linenos">4012</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-4013"><a href="#Parser-4013"><span class="linenos">4013</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</span></a>
+</span><span id="Parser-4016"><a href="#Parser-4016"><span class="linenos">4016</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="Parser-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-4020"><a href="#Parser-4020"><span class="linenos">4020</span></a>
+</span><span id="Parser-4021"><a href="#Parser-4021"><span class="linenos">4021</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
+</span><span id="Parser-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</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="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
</span><span id="Parser-4025"><a href="#Parser-4025"><span class="linenos">4025</span></a>
-</span><span id="Parser-4026"><a href="#Parser-4026"><span class="linenos">4026</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="Parser-4027"><a href="#Parser-4027"><span class="linenos">4027</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">subquery_predicate</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_select</span><span class="p">())</span>
-</span><span id="Parser-4028"><a href="#Parser-4028"><span class="linenos">4028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4029"><a href="#Parser-4029"><span class="linenos">4029</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4026"><a href="#Parser-4026"><span class="linenos">4026</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4027"><a href="#Parser-4027"><span class="linenos">4027</span></a>
+</span><span id="Parser-4028"><a href="#Parser-4028"><span class="linenos">4028</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-4029"><a href="#Parser-4029"><span class="linenos">4029</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4030"><a href="#Parser-4030"><span class="linenos">4030</span></a>
-</span><span id="Parser-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
-</span><span id="Parser-4033"><a href="#Parser-4033"><span class="linenos">4033</span></a>
-</span><span id="Parser-4034"><a href="#Parser-4034"><span class="linenos">4034</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="Parser-4035"><a href="#Parser-4035"><span class="linenos">4035</span></a>
-</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
-</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a>
+</span><span id="Parser-4033"><a href="#Parser-4033"><span class="linenos">4033</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="Parser-4034"><a href="#Parser-4034"><span class="linenos">4034</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="Parser-4035"><a href="#Parser-4035"><span class="linenos">4035</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="Parser-4038"><a href="#Parser-4038"><span class="linenos">4038</span></a>
-</span><span id="Parser-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
-</span><span id="Parser-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</span></a>
-</span><span id="Parser-4045"><a href="#Parser-4045"><span class="linenos">4045</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4046"><a href="#Parser-4046"><span class="linenos">4046</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
-</span><span id="Parser-4047"><a href="#Parser-4047"><span class="linenos">4047</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
+</span><span id="Parser-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</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">subquery_predicate</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_select</span><span class="p">())</span>
+</span><span id="Parser-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a>
+</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-4045"><a href="#Parser-4045"><span class="linenos">4045</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
+</span><span id="Parser-4046"><a href="#Parser-4046"><span class="linenos">4046</span></a>
+</span><span id="Parser-4047"><a href="#Parser-4047"><span class="linenos">4047</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="Parser-4048"><a href="#Parser-4048"><span class="linenos">4048</span></a>
-</span><span id="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
-</span><span id="Parser-4050"><a href="#Parser-4050"><span class="linenos">4050</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4051"><a href="#Parser-4051"><span class="linenos">4051</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">Anonymous</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">args</span><span class="p">)</span>
-</span><span id="Parser-4052"><a href="#Parser-4052"><span class="linenos">4052</span></a>
-</span><span id="Parser-4053"><a href="#Parser-4053"><span class="linenos">4053</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Parser-4054"><a href="#Parser-4054"><span class="linenos">4054</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Parser-4055"><a href="#Parser-4055"><span class="linenos">4055</span></a>
-</span><span id="Parser-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4057"><a href="#Parser-4057"><span class="linenos">4057</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4058"><a href="#Parser-4058"><span class="linenos">4058</span></a>
-</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</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="Parser-4060"><a href="#Parser-4060"><span class="linenos">4060</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
+</span><span id="Parser-4050"><a href="#Parser-4050"><span class="linenos">4050</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-4051"><a href="#Parser-4051"><span class="linenos">4051</span></a>
+</span><span id="Parser-4052"><a href="#Parser-4052"><span class="linenos">4052</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="Parser-4053"><a href="#Parser-4053"><span class="linenos">4053</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
+</span><span id="Parser-4054"><a href="#Parser-4054"><span class="linenos">4054</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="Parser-4055"><a href="#Parser-4055"><span class="linenos">4055</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4057"><a href="#Parser-4057"><span class="linenos">4057</span></a>
+</span><span id="Parser-4058"><a href="#Parser-4058"><span class="linenos">4058</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
+</span><span id="Parser-4060"><a href="#Parser-4060"><span class="linenos">4060</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="Parser-4061"><a href="#Parser-4061"><span class="linenos">4061</span></a>
-</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="Parser-4063"><a href="#Parser-4063"><span class="linenos">4063</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="Parser-4064"><a href="#Parser-4064"><span class="linenos">4064</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="Parser-4065"><a href="#Parser-4065"><span class="linenos">4065</span></a> <span class="n">this</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><span id="Parser-4066"><a href="#Parser-4066"><span class="linenos">4066</span></a>
-</span><span id="Parser-4067"><a href="#Parser-4067"><span class="linenos">4067</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
-</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</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">Dot</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
-</span><span id="Parser-4069"><a href="#Parser-4069"><span class="linenos">4069</span></a>
-</span><span id="Parser-4070"><a href="#Parser-4070"><span class="linenos">4070</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4072"><a href="#Parser-4072"><span class="linenos">4072</span></a>
-</span><span id="Parser-4073"><a href="#Parser-4073"><span class="linenos">4073</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="Parser-4074"><a href="#Parser-4074"><span class="linenos">4074</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4075"><a href="#Parser-4075"><span class="linenos">4075</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="Parser-4076"><a href="#Parser-4076"><span class="linenos">4076</span></a> <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 class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</span></a> <span class="p">)</span>
-</span><span id="Parser-4078"><a href="#Parser-4078"><span class="linenos">4078</span></a>
-</span><span id="Parser-4079"><a href="#Parser-4079"><span class="linenos">4079</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="Parser-4080"><a href="#Parser-4080"><span class="linenos">4080</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
-</span><span id="Parser-4082"><a href="#Parser-4082"><span class="linenos">4082</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">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
-</span><span id="Parser-4083"><a href="#Parser-4083"><span class="linenos">4083</span></a>
-</span><span id="Parser-4084"><a href="#Parser-4084"><span class="linenos">4084</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">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
+</span><span id="Parser-4063"><a href="#Parser-4063"><span class="linenos">4063</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4064"><a href="#Parser-4064"><span class="linenos">4064</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">Anonymous</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">args</span><span class="p">)</span>
+</span><span id="Parser-4065"><a href="#Parser-4065"><span class="linenos">4065</span></a>
+</span><span id="Parser-4066"><a href="#Parser-4066"><span class="linenos">4066</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Parser-4067"><a href="#Parser-4067"><span class="linenos">4067</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</span></a>
+</span><span id="Parser-4069"><a href="#Parser-4069"><span class="linenos">4069</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4070"><a href="#Parser-4070"><span class="linenos">4070</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a>
+</span><span id="Parser-4072"><a href="#Parser-4072"><span class="linenos">4072</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</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="Parser-4073"><a href="#Parser-4073"><span class="linenos">4073</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="Parser-4074"><a href="#Parser-4074"><span class="linenos">4074</span></a>
+</span><span id="Parser-4075"><a href="#Parser-4075"><span class="linenos">4075</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="Parser-4076"><a href="#Parser-4076"><span class="linenos">4076</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="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</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="Parser-4078"><a href="#Parser-4078"><span class="linenos">4078</span></a> <span class="n">this</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><span id="Parser-4079"><a href="#Parser-4079"><span class="linenos">4079</span></a>
+</span><span id="Parser-4080"><a href="#Parser-4080"><span class="linenos">4080</span></a> <span class="k">while</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">DOT</span><span class="p">):</span>
+</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</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">Dot</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="Parser-4082"><a href="#Parser-4082"><span class="linenos">4082</span></a>
+</span><span id="Parser-4083"><a href="#Parser-4083"><span class="linenos">4083</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4084"><a href="#Parser-4084"><span class="linenos">4084</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4085"><a href="#Parser-4085"><span class="linenos">4085</span></a>
-</span><span id="Parser-4086"><a href="#Parser-4086"><span class="linenos">4086</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</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">SessionParameter</span><span class="p">:</span>
-</span><span id="Parser-4087"><a href="#Parser-4087"><span class="linenos">4087</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4088"><a href="#Parser-4088"><span class="linenos">4088</span></a> <span class="n">this</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4089"><a href="#Parser-4089"><span class="linenos">4089</span></a>
-</span><span id="Parser-4090"><a href="#Parser-4090"><span class="linenos">4090</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</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">DOT</span><span class="p">):</span>
-</span><span id="Parser-4091"><a href="#Parser-4091"><span class="linenos">4091</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Parser-4092"><a href="#Parser-4092"><span class="linenos">4092</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4093"><a href="#Parser-4093"><span class="linenos">4093</span></a>
-</span><span id="Parser-4094"><a href="#Parser-4094"><span class="linenos">4094</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">SessionParameter</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="Parser-4095"><a href="#Parser-4095"><span class="linenos">4095</span></a>
-</span><span id="Parser-4096"><a href="#Parser-4096"><span class="linenos">4096</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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="Parser-4097"><a href="#Parser-4097"><span class="linenos">4097</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-4086"><a href="#Parser-4086"><span class="linenos">4086</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="Parser-4087"><a href="#Parser-4087"><span class="linenos">4087</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4088"><a href="#Parser-4088"><span class="linenos">4088</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="Parser-4089"><a href="#Parser-4089"><span class="linenos">4089</span></a> <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 class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="Parser-4090"><a href="#Parser-4090"><span class="linenos">4090</span></a> <span class="p">)</span>
+</span><span id="Parser-4091"><a href="#Parser-4091"><span class="linenos">4091</span></a>
+</span><span id="Parser-4092"><a href="#Parser-4092"><span class="linenos">4092</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
+</span><span id="Parser-4093"><a href="#Parser-4093"><span class="linenos">4093</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4094"><a href="#Parser-4094"><span class="linenos">4094</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
+</span><span id="Parser-4095"><a href="#Parser-4095"><span class="linenos">4095</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">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
+</span><span id="Parser-4096"><a href="#Parser-4096"><span class="linenos">4096</span></a>
+</span><span id="Parser-4097"><a href="#Parser-4097"><span class="linenos">4097</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">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-4098"><a href="#Parser-4098"><span class="linenos">4098</span></a>
-</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="Parser-4101"><a href="#Parser-4101"><span class="linenos">4101</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_id_var</span><span class="p">)</span>
-</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a> <span class="p">)</span>
-</span><span id="Parser-4103"><a href="#Parser-4103"><span class="linenos">4103</span></a>
-</span><span id="Parser-4104"><a href="#Parser-4104"><span class="linenos">4104</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</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">SessionParameter</span><span class="p">:</span>
+</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4101"><a href="#Parser-4101"><span class="linenos">4101</span></a> <span class="n">this</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a>
+</span><span id="Parser-4103"><a href="#Parser-4103"><span class="linenos">4103</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</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">DOT</span><span class="p">):</span>
+</span><span id="Parser-4104"><a href="#Parser-4104"><span class="linenos">4104</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</span></a>
+</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</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">SessionParameter</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="Parser-4108"><a href="#Parser-4108"><span class="linenos">4108</span></a>
-</span><span id="Parser-4109"><a href="#Parser-4109"><span class="linenos">4109</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
-</span><span id="Parser-4110"><a href="#Parser-4110"><span class="linenos">4110</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4109"><a href="#Parser-4109"><span class="linenos">4109</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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="Parser-4110"><a href="#Parser-4110"><span class="linenos">4110</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4111"><a href="#Parser-4111"><span class="linenos">4111</span></a>
-</span><span id="Parser-4112"><a href="#Parser-4112"><span class="linenos">4112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4113"><a href="#Parser-4113"><span class="linenos">4113</span></a>
-</span><span id="Parser-4114"><a href="#Parser-4114"><span class="linenos">4114</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-4115"><a href="#Parser-4115"><span class="linenos">4115</span></a>
-</span><span id="Parser-4116"><a href="#Parser-4116"><span class="linenos">4116</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">DISTINCT</span><span class="p">):</span>
-</span><span id="Parser-4117"><a href="#Parser-4117"><span class="linenos">4117</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><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="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_conjunction</span><span class="p">)</span>
-</span><span id="Parser-4119"><a href="#Parser-4119"><span class="linenos">4119</span></a> <span class="p">)</span>
-</span><span id="Parser-4120"><a href="#Parser-4120"><span class="linenos">4120</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4121"><a href="#Parser-4121"><span class="linenos">4121</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a>
-</span><span id="Parser-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
+</span><span id="Parser-4112"><a href="#Parser-4112"><span class="linenos">4112</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4113"><a href="#Parser-4113"><span class="linenos">4113</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="Parser-4114"><a href="#Parser-4114"><span class="linenos">4114</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_id_var</span><span class="p">)</span>
+</span><span id="Parser-4115"><a href="#Parser-4115"><span class="linenos">4115</span></a> <span class="p">)</span>
+</span><span id="Parser-4116"><a href="#Parser-4116"><span class="linenos">4116</span></a>
+</span><span id="Parser-4117"><a href="#Parser-4117"><span class="linenos">4117</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4119"><a href="#Parser-4119"><span class="linenos">4119</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4120"><a href="#Parser-4120"><span class="linenos">4120</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="Parser-4121"><a href="#Parser-4121"><span class="linenos">4121</span></a>
+</span><span id="Parser-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
+</span><span id="Parser-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-4124"><a href="#Parser-4124"><span class="linenos">4124</span></a>
-</span><span id="Parser-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-4126"><a href="#Parser-4126"><span class="linenos">4126</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-4127"><a href="#Parser-4127"><span class="linenos">4127</span></a>
-</span><span id="Parser-4128"><a href="#Parser-4128"><span class="linenos">4128</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="Parser-4129"><a href="#Parser-4129"><span class="linenos">4129</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Parser-4130"><a href="#Parser-4130"><span class="linenos">4130</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-4131"><a href="#Parser-4131"><span class="linenos">4131</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4132"><a href="#Parser-4132"><span class="linenos">4132</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="Parser-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a> <span class="k">pass</span>
-</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="Parser-4135"><a href="#Parser-4135"><span class="linenos">4135</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
-</span><span id="Parser-4136"><a href="#Parser-4136"><span class="linenos">4136</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4126"><a href="#Parser-4126"><span class="linenos">4126</span></a>
+</span><span id="Parser-4127"><a href="#Parser-4127"><span class="linenos">4127</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-4128"><a href="#Parser-4128"><span class="linenos">4128</span></a>
+</span><span id="Parser-4129"><a href="#Parser-4129"><span class="linenos">4129</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">DISTINCT</span><span class="p">):</span>
+</span><span id="Parser-4130"><a href="#Parser-4130"><span class="linenos">4130</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><span id="Parser-4131"><a href="#Parser-4131"><span class="linenos">4131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4132"><a href="#Parser-4132"><span class="linenos">4132</span></a> <span class="p">)</span>
+</span><span id="Parser-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-4135"><a href="#Parser-4135"><span class="linenos">4135</span></a>
+</span><span id="Parser-4136"><a href="#Parser-4136"><span class="linenos">4136</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
</span><span id="Parser-4137"><a href="#Parser-4137"><span class="linenos">4137</span></a>
-</span><span id="Parser-4138"><a href="#Parser-4138"><span class="linenos">4138</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4138"><a href="#Parser-4138"><span class="linenos">4138</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4140"><a href="#Parser-4140"><span class="linenos">4140</span></a>
-</span><span id="Parser-4141"><a href="#Parser-4141"><span class="linenos">4141</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
-</span><span id="Parser-4142"><a href="#Parser-4142"><span class="linenos">4142</span></a>
-</span><span id="Parser-4143"><a href="#Parser-4143"><span class="linenos">4143</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4144"><a href="#Parser-4144"><span class="linenos">4144</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">Schema</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">args</span><span class="p">)</span>
-</span><span id="Parser-4145"><a href="#Parser-4145"><span class="linenos">4145</span></a>
-</span><span id="Parser-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</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="Parser-4147"><a href="#Parser-4147"><span class="linenos">4147</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-4148"><a href="#Parser-4148"><span class="linenos">4148</span></a>
-</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
-</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="Parser-4152"><a href="#Parser-4152"><span class="linenos">4152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-4141"><a href="#Parser-4141"><span class="linenos">4141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="Parser-4142"><a href="#Parser-4142"><span class="linenos">4142</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser-4143"><a href="#Parser-4143"><span class="linenos">4143</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-4144"><a href="#Parser-4144"><span class="linenos">4144</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4145"><a href="#Parser-4145"><span class="linenos">4145</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="Parser-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a> <span class="k">pass</span>
+</span><span id="Parser-4147"><a href="#Parser-4147"><span class="linenos">4147</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="Parser-4148"><a href="#Parser-4148"><span class="linenos">4148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
+</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a>
+</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4152"><a href="#Parser-4152"><span class="linenos">4152</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4153"><a href="#Parser-4153"><span class="linenos">4153</span></a>
-</span><span id="Parser-4154"><a href="#Parser-4154"><span class="linenos">4154</span></a> <span class="n">kind</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 class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4154"><a href="#Parser-4154"><span class="linenos">4154</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
</span><span id="Parser-4155"><a href="#Parser-4155"><span class="linenos">4155</span></a>
-</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
-</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</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">ColumnDef</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">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</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">Schema</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">args</span><span class="p">)</span>
</span><span id="Parser-4158"><a href="#Parser-4158"><span class="linenos">4158</span></a>
-</span><span id="Parser-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4160"><a href="#Parser-4160"><span class="linenos">4160</span></a>
-</span><span id="Parser-4161"><a href="#Parser-4161"><span class="linenos">4161</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</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><span id="Parser-4162"><a href="#Parser-4162"><span class="linenos">4162</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4163"><a href="#Parser-4163"><span class="linenos">4163</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-4165"><a href="#Parser-4165"><span class="linenos">4165</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="Parser-4166"><a href="#Parser-4166"><span class="linenos">4166</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
-</span><span id="Parser-4167"><a href="#Parser-4167"><span class="linenos">4167</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="Parser-4168"><a href="#Parser-4168"><span class="linenos">4168</span></a> <span class="p">)</span>
-</span><span id="Parser-4169"><a href="#Parser-4169"><span class="linenos">4169</span></a> <span class="p">)</span>
-</span><span id="Parser-4170"><a href="#Parser-4170"><span class="linenos">4170</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</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="Parser-4171"><a href="#Parser-4171"><span class="linenos">4171</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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-4172"><a href="#Parser-4172"><span class="linenos">4172</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4173"><a href="#Parser-4173"><span class="linenos">4173</span></a> <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">TransformColumnConstraint</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_field</span><span class="p">())</span>
-</span><span id="Parser-4174"><a href="#Parser-4174"><span class="linenos">4174</span></a> <span class="p">)</span>
-</span><span id="Parser-4175"><a href="#Parser-4175"><span class="linenos">4175</span></a>
-</span><span id="Parser-4176"><a href="#Parser-4176"><span class="linenos">4176</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4177"><a href="#Parser-4177"><span class="linenos">4177</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
-</span><span id="Parser-4178"><a href="#Parser-4178"><span class="linenos">4178</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</span></a> <span class="k">break</span>
-</span><span id="Parser-4180"><a href="#Parser-4180"><span class="linenos">4180</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
-</span><span id="Parser-4181"><a href="#Parser-4181"><span class="linenos">4181</span></a>
-</span><span id="Parser-4182"><a href="#Parser-4182"><span class="linenos">4182</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
-</span><span id="Parser-4183"><a href="#Parser-4183"><span class="linenos">4183</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4184"><a href="#Parser-4184"><span class="linenos">4184</span></a>
-</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</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">ColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
-</span><span id="Parser-4186"><a href="#Parser-4186"><span class="linenos">4186</span></a>
-</span><span id="Parser-4187"><a href="#Parser-4187"><span class="linenos">4187</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
-</span><span id="Parser-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-4189"><a href="#Parser-4189"><span class="linenos">4189</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4192"><a href="#Parser-4192"><span class="linenos">4192</span></a>
-</span><span id="Parser-4193"><a href="#Parser-4193"><span class="linenos">4193</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">L_PAREN</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="Parser-4194"><a href="#Parser-4194"><span class="linenos">4194</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="Parser-4195"><a href="#Parser-4195"><span class="linenos">4195</span></a> <span class="n">start</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="Parser-4196"><a href="#Parser-4196"><span class="linenos">4196</span></a> <span class="n">increment</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="Parser-4197"><a href="#Parser-4197"><span class="linenos">4197</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;START&quot;</span><span class="p">):</span>
-</span><span id="Parser-4198"><a href="#Parser-4198"><span class="linenos">4198</span></a> <span class="n">start</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="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
-</span><span id="Parser-4200"><a href="#Parser-4200"><span class="linenos">4200</span></a> <span class="n">increment</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="Parser-4201"><a href="#Parser-4201"><span class="linenos">4201</span></a>
-</span><span id="Parser-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
-</span><span id="Parser-4203"><a href="#Parser-4203"><span class="linenos">4203</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
-</span><span id="Parser-4204"><a href="#Parser-4204"><span class="linenos">4204</span></a>
-</span><span id="Parser-4205"><a href="#Parser-4205"><span class="linenos">4205</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
-</span><span id="Parser-4206"><a href="#Parser-4206"><span class="linenos">4206</span></a>
-</span><span id="Parser-4207"><a href="#Parser-4207"><span class="linenos">4207</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</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">AutoRefreshProperty</span><span class="p">]:</span>
-</span><span id="Parser-4208"><a href="#Parser-4208"><span class="linenos">4208</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;REFRESH&quot;</span><span class="p">):</span>
-</span><span id="Parser-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4210"><a href="#Parser-4210"><span class="linenos">4210</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</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">AutoRefreshProperty</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_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-4212"><a href="#Parser-4212"><span class="linenos">4212</span></a>
-</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</span></a> <span class="k">def</span> <span class="nf">_parse_compress</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">CompressColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4214"><a href="#Parser-4214"><span class="linenos">4214</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">L_PAREN</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="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</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="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</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_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="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a> <span class="p">)</span>
-</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</span></a>
-</span><span id="Parser-4219"><a href="#Parser-4219"><span class="linenos">4219</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">CompressColumnConstraint</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><span id="Parser-4220"><a href="#Parser-4220"><span class="linenos">4220</span></a>
-</span><span id="Parser-4221"><a href="#Parser-4221"><span class="linenos">4221</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
-</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
-</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="Parser-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
-</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
-</span><span id="Parser-4227"><a href="#Parser-4227"><span class="linenos">4227</span></a> <span class="p">):</span>
-</span><span id="Parser-4228"><a href="#Parser-4228"><span class="linenos">4228</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
-</span><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="Parser-4230"><a href="#Parser-4230"><span class="linenos">4230</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><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
-</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</span></a> <span class="p">)</span>
-</span><span id="Parser-4233"><a href="#Parser-4233"><span class="linenos">4233</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="Parser-4235"><a href="#Parser-4235"><span class="linenos">4235</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">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a>
-</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-4238"><a href="#Parser-4238"><span class="linenos">4238</span></a>
-</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</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;ROW&quot;</span><span class="p">):</span>
-</span><span id="Parser-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
-</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
-</span><span id="Parser-4242"><a href="#Parser-4242"><span class="linenos">4242</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">END</span><span class="p">)</span>
-</span><span id="Parser-4243"><a href="#Parser-4243"><span class="linenos">4243</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
-</span><span id="Parser-4244"><a href="#Parser-4244"><span class="linenos">4244</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">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
-</span><span id="Parser-4245"><a href="#Parser-4245"><span class="linenos">4245</span></a>
-</span><span id="Parser-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</span></a>
-</span><span id="Parser-4248"><a href="#Parser-4248"><span class="linenos">4248</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</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">START_WITH</span><span class="p">):</span>
-</span><span id="Parser-4250"><a href="#Parser-4250"><span class="linenos">4250</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</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="Parser-4251"><a href="#Parser-4251"><span class="linenos">4251</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;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</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="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</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;MINVALUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</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="Parser-4255"><a href="#Parser-4255"><span class="linenos">4255</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;MAXVALUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</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="Parser-4257"><a href="#Parser-4257"><span class="linenos">4257</span></a>
-</span><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</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;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-4262"><a href="#Parser-4262"><span class="linenos">4262</span></a>
-</span><span id="Parser-4263"><a href="#Parser-4263"><span class="linenos">4263</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
-</span><span id="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</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="Parser-4265"><a href="#Parser-4265"><span class="linenos">4265</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</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;start&quot;</span><span class="p">)</span> <span class="ow">and</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">NUMBER</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="Parser-4266"><a href="#Parser-4266"><span class="linenos">4266</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
-</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</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="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</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="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a>
-</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4271"><a href="#Parser-4271"><span class="linenos">4271</span></a>
-</span><span id="Parser-4272"><a href="#Parser-4272"><span class="linenos">4272</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4273"><a href="#Parser-4273"><span class="linenos">4273</span></a>
-</span><span id="Parser-4274"><a href="#Parser-4274"><span class="linenos">4274</span></a> <span class="k">def</span> <span class="nf">_parse_inline</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">InlineLengthColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4275"><a href="#Parser-4275"><span class="linenos">4275</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
-</span><span id="Parser-4276"><a href="#Parser-4276"><span class="linenos">4276</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">InlineLengthColumnConstraint</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><span id="Parser-4277"><a href="#Parser-4277"><span class="linenos">4277</span></a>
-</span><span id="Parser-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
-</span><span id="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-4280"><a href="#Parser-4280"><span class="linenos">4280</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="Parser-4281"><a href="#Parser-4281"><span class="linenos">4281</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;NULL&quot;</span><span class="p">):</span>
-</span><span id="Parser-4282"><a href="#Parser-4282"><span class="linenos">4282</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">NotNullColumnConstraint</span><span class="p">)</span>
-</span><span id="Parser-4283"><a href="#Parser-4283"><span class="linenos">4283</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;CASESPECIFIC&quot;</span><span class="p">):</span>
-</span><span id="Parser-4284"><a href="#Parser-4284"><span class="linenos">4284</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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4285"><a href="#Parser-4285"><span class="linenos">4285</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4286"><a href="#Parser-4286"><span class="linenos">4286</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">NotForReplicationColumnConstraint</span><span class="p">)</span>
-</span><span id="Parser-4287"><a href="#Parser-4287"><span class="linenos">4287</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4288"><a href="#Parser-4288"><span class="linenos">4288</span></a>
-</span><span id="Parser-4289"><a href="#Parser-4289"><span class="linenos">4289</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</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="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</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">CONSTRAINT</span><span class="p">):</span>
-</span><span id="Parser-4291"><a href="#Parser-4291"><span class="linenos">4291</span></a> <span class="n">this</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><span id="Parser-4292"><a href="#Parser-4292"><span class="linenos">4292</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4294"><a href="#Parser-4294"><span class="linenos">4294</span></a>
-</span><span id="Parser-4295"><a href="#Parser-4295"><span class="linenos">4295</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-4296"><a href="#Parser-4296"><span class="linenos">4296</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="Parser-4297"><a href="#Parser-4297"><span class="linenos">4297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-4298"><a href="#Parser-4298"><span class="linenos">4298</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4299"><a href="#Parser-4299"><span class="linenos">4299</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</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 class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
-</span><span id="Parser-4300"><a href="#Parser-4300"><span class="linenos">4300</span></a> <span class="p">)</span>
+</span><span id="Parser-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</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="Parser-4160"><a href="#Parser-4160"><span class="linenos">4160</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-4161"><a href="#Parser-4161"><span class="linenos">4161</span></a>
+</span><span id="Parser-4162"><a href="#Parser-4162"><span class="linenos">4162</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4163"><a href="#Parser-4163"><span class="linenos">4163</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
+</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="Parser-4165"><a href="#Parser-4165"><span class="linenos">4165</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-4166"><a href="#Parser-4166"><span class="linenos">4166</span></a>
+</span><span id="Parser-4167"><a href="#Parser-4167"><span class="linenos">4167</span></a> <span class="n">kind</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 class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4168"><a href="#Parser-4168"><span class="linenos">4168</span></a>
+</span><span id="Parser-4169"><a href="#Parser-4169"><span class="linenos">4169</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
+</span><span id="Parser-4170"><a href="#Parser-4170"><span class="linenos">4170</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">ColumnDef</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">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4171"><a href="#Parser-4171"><span class="linenos">4171</span></a>
+</span><span id="Parser-4172"><a href="#Parser-4172"><span class="linenos">4172</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4173"><a href="#Parser-4173"><span class="linenos">4173</span></a>
+</span><span id="Parser-4174"><a href="#Parser-4174"><span class="linenos">4174</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</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><span id="Parser-4175"><a href="#Parser-4175"><span class="linenos">4175</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4176"><a href="#Parser-4176"><span class="linenos">4176</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4177"><a href="#Parser-4177"><span class="linenos">4177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-4178"><a href="#Parser-4178"><span class="linenos">4178</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="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
+</span><span id="Parser-4180"><a href="#Parser-4180"><span class="linenos">4180</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="Parser-4181"><a href="#Parser-4181"><span class="linenos">4181</span></a> <span class="p">)</span>
+</span><span id="Parser-4182"><a href="#Parser-4182"><span class="linenos">4182</span></a> <span class="p">)</span>
+</span><span id="Parser-4183"><a href="#Parser-4183"><span class="linenos">4183</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</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="Parser-4184"><a href="#Parser-4184"><span class="linenos">4184</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">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4186"><a href="#Parser-4186"><span class="linenos">4186</span></a> <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">TransformColumnConstraint</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_field</span><span class="p">())</span>
+</span><span id="Parser-4187"><a href="#Parser-4187"><span class="linenos">4187</span></a> <span class="p">)</span>
+</span><span id="Parser-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a>
+</span><span id="Parser-4189"><a href="#Parser-4189"><span class="linenos">4189</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
+</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Parser-4192"><a href="#Parser-4192"><span class="linenos">4192</span></a> <span class="k">break</span>
+</span><span id="Parser-4193"><a href="#Parser-4193"><span class="linenos">4193</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="Parser-4194"><a href="#Parser-4194"><span class="linenos">4194</span></a>
+</span><span id="Parser-4195"><a href="#Parser-4195"><span class="linenos">4195</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
+</span><span id="Parser-4196"><a href="#Parser-4196"><span class="linenos">4196</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4197"><a href="#Parser-4197"><span class="linenos">4197</span></a>
+</span><span id="Parser-4198"><a href="#Parser-4198"><span class="linenos">4198</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">ColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
+</span><span id="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</span></a>
+</span><span id="Parser-4200"><a href="#Parser-4200"><span class="linenos">4200</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
+</span><span id="Parser-4201"><a href="#Parser-4201"><span class="linenos">4201</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4203"><a href="#Parser-4203"><span class="linenos">4203</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4204"><a href="#Parser-4204"><span class="linenos">4204</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4205"><a href="#Parser-4205"><span class="linenos">4205</span></a>
+</span><span id="Parser-4206"><a href="#Parser-4206"><span class="linenos">4206</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">L_PAREN</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="Parser-4207"><a href="#Parser-4207"><span class="linenos">4207</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="Parser-4208"><a href="#Parser-4208"><span class="linenos">4208</span></a> <span class="n">start</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="Parser-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a> <span class="n">increment</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="Parser-4210"><a href="#Parser-4210"><span class="linenos">4210</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;START&quot;</span><span class="p">):</span>
+</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</span></a> <span class="n">start</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="Parser-4212"><a href="#Parser-4212"><span class="linenos">4212</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
+</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</span></a> <span class="n">increment</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="Parser-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a>
+</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
+</span><span id="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
+</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a>
+</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
+</span><span id="Parser-4219"><a href="#Parser-4219"><span class="linenos">4219</span></a>
+</span><span id="Parser-4220"><a href="#Parser-4220"><span class="linenos">4220</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</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">AutoRefreshProperty</span><span class="p">]:</span>
+</span><span id="Parser-4221"><a href="#Parser-4221"><span class="linenos">4221</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;REFRESH&quot;</span><span class="p">):</span>
+</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</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">AutoRefreshProperty</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_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a>
+</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a> <span class="k">def</span> <span class="nf">_parse_compress</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">CompressColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4227"><a href="#Parser-4227"><span class="linenos">4227</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">L_PAREN</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="Parser-4228"><a href="#Parser-4228"><span class="linenos">4228</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="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</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_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="Parser-4230"><a href="#Parser-4230"><span class="linenos">4230</span></a> <span class="p">)</span>
+</span><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a>
+</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</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">CompressColumnConstraint</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><span id="Parser-4233"><a href="#Parser-4233"><span class="linenos">4233</span></a>
+</span><span id="Parser-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
+</span><span id="Parser-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
+</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="Parser-4238"><a href="#Parser-4238"><span class="linenos">4238</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
+</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
+</span><span id="Parser-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a> <span class="p">):</span>
+</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
+</span><span id="Parser-4242"><a href="#Parser-4242"><span class="linenos">4242</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="Parser-4243"><a href="#Parser-4243"><span class="linenos">4243</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><span id="Parser-4244"><a href="#Parser-4244"><span class="linenos">4244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
+</span><span id="Parser-4245"><a href="#Parser-4245"><span class="linenos">4245</span></a> <span class="p">)</span>
+</span><span id="Parser-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
+</span><span id="Parser-4248"><a href="#Parser-4248"><span class="linenos">4248</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">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</span></a>
+</span><span id="Parser-4250"><a href="#Parser-4250"><span class="linenos">4250</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">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-4251"><a href="#Parser-4251"><span class="linenos">4251</span></a>
+</span><span id="Parser-4252"><a href="#Parser-4252"><span class="linenos">4252</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;ROW&quot;</span><span class="p">):</span>
+</span><span id="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
+</span><span id="Parser-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
+</span><span id="Parser-4255"><a href="#Parser-4255"><span class="linenos">4255</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">END</span><span class="p">)</span>
+</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
+</span><span id="Parser-4257"><a href="#Parser-4257"><span class="linenos">4257</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">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
+</span><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</span></a>
+</span><span id="Parser-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a>
+</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4262"><a href="#Parser-4262"><span class="linenos">4262</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">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-4263"><a href="#Parser-4263"><span class="linenos">4263</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</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="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</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;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="Parser-4265"><a href="#Parser-4265"><span class="linenos">4265</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</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="Parser-4266"><a href="#Parser-4266"><span class="linenos">4266</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;MINVALUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</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="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</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;MAXVALUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</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="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</span></a>
+</span><span id="Parser-4271"><a href="#Parser-4271"><span class="linenos">4271</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;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4272"><a href="#Parser-4272"><span class="linenos">4272</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4273"><a href="#Parser-4273"><span class="linenos">4273</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4274"><a href="#Parser-4274"><span class="linenos">4274</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-4275"><a href="#Parser-4275"><span class="linenos">4275</span></a>
+</span><span id="Parser-4276"><a href="#Parser-4276"><span class="linenos">4276</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
+</span><span id="Parser-4277"><a href="#Parser-4277"><span class="linenos">4277</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</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="Parser-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</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;start&quot;</span><span class="p">)</span> <span class="ow">and</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">NUMBER</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="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
+</span><span id="Parser-4280"><a href="#Parser-4280"><span class="linenos">4280</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</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="Parser-4281"><a href="#Parser-4281"><span class="linenos">4281</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</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="Parser-4282"><a href="#Parser-4282"><span class="linenos">4282</span></a>
+</span><span id="Parser-4283"><a href="#Parser-4283"><span class="linenos">4283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4284"><a href="#Parser-4284"><span class="linenos">4284</span></a>
+</span><span id="Parser-4285"><a href="#Parser-4285"><span class="linenos">4285</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4286"><a href="#Parser-4286"><span class="linenos">4286</span></a>
+</span><span id="Parser-4287"><a href="#Parser-4287"><span class="linenos">4287</span></a> <span class="k">def</span> <span class="nf">_parse_inline</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">InlineLengthColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4288"><a href="#Parser-4288"><span class="linenos">4288</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
+</span><span id="Parser-4289"><a href="#Parser-4289"><span class="linenos">4289</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">InlineLengthColumnConstraint</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><span id="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</span></a>
+</span><span id="Parser-4291"><a href="#Parser-4291"><span class="linenos">4291</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
+</span><span id="Parser-4292"><a href="#Parser-4292"><span class="linenos">4292</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4293"><a href="#Parser-4293"><span class="linenos">4293</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="Parser-4294"><a href="#Parser-4294"><span class="linenos">4294</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;NULL&quot;</span><span class="p">):</span>
+</span><span id="Parser-4295"><a href="#Parser-4295"><span class="linenos">4295</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">NotNullColumnConstraint</span><span class="p">)</span>
+</span><span id="Parser-4296"><a href="#Parser-4296"><span class="linenos">4296</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;CASESPECIFIC&quot;</span><span class="p">):</span>
+</span><span id="Parser-4297"><a href="#Parser-4297"><span class="linenos">4297</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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4298"><a href="#Parser-4298"><span class="linenos">4298</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4299"><a href="#Parser-4299"><span class="linenos">4299</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">NotForReplicationColumnConstraint</span><span class="p">)</span>
+</span><span id="Parser-4300"><a href="#Parser-4300"><span class="linenos">4300</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4301"><a href="#Parser-4301"><span class="linenos">4301</span></a>
-</span><span id="Parser-4302"><a href="#Parser-4302"><span class="linenos">4302</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</span></a>
-</span><span id="Parser-4304"><a href="#Parser-4304"><span class="linenos">4304</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</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="Parser-4305"><a href="#Parser-4305"><span class="linenos">4305</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
-</span><span id="Parser-4306"><a href="#Parser-4306"><span class="linenos">4306</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="Parser-4302"><a href="#Parser-4302"><span class="linenos">4302</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</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="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</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">CONSTRAINT</span><span class="p">):</span>
+</span><span id="Parser-4304"><a href="#Parser-4304"><span class="linenos">4304</span></a> <span class="n">this</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><span id="Parser-4305"><a href="#Parser-4305"><span class="linenos">4305</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4306"><a href="#Parser-4306"><span class="linenos">4306</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4307"><a href="#Parser-4307"><span class="linenos">4307</span></a>
-</span><span id="Parser-4308"><a href="#Parser-4308"><span class="linenos">4308</span></a> <span class="n">this</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><span id="Parser-4309"><a href="#Parser-4309"><span class="linenos">4309</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</span></a>
-</span><span id="Parser-4311"><a href="#Parser-4311"><span class="linenos">4311</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4312"><a href="#Parser-4312"><span class="linenos">4312</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="Parser-4313"><a href="#Parser-4313"><span class="linenos">4313</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Parser-4314"><a href="#Parser-4314"><span class="linenos">4314</span></a> <span class="k">break</span>
-</span><span id="Parser-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="Parser-4308"><a href="#Parser-4308"><span class="linenos">4308</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-4309"><a href="#Parser-4309"><span class="linenos">4309</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="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-4311"><a href="#Parser-4311"><span class="linenos">4311</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4312"><a href="#Parser-4312"><span class="linenos">4312</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</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 class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
+</span><span id="Parser-4313"><a href="#Parser-4313"><span class="linenos">4313</span></a> <span class="p">)</span>
+</span><span id="Parser-4314"><a href="#Parser-4314"><span class="linenos">4314</span></a>
+</span><span id="Parser-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4316"><a href="#Parser-4316"><span class="linenos">4316</span></a>
-</span><span id="Parser-4317"><a href="#Parser-4317"><span class="linenos">4317</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">Constraint</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="Parser-4318"><a href="#Parser-4318"><span class="linenos">4318</span></a>
-</span><span id="Parser-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
-</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4321"><a href="#Parser-4321"><span class="linenos">4321</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="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</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">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
-</span><span id="Parser-4323"><a href="#Parser-4323"><span class="linenos">4323</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
-</span><span id="Parser-4324"><a href="#Parser-4324"><span class="linenos">4324</span></a> <span class="p">):</span>
-</span><span id="Parser-4325"><a href="#Parser-4325"><span class="linenos">4325</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a>
-</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a> <span class="n">constraint</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4328"><a href="#Parser-4328"><span class="linenos">4328</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
-</span><span id="Parser-4329"><a href="#Parser-4329"><span class="linenos">4329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="Parser-4330"><a href="#Parser-4330"><span class="linenos">4330</span></a>
-</span><span id="Parser-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-4332"><a href="#Parser-4332"><span class="linenos">4332</span></a>
-</span><span id="Parser-4333"><a href="#Parser-4333"><span class="linenos">4333</span></a> <span class="k">def</span> <span class="nf">_parse_unique</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">UniqueColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4334"><a href="#Parser-4334"><span class="linenos">4334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4335"><a href="#Parser-4335"><span class="linenos">4335</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="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-4337"><a href="#Parser-4337"><span class="linenos">4337</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</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><span id="Parser-4338"><a href="#Parser-4338"><span class="linenos">4338</span></a> <span class="n">index_type</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="p">,</span>
-</span><span id="Parser-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a> <span class="p">)</span>
-</span><span id="Parser-4340"><a href="#Parser-4340"><span class="linenos">4340</span></a>
-</span><span id="Parser-4341"><a href="#Parser-4341"><span class="linenos">4341</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Parser-4342"><a href="#Parser-4342"><span class="linenos">4342</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4344"><a href="#Parser-4344"><span class="linenos">4344</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-4345"><a href="#Parser-4345"><span class="linenos">4345</span></a> <span class="k">break</span>
-</span><span id="Parser-4346"><a href="#Parser-4346"><span class="linenos">4346</span></a>
-</span><span id="Parser-4347"><a href="#Parser-4347"><span class="linenos">4347</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">ON</span><span class="p">):</span>
-</span><span id="Parser-4348"><a href="#Parser-4348"><span class="linenos">4348</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4349"><a href="#Parser-4349"><span class="linenos">4349</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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="Parser-4350"><a href="#Parser-4350"><span class="linenos">4350</span></a>
-</span><span id="Parser-4351"><a href="#Parser-4351"><span class="linenos">4351</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</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;CASCADE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="Parser-4355"><a href="#Parser-4355"><span class="linenos">4355</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;RESTRICT&quot;</span><span class="p">):</span>
-</span><span id="Parser-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
-</span><span id="Parser-4357"><a href="#Parser-4357"><span class="linenos">4357</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
-</span><span id="Parser-4358"><a href="#Parser-4358"><span class="linenos">4358</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="Parser-4359"><a href="#Parser-4359"><span class="linenos">4359</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="Parser-4360"><a href="#Parser-4360"><span class="linenos">4360</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="Parser-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4362"><a href="#Parser-4362"><span class="linenos">4362</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;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="Parser-4317"><a href="#Parser-4317"><span class="linenos">4317</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</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="Parser-4318"><a href="#Parser-4318"><span class="linenos">4318</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
+</span><span id="Parser-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</span></a>
+</span><span id="Parser-4321"><a href="#Parser-4321"><span class="linenos">4321</span></a> <span class="n">this</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><span id="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4323"><a href="#Parser-4323"><span class="linenos">4323</span></a>
+</span><span id="Parser-4324"><a href="#Parser-4324"><span class="linenos">4324</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4325"><a href="#Parser-4325"><span class="linenos">4325</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="Parser-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a> <span class="k">break</span>
+</span><span id="Parser-4328"><a href="#Parser-4328"><span class="linenos">4328</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="Parser-4329"><a href="#Parser-4329"><span class="linenos">4329</span></a>
+</span><span id="Parser-4330"><a href="#Parser-4330"><span class="linenos">4330</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">Constraint</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="Parser-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a>
+</span><span id="Parser-4332"><a href="#Parser-4332"><span class="linenos">4332</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="Parser-4333"><a href="#Parser-4333"><span class="linenos">4333</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4334"><a href="#Parser-4334"><span class="linenos">4334</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="Parser-4335"><a href="#Parser-4335"><span class="linenos">4335</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">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
+</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
+</span><span id="Parser-4337"><a href="#Parser-4337"><span class="linenos">4337</span></a> <span class="p">):</span>
+</span><span id="Parser-4338"><a href="#Parser-4338"><span class="linenos">4338</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a>
+</span><span id="Parser-4340"><a href="#Parser-4340"><span class="linenos">4340</span></a> <span class="n">constraint</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4341"><a href="#Parser-4341"><span class="linenos">4341</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
+</span><span id="Parser-4342"><a href="#Parser-4342"><span class="linenos">4342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="Parser-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a>
+</span><span id="Parser-4344"><a href="#Parser-4344"><span class="linenos">4344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-4345"><a href="#Parser-4345"><span class="linenos">4345</span></a>
+</span><span id="Parser-4346"><a href="#Parser-4346"><span class="linenos">4346</span></a> <span class="k">def</span> <span class="nf">_parse_unique</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">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4347"><a href="#Parser-4347"><span class="linenos">4347</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4348"><a href="#Parser-4348"><span class="linenos">4348</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="Parser-4349"><a href="#Parser-4349"><span class="linenos">4349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-4350"><a href="#Parser-4350"><span class="linenos">4350</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</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><span id="Parser-4351"><a href="#Parser-4351"><span class="linenos">4351</span></a> <span class="n">index_type</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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 class="p">,</span>
+</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="p">)</span>
+</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</span></a>
+</span><span id="Parser-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Parser-4355"><a href="#Parser-4355"><span class="linenos">4355</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4357"><a href="#Parser-4357"><span class="linenos">4357</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-4358"><a href="#Parser-4358"><span class="linenos">4358</span></a> <span class="k">break</span>
+</span><span id="Parser-4359"><a href="#Parser-4359"><span class="linenos">4359</span></a>
+</span><span id="Parser-4360"><a href="#Parser-4360"><span class="linenos">4360</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">ON</span><span class="p">):</span>
+</span><span id="Parser-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4362"><a href="#Parser-4362"><span class="linenos">4362</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</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="Parser-4363"><a href="#Parser-4363"><span class="linenos">4363</span></a>
-</span><span id="Parser-4364"><a href="#Parser-4364"><span class="linenos">4364</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</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;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
-</span><span id="Parser-4366"><a href="#Parser-4366"><span class="linenos">4366</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
-</span><span id="Parser-4367"><a href="#Parser-4367"><span class="linenos">4367</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;DEFERRABLE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4369"><a href="#Parser-4369"><span class="linenos">4369</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;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
-</span><span id="Parser-4370"><a href="#Parser-4370"><span class="linenos">4370</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
-</span><span id="Parser-4371"><a href="#Parser-4371"><span class="linenos">4371</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;NORELY&quot;</span><span class="p">):</span>
-</span><span id="Parser-4372"><a href="#Parser-4372"><span class="linenos">4372</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4373"><a href="#Parser-4373"><span class="linenos">4373</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;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
-</span><span id="Parser-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4375"><a href="#Parser-4375"><span class="linenos">4375</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4376"><a href="#Parser-4376"><span class="linenos">4376</span></a> <span class="k">break</span>
-</span><span id="Parser-4377"><a href="#Parser-4377"><span class="linenos">4377</span></a>
-</span><span id="Parser-4378"><a href="#Parser-4378"><span class="linenos">4378</span></a> <span class="k">return</span> <span class="n">options</span>
-</span><span id="Parser-4379"><a href="#Parser-4379"><span class="linenos">4379</span></a>
-</span><span id="Parser-4380"><a href="#Parser-4380"><span class="linenos">4380</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Reference</span><span class="p">]:</span>
-</span><span id="Parser-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</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">REFERENCES</span><span class="p">):</span>
-</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4383"><a href="#Parser-4383"><span class="linenos">4383</span></a>
-</span><span id="Parser-4384"><a href="#Parser-4384"><span class="linenos">4384</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4385"><a href="#Parser-4385"><span class="linenos">4385</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4386"><a href="#Parser-4386"><span class="linenos">4386</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="Parser-4387"><a href="#Parser-4387"><span class="linenos">4387</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">Reference</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 class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="Parser-4388"><a href="#Parser-4388"><span class="linenos">4388</span></a>
-</span><span id="Parser-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</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">ForeignKey</span><span class="p">:</span>
-</span><span id="Parser-4390"><a href="#Parser-4390"><span class="linenos">4390</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-4391"><a href="#Parser-4391"><span class="linenos">4391</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
-</span><span id="Parser-4392"><a href="#Parser-4392"><span class="linenos">4392</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-4393"><a href="#Parser-4393"><span class="linenos">4393</span></a>
-</span><span id="Parser-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="k">while</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">ON</span><span class="p">):</span>
-</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
-</span><span id="Parser-4396"><a href="#Parser-4396"><span class="linenos">4396</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a>
-</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</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 class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</span></a>
-</span><span id="Parser-4400"><a href="#Parser-4400"><span class="linenos">4400</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</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">SET</span><span class="p">):</span>
-</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</span></a> <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">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
-</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4406"><a href="#Parser-4406"><span class="linenos">4406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</span></a> <span class="n">action</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</span></a>
-</span><span id="Parser-4409"><a href="#Parser-4409"><span class="linenos">4409</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="Parser-4364"><a href="#Parser-4364"><span class="linenos">4364</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-4366"><a href="#Parser-4366"><span class="linenos">4366</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;CASCADE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4367"><a href="#Parser-4367"><span class="linenos">4367</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</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;RESTRICT&quot;</span><span class="p">):</span>
+</span><span id="Parser-4369"><a href="#Parser-4369"><span class="linenos">4369</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
+</span><span id="Parser-4370"><a href="#Parser-4370"><span class="linenos">4370</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
+</span><span id="Parser-4371"><a href="#Parser-4371"><span class="linenos">4371</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="Parser-4372"><a href="#Parser-4372"><span class="linenos">4372</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="Parser-4373"><a href="#Parser-4373"><span class="linenos">4373</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="Parser-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4375"><a href="#Parser-4375"><span class="linenos">4375</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;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="Parser-4376"><a href="#Parser-4376"><span class="linenos">4376</span></a>
+</span><span id="Parser-4377"><a href="#Parser-4377"><span class="linenos">4377</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-4378"><a href="#Parser-4378"><span class="linenos">4378</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;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
+</span><span id="Parser-4379"><a href="#Parser-4379"><span class="linenos">4379</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
+</span><span id="Parser-4380"><a href="#Parser-4380"><span class="linenos">4380</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;DEFERRABLE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</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;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
+</span><span id="Parser-4383"><a href="#Parser-4383"><span class="linenos">4383</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
+</span><span id="Parser-4384"><a href="#Parser-4384"><span class="linenos">4384</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;NORELY&quot;</span><span class="p">):</span>
+</span><span id="Parser-4385"><a href="#Parser-4385"><span class="linenos">4385</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4386"><a href="#Parser-4386"><span class="linenos">4386</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;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
+</span><span id="Parser-4387"><a href="#Parser-4387"><span class="linenos">4387</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4388"><a href="#Parser-4388"><span class="linenos">4388</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="k">break</span>
+</span><span id="Parser-4390"><a href="#Parser-4390"><span class="linenos">4390</span></a>
+</span><span id="Parser-4391"><a href="#Parser-4391"><span class="linenos">4391</span></a> <span class="k">return</span> <span class="n">options</span>
+</span><span id="Parser-4392"><a href="#Parser-4392"><span class="linenos">4392</span></a>
+</span><span id="Parser-4393"><a href="#Parser-4393"><span class="linenos">4393</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">Reference</span><span class="p">]:</span>
+</span><span id="Parser-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</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">REFERENCES</span><span class="p">):</span>
+</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4396"><a href="#Parser-4396"><span class="linenos">4396</span></a>
+</span><span id="Parser-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="Parser-4400"><a href="#Parser-4400"><span class="linenos">4400</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">Reference</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 class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a>
+</span><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</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">ForeignKey</span><span class="p">:</span>
+</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
+</span><span id="Parser-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-4406"><a href="#Parser-4406"><span class="linenos">4406</span></a>
+</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</span></a> <span class="k">while</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">ON</span><span class="p">):</span>
+</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
+</span><span id="Parser-4409"><a href="#Parser-4409"><span class="linenos">4409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
</span><span id="Parser-4410"><a href="#Parser-4410"><span class="linenos">4410</span></a>
-</span><span id="Parser-4411"><a href="#Parser-4411"><span class="linenos">4411</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="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
-</span><span id="Parser-4413"><a href="#Parser-4413"><span class="linenos">4413</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-4414"><a href="#Parser-4414"><span class="linenos">4414</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
-</span><span id="Parser-4415"><a href="#Parser-4415"><span class="linenos">4415</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-4416"><a href="#Parser-4416"><span class="linenos">4416</span></a> <span class="p">)</span>
-</span><span id="Parser-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a>
-</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</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="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a>
-</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_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">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
-</span><span id="Parser-4422"><a href="#Parser-4422"><span class="linenos">4422</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="Parser-4423"><a href="#Parser-4423"><span class="linenos">4423</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4424"><a href="#Parser-4424"><span class="linenos">4424</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4425"><a href="#Parser-4425"><span class="linenos">4425</span></a>
-</span><span id="Parser-4426"><a href="#Parser-4426"><span class="linenos">4426</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-4427"><a href="#Parser-4427"><span class="linenos">4427</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="Parser-4428"><a href="#Parser-4428"><span class="linenos">4428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
-</span><span id="Parser-4429"><a href="#Parser-4429"><span class="linenos">4429</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Parser-4430"><a href="#Parser-4430"><span class="linenos">4430</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Parser-4431"><a href="#Parser-4431"><span class="linenos">4431</span></a> <span class="p">)</span>
-</span><span id="Parser-4432"><a href="#Parser-4432"><span class="linenos">4432</span></a>
-</span><span id="Parser-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="Parser-4434"><a href="#Parser-4434"><span class="linenos">4434</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="Parser-4436"><a href="#Parser-4436"><span class="linenos">4436</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4437"><a href="#Parser-4437"><span class="linenos">4437</span></a> <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">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
-</span><span id="Parser-4438"><a href="#Parser-4438"><span class="linenos">4438</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
-</span><span id="Parser-4439"><a href="#Parser-4439"><span class="linenos">4439</span></a> <span class="p">)</span>
-</span><span id="Parser-4440"><a href="#Parser-4440"><span class="linenos">4440</span></a>
-</span><span id="Parser-4441"><a href="#Parser-4441"><span class="linenos">4441</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</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">L_PAREN</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="Parser-4442"><a href="#Parser-4442"><span class="linenos">4442</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">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
-</span><span id="Parser-4443"><a href="#Parser-4443"><span class="linenos">4443</span></a>
-</span><span id="Parser-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a> <span class="n">expressions</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><span id="Parser-4445"><a href="#Parser-4445"><span class="linenos">4445</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
-</span><span id="Parser-4446"><a href="#Parser-4446"><span class="linenos">4446</span></a> <span class="p">)</span>
-</span><span id="Parser-4447"><a href="#Parser-4447"><span class="linenos">4447</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="Parser-4448"><a href="#Parser-4448"><span class="linenos">4448</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">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</span></a>
-</span><span id="Parser-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</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">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="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a>
-</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4454"><a href="#Parser-4454"><span class="linenos">4454</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
-</span><span id="Parser-4455"><a href="#Parser-4455"><span class="linenos">4455</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4411"><a href="#Parser-4411"><span class="linenos">4411</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 class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</span></a>
+</span><span id="Parser-4413"><a href="#Parser-4413"><span class="linenos">4413</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4414"><a href="#Parser-4414"><span class="linenos">4414</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-4415"><a href="#Parser-4415"><span class="linenos">4415</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">SET</span><span class="p">):</span>
+</span><span id="Parser-4416"><a href="#Parser-4416"><span class="linenos">4416</span></a> <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">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
+</span><span id="Parser-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a> <span class="n">action</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</span></a>
+</span><span id="Parser-4422"><a href="#Parser-4422"><span class="linenos">4422</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="Parser-4423"><a href="#Parser-4423"><span class="linenos">4423</span></a>
+</span><span id="Parser-4424"><a href="#Parser-4424"><span class="linenos">4424</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="Parser-4425"><a href="#Parser-4425"><span class="linenos">4425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
+</span><span id="Parser-4426"><a href="#Parser-4426"><span class="linenos">4426</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-4427"><a href="#Parser-4427"><span class="linenos">4427</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
+</span><span id="Parser-4428"><a href="#Parser-4428"><span class="linenos">4428</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-4429"><a href="#Parser-4429"><span class="linenos">4429</span></a> <span class="p">)</span>
+</span><span id="Parser-4430"><a href="#Parser-4430"><span class="linenos">4430</span></a>
+</span><span id="Parser-4431"><a href="#Parser-4431"><span class="linenos">4431</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</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="Parser-4432"><a href="#Parser-4432"><span class="linenos">4432</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a>
+</span><span id="Parser-4434"><a href="#Parser-4434"><span class="linenos">4434</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_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">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
+</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-4436"><a href="#Parser-4436"><span class="linenos">4436</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4437"><a href="#Parser-4437"><span class="linenos">4437</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4438"><a href="#Parser-4438"><span class="linenos">4438</span></a>
+</span><span id="Parser-4439"><a href="#Parser-4439"><span class="linenos">4439</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-4440"><a href="#Parser-4440"><span class="linenos">4440</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="Parser-4441"><a href="#Parser-4441"><span class="linenos">4441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
+</span><span id="Parser-4442"><a href="#Parser-4442"><span class="linenos">4442</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Parser-4443"><a href="#Parser-4443"><span class="linenos">4443</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Parser-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a> <span class="p">)</span>
+</span><span id="Parser-4445"><a href="#Parser-4445"><span class="linenos">4445</span></a>
+</span><span id="Parser-4446"><a href="#Parser-4446"><span class="linenos">4446</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="Parser-4447"><a href="#Parser-4447"><span class="linenos">4447</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4448"><a href="#Parser-4448"><span class="linenos">4448</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a> <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">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
+</span><span id="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
+</span><span id="Parser-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a> <span class="p">)</span>
+</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</span></a>
+</span><span id="Parser-4454"><a href="#Parser-4454"><span class="linenos">4454</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</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">L_PAREN</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="Parser-4455"><a href="#Parser-4455"><span class="linenos">4455</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">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
</span><span id="Parser-4456"><a href="#Parser-4456"><span class="linenos">4456</span></a>
-</span><span id="Parser-4457"><a href="#Parser-4457"><span class="linenos">4457</span></a> <span class="n">bracket_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">token_type</span>
-</span><span id="Parser-4458"><a href="#Parser-4458"><span class="linenos">4458</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><span id="Parser-4459"><a href="#Parser-4459"><span class="linenos">4459</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
-</span><span id="Parser-4460"><a href="#Parser-4460"><span class="linenos">4460</span></a> <span class="p">)</span>
-</span><span id="Parser-4461"><a href="#Parser-4461"><span class="linenos">4461</span></a>
-</span><span id="Parser-4462"><a href="#Parser-4462"><span class="linenos">4462</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
-</span><span id="Parser-4463"><a href="#Parser-4463"><span class="linenos">4463</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
-</span><span id="Parser-4464"><a href="#Parser-4464"><span class="linenos">4464</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="Parser-4465"><a href="#Parser-4465"><span class="linenos">4465</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
-</span><span id="Parser-4466"><a href="#Parser-4466"><span class="linenos">4466</span></a>
-</span><span id="Parser-4467"><a href="#Parser-4467"><span class="linenos">4467</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="Parser-4468"><a href="#Parser-4468"><span class="linenos">4468</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="Parser-4469"><a href="#Parser-4469"><span class="linenos">4469</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">Struct</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="Parser-4470"><a href="#Parser-4470"><span class="linenos">4470</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
-</span><span id="Parser-4471"><a href="#Parser-4471"><span class="linenos">4471</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">Array</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="Parser-4472"><a href="#Parser-4472"><span class="linenos">4472</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4473"><a href="#Parser-4473"><span class="linenos">4473</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
-</span><span id="Parser-4474"><a href="#Parser-4474"><span class="linenos">4474</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">Bracket</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="Parser-4475"><a href="#Parser-4475"><span class="linenos">4475</span></a>
-</span><span id="Parser-4476"><a href="#Parser-4476"><span class="linenos">4476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4477"><a href="#Parser-4477"><span class="linenos">4477</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4478"><a href="#Parser-4478"><span class="linenos">4478</span></a>
-</span><span id="Parser-4479"><a href="#Parser-4479"><span class="linenos">4479</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4480"><a href="#Parser-4480"><span class="linenos">4480</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">COLON</span><span class="p">):</span>
-</span><span id="Parser-4481"><a href="#Parser-4481"><span class="linenos">4481</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">Slice</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-4482"><a href="#Parser-4482"><span class="linenos">4482</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4483"><a href="#Parser-4483"><span class="linenos">4483</span></a>
-</span><span id="Parser-4484"><a href="#Parser-4484"><span class="linenos">4484</span></a> <span class="k">def</span> <span class="nf">_parse_case</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="Parser-4485"><a href="#Parser-4485"><span class="linenos">4485</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4486"><a href="#Parser-4486"><span class="linenos">4486</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4487"><a href="#Parser-4487"><span class="linenos">4487</span></a>
-</span><span id="Parser-4488"><a href="#Parser-4488"><span class="linenos">4488</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-4489"><a href="#Parser-4489"><span class="linenos">4489</span></a> <span class="n">expression</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="Parser-4490"><a href="#Parser-4490"><span class="linenos">4490</span></a>
-</span><span id="Parser-4491"><a href="#Parser-4491"><span class="linenos">4491</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
-</span><span id="Parser-4492"><a href="#Parser-4492"><span class="linenos">4492</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="Parser-4493"><a href="#Parser-4493"><span class="linenos">4493</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">THEN</span><span class="p">)</span>
-</span><span id="Parser-4494"><a href="#Parser-4494"><span class="linenos">4494</span></a> <span class="n">then</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="Parser-4495"><a href="#Parser-4495"><span class="linenos">4495</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</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">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
+</span><span id="Parser-4457"><a href="#Parser-4457"><span class="linenos">4457</span></a> <span class="n">expressions</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><span id="Parser-4458"><a href="#Parser-4458"><span class="linenos">4458</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
+</span><span id="Parser-4459"><a href="#Parser-4459"><span class="linenos">4459</span></a> <span class="p">)</span>
+</span><span id="Parser-4460"><a href="#Parser-4460"><span class="linenos">4460</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="Parser-4461"><a href="#Parser-4461"><span class="linenos">4461</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">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="Parser-4462"><a href="#Parser-4462"><span class="linenos">4462</span></a>
+</span><span id="Parser-4463"><a href="#Parser-4463"><span class="linenos">4463</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</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">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="Parser-4464"><a href="#Parser-4464"><span class="linenos">4464</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-4465"><a href="#Parser-4465"><span class="linenos">4465</span></a>
+</span><span id="Parser-4466"><a href="#Parser-4466"><span class="linenos">4466</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4467"><a href="#Parser-4467"><span class="linenos">4467</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
+</span><span id="Parser-4468"><a href="#Parser-4468"><span class="linenos">4468</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4469"><a href="#Parser-4469"><span class="linenos">4469</span></a>
+</span><span id="Parser-4470"><a href="#Parser-4470"><span class="linenos">4470</span></a> <span class="n">bracket_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">token_type</span>
+</span><span id="Parser-4471"><a href="#Parser-4471"><span class="linenos">4471</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><span id="Parser-4472"><a href="#Parser-4472"><span class="linenos">4472</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
+</span><span id="Parser-4473"><a href="#Parser-4473"><span class="linenos">4473</span></a> <span class="p">)</span>
+</span><span id="Parser-4474"><a href="#Parser-4474"><span class="linenos">4474</span></a>
+</span><span id="Parser-4475"><a href="#Parser-4475"><span class="linenos">4475</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
+</span><span id="Parser-4476"><a href="#Parser-4476"><span class="linenos">4476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
+</span><span id="Parser-4477"><a href="#Parser-4477"><span class="linenos">4477</span></a> <span class="k">elif</span> <span class="ow">not</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">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="Parser-4478"><a href="#Parser-4478"><span class="linenos">4478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
+</span><span id="Parser-4479"><a href="#Parser-4479"><span class="linenos">4479</span></a>
+</span><span id="Parser-4480"><a href="#Parser-4480"><span class="linenos">4480</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="Parser-4481"><a href="#Parser-4481"><span class="linenos">4481</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="Parser-4482"><a href="#Parser-4482"><span class="linenos">4482</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">Struct</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="Parser-4483"><a href="#Parser-4483"><span class="linenos">4483</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
+</span><span id="Parser-4484"><a href="#Parser-4484"><span class="linenos">4484</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">Array</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="Parser-4485"><a href="#Parser-4485"><span class="linenos">4485</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4486"><a href="#Parser-4486"><span class="linenos">4486</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
+</span><span id="Parser-4487"><a href="#Parser-4487"><span class="linenos">4487</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">Bracket</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="Parser-4488"><a href="#Parser-4488"><span class="linenos">4488</span></a>
+</span><span id="Parser-4489"><a href="#Parser-4489"><span class="linenos">4489</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4490"><a href="#Parser-4490"><span class="linenos">4490</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4491"><a href="#Parser-4491"><span class="linenos">4491</span></a>
+</span><span id="Parser-4492"><a href="#Parser-4492"><span class="linenos">4492</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4493"><a href="#Parser-4493"><span class="linenos">4493</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">COLON</span><span class="p">):</span>
+</span><span id="Parser-4494"><a href="#Parser-4494"><span class="linenos">4494</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">Slice</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="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-4495"><a href="#Parser-4495"><span class="linenos">4495</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4496"><a href="#Parser-4496"><span class="linenos">4496</span></a>
-</span><span id="Parser-4497"><a href="#Parser-4497"><span class="linenos">4497</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">ELSE</span><span class="p">):</span>
-</span><span id="Parser-4498"><a href="#Parser-4498"><span class="linenos">4498</span></a> <span class="n">default</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="Parser-4499"><a href="#Parser-4499"><span class="linenos">4499</span></a>
-</span><span id="Parser-4500"><a href="#Parser-4500"><span class="linenos">4500</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
-</span><span id="Parser-4501"><a href="#Parser-4501"><span class="linenos">4501</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
-</span><span id="Parser-4502"><a href="#Parser-4502"><span class="linenos">4502</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
-</span><span id="Parser-4503"><a href="#Parser-4503"><span class="linenos">4503</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4504"><a href="#Parser-4504"><span class="linenos">4504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-4505"><a href="#Parser-4505"><span class="linenos">4505</span></a>
-</span><span id="Parser-4506"><a href="#Parser-4506"><span class="linenos">4506</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
-</span><span id="Parser-4507"><a href="#Parser-4507"><span class="linenos">4507</span></a> <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">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
-</span><span id="Parser-4508"><a href="#Parser-4508"><span class="linenos">4508</span></a> <span class="p">)</span>
+</span><span id="Parser-4497"><a href="#Parser-4497"><span class="linenos">4497</span></a> <span class="k">def</span> <span class="nf">_parse_case</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="Parser-4498"><a href="#Parser-4498"><span class="linenos">4498</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4499"><a href="#Parser-4499"><span class="linenos">4499</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4500"><a href="#Parser-4500"><span class="linenos">4500</span></a>
+</span><span id="Parser-4501"><a href="#Parser-4501"><span class="linenos">4501</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="Parser-4502"><a href="#Parser-4502"><span class="linenos">4502</span></a> <span class="n">expression</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="Parser-4503"><a href="#Parser-4503"><span class="linenos">4503</span></a>
+</span><span id="Parser-4504"><a href="#Parser-4504"><span class="linenos">4504</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
+</span><span id="Parser-4505"><a href="#Parser-4505"><span class="linenos">4505</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="Parser-4506"><a href="#Parser-4506"><span class="linenos">4506</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">THEN</span><span class="p">)</span>
+</span><span id="Parser-4507"><a href="#Parser-4507"><span class="linenos">4507</span></a> <span class="n">then</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="Parser-4508"><a href="#Parser-4508"><span class="linenos">4508</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</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">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
</span><span id="Parser-4509"><a href="#Parser-4509"><span class="linenos">4509</span></a>
-</span><span id="Parser-4510"><a href="#Parser-4510"><span class="linenos">4510</span></a> <span class="k">def</span> <span class="nf">_parse_if</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="Parser-4511"><a href="#Parser-4511"><span class="linenos">4511</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4512"><a href="#Parser-4512"><span class="linenos">4512</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
-</span><span id="Parser-4513"><a href="#Parser-4513"><span class="linenos">4513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</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 class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4514"><a href="#Parser-4514"><span class="linenos">4514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4515"><a href="#Parser-4515"><span class="linenos">4515</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4516"><a href="#Parser-4516"><span class="linenos">4516</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-4517"><a href="#Parser-4517"><span class="linenos">4517</span></a>
-</span><span id="Parser-4518"><a href="#Parser-4518"><span class="linenos">4518</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-4519"><a href="#Parser-4519"><span class="linenos">4519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-4520"><a href="#Parser-4520"><span class="linenos">4520</span></a>
-</span><span id="Parser-4521"><a href="#Parser-4521"><span class="linenos">4521</span></a> <span class="n">condition</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="Parser-4510"><a href="#Parser-4510"><span class="linenos">4510</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">ELSE</span><span class="p">):</span>
+</span><span id="Parser-4511"><a href="#Parser-4511"><span class="linenos">4511</span></a> <span class="n">default</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="Parser-4512"><a href="#Parser-4512"><span class="linenos">4512</span></a>
+</span><span id="Parser-4513"><a href="#Parser-4513"><span class="linenos">4513</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
+</span><span id="Parser-4514"><a href="#Parser-4514"><span class="linenos">4514</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
+</span><span id="Parser-4515"><a href="#Parser-4515"><span class="linenos">4515</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
+</span><span id="Parser-4516"><a href="#Parser-4516"><span class="linenos">4516</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4517"><a href="#Parser-4517"><span class="linenos">4517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-4518"><a href="#Parser-4518"><span class="linenos">4518</span></a>
+</span><span id="Parser-4519"><a href="#Parser-4519"><span class="linenos">4519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
+</span><span id="Parser-4520"><a href="#Parser-4520"><span class="linenos">4520</span></a> <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">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
+</span><span id="Parser-4521"><a href="#Parser-4521"><span class="linenos">4521</span></a> <span class="p">)</span>
</span><span id="Parser-4522"><a href="#Parser-4522"><span class="linenos">4522</span></a>
-</span><span id="Parser-4523"><a href="#Parser-4523"><span class="linenos">4523</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
-</span><span id="Parser-4524"><a href="#Parser-4524"><span class="linenos">4524</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4525"><a href="#Parser-4525"><span class="linenos">4525</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4526"><a href="#Parser-4526"><span class="linenos">4526</span></a>
-</span><span id="Parser-4527"><a href="#Parser-4527"><span class="linenos">4527</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">THEN</span><span class="p">)</span>
-</span><span id="Parser-4528"><a href="#Parser-4528"><span class="linenos">4528</span></a> <span class="n">true</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="Parser-4529"><a href="#Parser-4529"><span class="linenos">4529</span></a> <span class="n">false</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 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">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-4530"><a href="#Parser-4530"><span class="linenos">4530</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">END</span><span class="p">)</span>
-</span><span id="Parser-4531"><a href="#Parser-4531"><span class="linenos">4531</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">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
-</span><span id="Parser-4532"><a href="#Parser-4532"><span class="linenos">4532</span></a>
-</span><span id="Parser-4533"><a href="#Parser-4533"><span class="linenos">4533</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4534"><a href="#Parser-4534"><span class="linenos">4534</span></a>
-</span><span id="Parser-4535"><a href="#Parser-4535"><span class="linenos">4535</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</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="Parser-4536"><a href="#Parser-4536"><span class="linenos">4536</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;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
-</span><span id="Parser-4537"><a href="#Parser-4537"><span class="linenos">4537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4538"><a href="#Parser-4538"><span class="linenos">4538</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4523"><a href="#Parser-4523"><span class="linenos">4523</span></a> <span class="k">def</span> <span class="nf">_parse_if</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="Parser-4524"><a href="#Parser-4524"><span class="linenos">4524</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4525"><a href="#Parser-4525"><span class="linenos">4525</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4526"><a href="#Parser-4526"><span class="linenos">4526</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</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 class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4527"><a href="#Parser-4527"><span class="linenos">4527</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4528"><a href="#Parser-4528"><span class="linenos">4528</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4529"><a href="#Parser-4529"><span class="linenos">4529</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-4530"><a href="#Parser-4530"><span class="linenos">4530</span></a>
+</span><span id="Parser-4531"><a href="#Parser-4531"><span class="linenos">4531</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-4532"><a href="#Parser-4532"><span class="linenos">4532</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-4533"><a href="#Parser-4533"><span class="linenos">4533</span></a>
+</span><span id="Parser-4534"><a href="#Parser-4534"><span class="linenos">4534</span></a> <span class="n">condition</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="Parser-4535"><a href="#Parser-4535"><span class="linenos">4535</span></a>
+</span><span id="Parser-4536"><a href="#Parser-4536"><span class="linenos">4536</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="Parser-4537"><a href="#Parser-4537"><span class="linenos">4537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4538"><a href="#Parser-4538"><span class="linenos">4538</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4539"><a href="#Parser-4539"><span class="linenos">4539</span></a>
-</span><span id="Parser-4540"><a href="#Parser-4540"><span class="linenos">4540</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="Parser-4541"><a href="#Parser-4541"><span class="linenos">4541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
-</span><span id="Parser-4542"><a href="#Parser-4542"><span class="linenos">4542</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
-</span><span id="Parser-4543"><a href="#Parser-4543"><span class="linenos">4543</span></a> <span class="n">order</span><span class="o">=</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">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
-</span><span id="Parser-4544"><a href="#Parser-4544"><span class="linenos">4544</span></a> <span class="p">)</span>
+</span><span id="Parser-4540"><a href="#Parser-4540"><span class="linenos">4540</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">THEN</span><span class="p">)</span>
+</span><span id="Parser-4541"><a href="#Parser-4541"><span class="linenos">4541</span></a> <span class="n">true</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="Parser-4542"><a href="#Parser-4542"><span class="linenos">4542</span></a> <span class="n">false</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 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">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-4543"><a href="#Parser-4543"><span class="linenos">4543</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">END</span><span class="p">)</span>
+</span><span id="Parser-4544"><a href="#Parser-4544"><span class="linenos">4544</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">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
</span><span id="Parser-4545"><a href="#Parser-4545"><span class="linenos">4545</span></a>
-</span><span id="Parser-4546"><a href="#Parser-4546"><span class="linenos">4546</span></a> <span class="k">def</span> <span class="nf">_parse_extract</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">Extract</span><span class="p">:</span>
-</span><span id="Parser-4547"><a href="#Parser-4547"><span class="linenos">4547</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Parser-4548"><a href="#Parser-4548"><span class="linenos">4548</span></a>
-</span><span id="Parser-4549"><a href="#Parser-4549"><span class="linenos">4549</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">FROM</span><span class="p">):</span>
-</span><span id="Parser-4550"><a href="#Parser-4550"><span class="linenos">4550</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4551"><a href="#Parser-4551"><span class="linenos">4551</span></a>
-</span><span id="Parser-4552"><a href="#Parser-4552"><span class="linenos">4552</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</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="Parser-4553"><a href="#Parser-4553"><span class="linenos">4553</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-4554"><a href="#Parser-4554"><span class="linenos">4554</span></a>
-</span><span id="Parser-4555"><a href="#Parser-4555"><span class="linenos">4555</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4556"><a href="#Parser-4556"><span class="linenos">4556</span></a>
-</span><span id="Parser-4557"><a href="#Parser-4557"><span class="linenos">4557</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</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">AnyValue</span><span class="p">:</span>
-</span><span id="Parser-4558"><a href="#Parser-4558"><span class="linenos">4558</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="Parser-4559"><a href="#Parser-4559"><span class="linenos">4559</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4560"><a href="#Parser-4560"><span class="linenos">4560</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4546"><a href="#Parser-4546"><span class="linenos">4546</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4547"><a href="#Parser-4547"><span class="linenos">4547</span></a>
+</span><span id="Parser-4548"><a href="#Parser-4548"><span class="linenos">4548</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</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="Parser-4549"><a href="#Parser-4549"><span class="linenos">4549</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;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
+</span><span id="Parser-4550"><a href="#Parser-4550"><span class="linenos">4550</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4551"><a href="#Parser-4551"><span class="linenos">4551</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4552"><a href="#Parser-4552"><span class="linenos">4552</span></a>
+</span><span id="Parser-4553"><a href="#Parser-4553"><span class="linenos">4553</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="Parser-4554"><a href="#Parser-4554"><span class="linenos">4554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
+</span><span id="Parser-4555"><a href="#Parser-4555"><span class="linenos">4555</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
+</span><span id="Parser-4556"><a href="#Parser-4556"><span class="linenos">4556</span></a> <span class="n">order</span><span class="o">=</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">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
+</span><span id="Parser-4557"><a href="#Parser-4557"><span class="linenos">4557</span></a> <span class="p">)</span>
+</span><span id="Parser-4558"><a href="#Parser-4558"><span class="linenos">4558</span></a>
+</span><span id="Parser-4559"><a href="#Parser-4559"><span class="linenos">4559</span></a> <span class="k">def</span> <span class="nf">_parse_extract</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">Extract</span><span class="p">:</span>
+</span><span id="Parser-4560"><a href="#Parser-4560"><span class="linenos">4560</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="Parser-4561"><a href="#Parser-4561"><span class="linenos">4561</span></a>
-</span><span id="Parser-4562"><a href="#Parser-4562"><span class="linenos">4562</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">HAVING</span><span class="p">):</span>
-</span><span id="Parser-4563"><a href="#Parser-4563"><span class="linenos">4563</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
-</span><span id="Parser-4564"><a href="#Parser-4564"><span class="linenos">4564</span></a> <span class="n">is_max</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 class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="Parser-4565"><a href="#Parser-4565"><span class="linenos">4565</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-4566"><a href="#Parser-4566"><span class="linenos">4566</span></a>
-</span><span id="Parser-4567"><a href="#Parser-4567"><span class="linenos">4567</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">AnyValue</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">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
-</span><span id="Parser-4568"><a href="#Parser-4568"><span class="linenos">4568</span></a>
-</span><span id="Parser-4569"><a href="#Parser-4569"><span class="linenos">4569</span></a> <span class="k">def</span> <span class="nf">_parse_cast</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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-4570"><a href="#Parser-4570"><span class="linenos">4570</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="Parser-4571"><a href="#Parser-4571"><span class="linenos">4571</span></a>
-</span><span id="Parser-4572"><a href="#Parser-4572"><span class="linenos">4572</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
-</span><span id="Parser-4573"><a href="#Parser-4573"><span class="linenos">4573</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="Parser-4574"><a href="#Parser-4574"><span class="linenos">4574</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">CastToStrType</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="Parser-4575"><a href="#Parser-4575"><span class="linenos">4575</span></a>
-</span><span id="Parser-4576"><a href="#Parser-4576"><span class="linenos">4576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
-</span><span id="Parser-4577"><a href="#Parser-4577"><span class="linenos">4577</span></a>
-</span><span id="Parser-4578"><a href="#Parser-4578"><span class="linenos">4578</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4579"><a href="#Parser-4579"><span class="linenos">4579</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="Parser-4580"><a href="#Parser-4580"><span class="linenos">4580</span></a>
-</span><span id="Parser-4581"><a href="#Parser-4581"><span class="linenos">4581</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">FORMAT</span><span class="p">):</span>
-</span><span id="Parser-4582"><a href="#Parser-4582"><span class="linenos">4582</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4583"><a href="#Parser-4583"><span class="linenos">4583</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="Parser-4562"><a href="#Parser-4562"><span class="linenos">4562</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">FROM</span><span class="p">):</span>
+</span><span id="Parser-4563"><a href="#Parser-4563"><span class="linenos">4563</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4564"><a href="#Parser-4564"><span class="linenos">4564</span></a>
+</span><span id="Parser-4565"><a href="#Parser-4565"><span class="linenos">4565</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</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="Parser-4566"><a href="#Parser-4566"><span class="linenos">4566</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-4567"><a href="#Parser-4567"><span class="linenos">4567</span></a>
+</span><span id="Parser-4568"><a href="#Parser-4568"><span class="linenos">4568</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">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4569"><a href="#Parser-4569"><span class="linenos">4569</span></a>
+</span><span id="Parser-4570"><a href="#Parser-4570"><span class="linenos">4570</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</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">AnyValue</span><span class="p">:</span>
+</span><span id="Parser-4571"><a href="#Parser-4571"><span class="linenos">4571</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="Parser-4572"><a href="#Parser-4572"><span class="linenos">4572</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4573"><a href="#Parser-4573"><span class="linenos">4573</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4574"><a href="#Parser-4574"><span class="linenos">4574</span></a>
+</span><span id="Parser-4575"><a href="#Parser-4575"><span class="linenos">4575</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">HAVING</span><span class="p">):</span>
+</span><span id="Parser-4576"><a href="#Parser-4576"><span class="linenos">4576</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
+</span><span id="Parser-4577"><a href="#Parser-4577"><span class="linenos">4577</span></a> <span class="n">is_max</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 class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="Parser-4578"><a href="#Parser-4578"><span class="linenos">4578</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-4579"><a href="#Parser-4579"><span class="linenos">4579</span></a>
+</span><span id="Parser-4580"><a href="#Parser-4580"><span class="linenos">4580</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">AnyValue</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">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
+</span><span id="Parser-4581"><a href="#Parser-4581"><span class="linenos">4581</span></a>
+</span><span id="Parser-4582"><a href="#Parser-4582"><span class="linenos">4582</span></a> <span class="k">def</span> <span class="nf">_parse_cast</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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-4583"><a href="#Parser-4583"><span class="linenos">4583</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="Parser-4584"><a href="#Parser-4584"><span class="linenos">4584</span></a>
-</span><span id="Parser-4585"><a href="#Parser-4585"><span class="linenos">4585</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="Parser-4586"><a href="#Parser-4586"><span class="linenos">4586</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="Parser-4587"><a href="#Parser-4587"><span class="linenos">4587</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="Parser-4588"><a href="#Parser-4588"><span class="linenos">4588</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><span id="Parser-4589"><a href="#Parser-4589"><span class="linenos">4589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <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">exp</span><span 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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
-</span><span id="Parser-4590"><a href="#Parser-4590"><span class="linenos">4590</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4591"><a href="#Parser-4591"><span class="linenos">4591</span></a> <span class="nb">format</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><span id="Parser-4592"><a href="#Parser-4592"><span class="linenos">4592</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Parser-4593"><a href="#Parser-4593"><span class="linenos">4593</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Parser-4594"><a href="#Parser-4594"><span class="linenos">4594</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="Parser-4595"><a href="#Parser-4595"><span class="linenos">4595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
-</span><span id="Parser-4596"><a href="#Parser-4596"><span class="linenos">4596</span></a> <span class="p">)</span>
-</span><span id="Parser-4597"><a href="#Parser-4597"><span class="linenos">4597</span></a> <span class="p">),</span>
-</span><span id="Parser-4598"><a href="#Parser-4598"><span class="linenos">4598</span></a> <span class="p">)</span>
-</span><span id="Parser-4599"><a href="#Parser-4599"><span class="linenos">4599</span></a>
-</span><span id="Parser-4600"><a href="#Parser-4600"><span class="linenos">4600</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</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">StrToTime</span><span class="p">):</span>
-</span><span id="Parser-4601"><a href="#Parser-4601"><span class="linenos">4601</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
-</span><span id="Parser-4602"><a href="#Parser-4602"><span class="linenos">4602</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4603"><a href="#Parser-4603"><span class="linenos">4603</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="Parser-4604"><a href="#Parser-4604"><span class="linenos">4604</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
-</span><span id="Parser-4605"><a href="#Parser-4605"><span class="linenos">4605</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="Parser-4606"><a href="#Parser-4606"><span class="linenos">4606</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">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4607"><a href="#Parser-4607"><span class="linenos">4607</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
-</span><span id="Parser-4608"><a href="#Parser-4608"><span class="linenos">4608</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">CHARACTER_SET</span><span class="p">):</span>
-</span><span id="Parser-4609"><a href="#Parser-4609"><span class="linenos">4609</span></a> <span class="n">to</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">CharacterSet</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_var_or_string</span><span class="p">())</span>
-</span><span id="Parser-4610"><a href="#Parser-4610"><span class="linenos">4610</span></a>
-</span><span id="Parser-4611"><a href="#Parser-4611"><span class="linenos">4611</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="Parser-4612"><a href="#Parser-4612"><span class="linenos">4612</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 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 class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
-</span><span id="Parser-4613"><a href="#Parser-4613"><span class="linenos">4613</span></a> <span class="p">)</span>
-</span><span id="Parser-4614"><a href="#Parser-4614"><span class="linenos">4614</span></a>
-</span><span id="Parser-4615"><a href="#Parser-4615"><span class="linenos">4615</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</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="Parser-4616"><a href="#Parser-4616"><span class="linenos">4616</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">DISTINCT</span><span class="p">):</span>
-</span><span id="Parser-4617"><a href="#Parser-4617"><span class="linenos">4617</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Parser-4618"><a href="#Parser-4618"><span class="linenos">4618</span></a> <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">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
-</span><span id="Parser-4619"><a href="#Parser-4619"><span class="linenos">4619</span></a> <span class="p">]</span>
-</span><span id="Parser-4620"><a href="#Parser-4620"><span class="linenos">4620</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="Parser-4621"><a href="#Parser-4621"><span class="linenos">4621</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</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_conjunction</span><span class="p">))</span>
-</span><span id="Parser-4622"><a href="#Parser-4622"><span class="linenos">4622</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4623"><a href="#Parser-4623"><span class="linenos">4623</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-4624"><a href="#Parser-4624"><span class="linenos">4624</span></a>
-</span><span id="Parser-4625"><a href="#Parser-4625"><span class="linenos">4625</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-4626"><a href="#Parser-4626"><span class="linenos">4626</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="Parser-4627"><a href="#Parser-4627"><span class="linenos">4627</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="Parser-4628"><a href="#Parser-4628"><span class="linenos">4628</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
-</span><span id="Parser-4629"><a href="#Parser-4629"><span class="linenos">4629</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</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_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
-</span><span id="Parser-4630"><a href="#Parser-4630"><span class="linenos">4630</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</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="Parser-4631"><a href="#Parser-4631"><span class="linenos">4631</span></a>
-</span><span id="Parser-4632"><a href="#Parser-4632"><span class="linenos">4632</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
-</span><span id="Parser-4633"><a href="#Parser-4633"><span class="linenos">4633</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
-</span><span id="Parser-4634"><a href="#Parser-4634"><span class="linenos">4634</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
-</span><span id="Parser-4635"><a href="#Parser-4635"><span class="linenos">4635</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="Parser-4636"><a href="#Parser-4636"><span class="linenos">4636</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4637"><a href="#Parser-4637"><span class="linenos">4637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4638"><a href="#Parser-4638"><span class="linenos">4638</span></a>
-</span><span id="Parser-4639"><a href="#Parser-4639"><span class="linenos">4639</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
-</span><span id="Parser-4640"><a href="#Parser-4640"><span class="linenos">4640</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</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><span id="Parser-4641"><a href="#Parser-4641"><span class="linenos">4641</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</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="Parser-4642"><a href="#Parser-4642"><span class="linenos">4642</span></a>
-</span><span id="Parser-4643"><a href="#Parser-4643"><span class="linenos">4643</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
-</span><span id="Parser-4644"><a href="#Parser-4644"><span class="linenos">4644</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4645"><a href="#Parser-4645"><span class="linenos">4645</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="Parser-4646"><a href="#Parser-4646"><span class="linenos">4646</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="Parser-4647"><a href="#Parser-4647"><span class="linenos">4647</span></a>
-</span><span id="Parser-4648"><a href="#Parser-4648"><span class="linenos">4648</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">USING</span><span class="p">):</span>
-</span><span id="Parser-4649"><a href="#Parser-4649"><span class="linenos">4649</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4650"><a href="#Parser-4650"><span class="linenos">4650</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</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_var</span><span class="p">()</span>
-</span><span id="Parser-4651"><a href="#Parser-4651"><span class="linenos">4651</span></a> <span class="p">)</span>
-</span><span id="Parser-4652"><a href="#Parser-4652"><span class="linenos">4652</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">COMMA</span><span class="p">):</span>
-</span><span id="Parser-4653"><a href="#Parser-4653"><span class="linenos">4653</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="Parser-4654"><a href="#Parser-4654"><span class="linenos">4654</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4655"><a href="#Parser-4655"><span class="linenos">4655</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4656"><a href="#Parser-4656"><span class="linenos">4656</span></a>
-</span><span id="Parser-4657"><a href="#Parser-4657"><span class="linenos">4657</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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
-</span><span id="Parser-4658"><a href="#Parser-4658"><span class="linenos">4658</span></a>
-</span><span id="Parser-4659"><a href="#Parser-4659"><span class="linenos">4659</span></a> <span class="k">def</span> <span class="nf">_parse_decode</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">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
-</span><span id="Parser-4660"><a href="#Parser-4660"><span class="linenos">4660</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-4661"><a href="#Parser-4661"><span class="linenos">4661</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
-</span><span id="Parser-4662"><a href="#Parser-4662"><span class="linenos">4662</span></a>
-</span><span id="Parser-4663"><a href="#Parser-4663"><span class="linenos">4663</span></a><span class="sd"> - DECODE(bin, charset)</span>
-</span><span id="Parser-4664"><a href="#Parser-4664"><span class="linenos">4664</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
-</span><span id="Parser-4665"><a href="#Parser-4665"><span class="linenos">4665</span></a>
-</span><span id="Parser-4666"><a href="#Parser-4666"><span class="linenos">4666</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="Parser-4667"><a href="#Parser-4667"><span class="linenos">4667</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="Parser-4668"><a href="#Parser-4668"><span class="linenos">4668</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="Parser-4669"><a href="#Parser-4669"><span class="linenos">4669</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-4670"><a href="#Parser-4670"><span class="linenos">4670</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4585"><a href="#Parser-4585"><span class="linenos">4585</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="Parser-4586"><a href="#Parser-4586"><span class="linenos">4586</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="Parser-4587"><a href="#Parser-4587"><span class="linenos">4587</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">CastToStrType</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="Parser-4588"><a href="#Parser-4588"><span class="linenos">4588</span></a>
+</span><span id="Parser-4589"><a href="#Parser-4589"><span class="linenos">4589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-4590"><a href="#Parser-4590"><span class="linenos">4590</span></a>
+</span><span id="Parser-4591"><a href="#Parser-4591"><span class="linenos">4591</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4592"><a href="#Parser-4592"><span class="linenos">4592</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="Parser-4593"><a href="#Parser-4593"><span class="linenos">4593</span></a>
+</span><span id="Parser-4594"><a href="#Parser-4594"><span class="linenos">4594</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">FORMAT</span><span class="p">):</span>
+</span><span id="Parser-4595"><a href="#Parser-4595"><span class="linenos">4595</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4596"><a href="#Parser-4596"><span class="linenos">4596</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="Parser-4597"><a href="#Parser-4597"><span class="linenos">4597</span></a>
+</span><span id="Parser-4598"><a href="#Parser-4598"><span class="linenos">4598</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="Parser-4599"><a href="#Parser-4599"><span class="linenos">4599</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="Parser-4600"><a href="#Parser-4600"><span class="linenos">4600</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="Parser-4601"><a href="#Parser-4601"><span class="linenos">4601</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><span id="Parser-4602"><a href="#Parser-4602"><span class="linenos">4602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <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">exp</span><span 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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
+</span><span id="Parser-4603"><a href="#Parser-4603"><span class="linenos">4603</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4604"><a href="#Parser-4604"><span class="linenos">4604</span></a> <span class="nb">format</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><span id="Parser-4605"><a href="#Parser-4605"><span class="linenos">4605</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Parser-4606"><a href="#Parser-4606"><span class="linenos">4606</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Parser-4607"><a href="#Parser-4607"><span class="linenos">4607</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="Parser-4608"><a href="#Parser-4608"><span class="linenos">4608</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
+</span><span id="Parser-4609"><a href="#Parser-4609"><span class="linenos">4609</span></a> <span class="p">)</span>
+</span><span id="Parser-4610"><a href="#Parser-4610"><span class="linenos">4610</span></a> <span class="p">),</span>
+</span><span id="Parser-4611"><a href="#Parser-4611"><span class="linenos">4611</span></a> <span class="p">)</span>
+</span><span id="Parser-4612"><a href="#Parser-4612"><span class="linenos">4612</span></a>
+</span><span id="Parser-4613"><a href="#Parser-4613"><span class="linenos">4613</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</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">StrToTime</span><span class="p">):</span>
+</span><span id="Parser-4614"><a href="#Parser-4614"><span class="linenos">4614</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
+</span><span id="Parser-4615"><a href="#Parser-4615"><span class="linenos">4615</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4616"><a href="#Parser-4616"><span class="linenos">4616</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="Parser-4617"><a href="#Parser-4617"><span class="linenos">4617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-4618"><a href="#Parser-4618"><span class="linenos">4618</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Parser-4619"><a href="#Parser-4619"><span class="linenos">4619</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">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4620"><a href="#Parser-4620"><span class="linenos">4620</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
+</span><span id="Parser-4621"><a href="#Parser-4621"><span class="linenos">4621</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">CHARACTER_SET</span><span class="p">):</span>
+</span><span id="Parser-4622"><a href="#Parser-4622"><span class="linenos">4622</span></a> <span class="n">to</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">CharacterSet</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_var_or_string</span><span class="p">())</span>
+</span><span id="Parser-4623"><a href="#Parser-4623"><span class="linenos">4623</span></a>
+</span><span id="Parser-4624"><a href="#Parser-4624"><span class="linenos">4624</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="Parser-4625"><a href="#Parser-4625"><span class="linenos">4625</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 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 class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
+</span><span id="Parser-4626"><a href="#Parser-4626"><span class="linenos">4626</span></a> <span class="p">)</span>
+</span><span id="Parser-4627"><a href="#Parser-4627"><span class="linenos">4627</span></a>
+</span><span id="Parser-4628"><a href="#Parser-4628"><span class="linenos">4628</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</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="Parser-4629"><a href="#Parser-4629"><span class="linenos">4629</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">DISTINCT</span><span class="p">):</span>
+</span><span id="Parser-4630"><a href="#Parser-4630"><span class="linenos">4630</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Parser-4631"><a href="#Parser-4631"><span class="linenos">4631</span></a> <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">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
+</span><span id="Parser-4632"><a href="#Parser-4632"><span class="linenos">4632</span></a> <span class="p">]</span>
+</span><span id="Parser-4633"><a href="#Parser-4633"><span class="linenos">4633</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="Parser-4634"><a href="#Parser-4634"><span class="linenos">4634</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</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_conjunction</span><span class="p">))</span>
+</span><span id="Parser-4635"><a href="#Parser-4635"><span class="linenos">4635</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4636"><a href="#Parser-4636"><span class="linenos">4636</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-4637"><a href="#Parser-4637"><span class="linenos">4637</span></a>
+</span><span id="Parser-4638"><a href="#Parser-4638"><span class="linenos">4638</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-4639"><a href="#Parser-4639"><span class="linenos">4639</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="Parser-4640"><a href="#Parser-4640"><span class="linenos">4640</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="Parser-4641"><a href="#Parser-4641"><span class="linenos">4641</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
+</span><span id="Parser-4642"><a href="#Parser-4642"><span class="linenos">4642</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</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_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
+</span><span id="Parser-4643"><a href="#Parser-4643"><span class="linenos">4643</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</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="Parser-4644"><a href="#Parser-4644"><span class="linenos">4644</span></a>
+</span><span id="Parser-4645"><a href="#Parser-4645"><span class="linenos">4645</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
+</span><span id="Parser-4646"><a href="#Parser-4646"><span class="linenos">4646</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
+</span><span id="Parser-4647"><a href="#Parser-4647"><span class="linenos">4647</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
+</span><span id="Parser-4648"><a href="#Parser-4648"><span class="linenos">4648</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="Parser-4649"><a href="#Parser-4649"><span class="linenos">4649</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4650"><a href="#Parser-4650"><span class="linenos">4650</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4651"><a href="#Parser-4651"><span class="linenos">4651</span></a>
+</span><span id="Parser-4652"><a href="#Parser-4652"><span class="linenos">4652</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
+</span><span id="Parser-4653"><a href="#Parser-4653"><span class="linenos">4653</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</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><span id="Parser-4654"><a href="#Parser-4654"><span class="linenos">4654</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">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</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="Parser-4655"><a href="#Parser-4655"><span class="linenos">4655</span></a>
+</span><span id="Parser-4656"><a href="#Parser-4656"><span class="linenos">4656</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
+</span><span id="Parser-4657"><a href="#Parser-4657"><span class="linenos">4657</span></a> <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="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4658"><a href="#Parser-4658"><span class="linenos">4658</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="Parser-4659"><a href="#Parser-4659"><span class="linenos">4659</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="Parser-4660"><a href="#Parser-4660"><span class="linenos">4660</span></a>
+</span><span id="Parser-4661"><a href="#Parser-4661"><span class="linenos">4661</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">USING</span><span class="p">):</span>
+</span><span id="Parser-4662"><a href="#Parser-4662"><span class="linenos">4662</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4663"><a href="#Parser-4663"><span class="linenos">4663</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</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_var</span><span class="p">()</span>
+</span><span id="Parser-4664"><a href="#Parser-4664"><span class="linenos">4664</span></a> <span class="p">)</span>
+</span><span id="Parser-4665"><a href="#Parser-4665"><span class="linenos">4665</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">COMMA</span><span class="p">):</span>
+</span><span id="Parser-4666"><a href="#Parser-4666"><span class="linenos">4666</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="Parser-4667"><a href="#Parser-4667"><span class="linenos">4667</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4668"><a href="#Parser-4668"><span class="linenos">4668</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4669"><a href="#Parser-4669"><span class="linenos">4669</span></a>
+</span><span id="Parser-4670"><a href="#Parser-4670"><span class="linenos">4670</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 class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
</span><span id="Parser-4671"><a href="#Parser-4671"><span class="linenos">4671</span></a>
-</span><span id="Parser-4672"><a href="#Parser-4672"><span class="linenos">4672</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
-</span><span id="Parser-4673"><a href="#Parser-4673"><span class="linenos">4673</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">Decode</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">charset</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="Parser-4674"><a href="#Parser-4674"><span class="linenos">4674</span></a>
-</span><span id="Parser-4675"><a href="#Parser-4675"><span class="linenos">4675</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
-</span><span id="Parser-4676"><a href="#Parser-4676"><span class="linenos">4676</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-4677"><a href="#Parser-4677"><span class="linenos">4677</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4672"><a href="#Parser-4672"><span class="linenos">4672</span></a> <span class="k">def</span> <span class="nf">_parse_decode</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">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
+</span><span id="Parser-4673"><a href="#Parser-4673"><span class="linenos">4673</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-4674"><a href="#Parser-4674"><span class="linenos">4674</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
+</span><span id="Parser-4675"><a href="#Parser-4675"><span class="linenos">4675</span></a>
+</span><span id="Parser-4676"><a href="#Parser-4676"><span class="linenos">4676</span></a><span class="sd"> - DECODE(bin, charset)</span>
+</span><span id="Parser-4677"><a href="#Parser-4677"><span class="linenos">4677</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
</span><span id="Parser-4678"><a href="#Parser-4678"><span class="linenos">4678</span></a>
-</span><span id="Parser-4679"><a href="#Parser-4679"><span class="linenos">4679</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4680"><a href="#Parser-4680"><span class="linenos">4680</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
-</span><span id="Parser-4681"><a href="#Parser-4681"><span class="linenos">4681</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="Parser-4682"><a href="#Parser-4682"><span class="linenos">4682</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4683"><a href="#Parser-4683"><span class="linenos">4683</span></a>
-</span><span id="Parser-4684"><a href="#Parser-4684"><span class="linenos">4684</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Parser-4685"><a href="#Parser-4685"><span class="linenos">4685</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4686"><a href="#Parser-4686"><span class="linenos">4686</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="Parser-4687"><a href="#Parser-4687"><span class="linenos">4687</span></a> <span class="p">)</span>
-</span><span id="Parser-4688"><a href="#Parser-4688"><span class="linenos">4688</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
-</span><span id="Parser-4689"><a href="#Parser-4689"><span class="linenos">4689</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4690"><a href="#Parser-4690"><span class="linenos">4690</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="Parser-4691"><a href="#Parser-4691"><span class="linenos">4691</span></a> <span class="p">)</span>
-</span><span id="Parser-4692"><a href="#Parser-4692"><span class="linenos">4692</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4693"><a href="#Parser-4693"><span class="linenos">4693</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
-</span><span id="Parser-4694"><a href="#Parser-4694"><span class="linenos">4694</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
-</span><span id="Parser-4695"><a href="#Parser-4695"><span class="linenos">4695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="Parser-4696"><a href="#Parser-4696"><span class="linenos">4696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
-</span><span id="Parser-4697"><a href="#Parser-4697"><span class="linenos">4697</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
-</span><span id="Parser-4698"><a href="#Parser-4698"><span class="linenos">4698</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-4699"><a href="#Parser-4699"><span class="linenos">4699</span></a> <span class="p">),</span>
-</span><span id="Parser-4700"><a href="#Parser-4700"><span class="linenos">4700</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-4701"><a href="#Parser-4701"><span class="linenos">4701</span></a> <span class="p">)</span>
-</span><span id="Parser-4702"><a href="#Parser-4702"><span class="linenos">4702</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
-</span><span id="Parser-4703"><a href="#Parser-4703"><span class="linenos">4703</span></a>
-</span><span id="Parser-4704"><a href="#Parser-4704"><span class="linenos">4704</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-4705"><a href="#Parser-4705"><span class="linenos">4705</span></a>
-</span><span id="Parser-4706"><a href="#Parser-4706"><span class="linenos">4706</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</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">JSONKeyValue</span><span class="p">]:</span>
-</span><span id="Parser-4707"><a href="#Parser-4707"><span class="linenos">4707</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4708"><a href="#Parser-4708"><span class="linenos">4708</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-4709"><a href="#Parser-4709"><span class="linenos">4709</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-4710"><a href="#Parser-4710"><span class="linenos">4710</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4711"><a href="#Parser-4711"><span class="linenos">4711</span></a> <span class="n">value</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="Parser-4712"><a href="#Parser-4712"><span class="linenos">4712</span></a>
-</span><span id="Parser-4713"><a href="#Parser-4713"><span class="linenos">4713</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="Parser-4714"><a href="#Parser-4714"><span class="linenos">4714</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4715"><a href="#Parser-4715"><span class="linenos">4715</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">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Parser-4679"><a href="#Parser-4679"><span class="linenos">4679</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="Parser-4680"><a href="#Parser-4680"><span class="linenos">4680</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="Parser-4681"><a href="#Parser-4681"><span class="linenos">4681</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="Parser-4682"><a href="#Parser-4682"><span class="linenos">4682</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-4683"><a href="#Parser-4683"><span class="linenos">4683</span></a> <span class="n">args</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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4684"><a href="#Parser-4684"><span class="linenos">4684</span></a>
+</span><span id="Parser-4685"><a href="#Parser-4685"><span class="linenos">4685</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
+</span><span id="Parser-4686"><a href="#Parser-4686"><span class="linenos">4686</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">Decode</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">charset</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="Parser-4687"><a href="#Parser-4687"><span class="linenos">4687</span></a>
+</span><span id="Parser-4688"><a href="#Parser-4688"><span class="linenos">4688</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
+</span><span id="Parser-4689"><a href="#Parser-4689"><span class="linenos">4689</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-4690"><a href="#Parser-4690"><span class="linenos">4690</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4691"><a href="#Parser-4691"><span class="linenos">4691</span></a>
+</span><span id="Parser-4692"><a href="#Parser-4692"><span class="linenos">4692</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4693"><a href="#Parser-4693"><span class="linenos">4693</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
+</span><span id="Parser-4694"><a href="#Parser-4694"><span class="linenos">4694</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="Parser-4695"><a href="#Parser-4695"><span class="linenos">4695</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4696"><a href="#Parser-4696"><span class="linenos">4696</span></a>
+</span><span id="Parser-4697"><a href="#Parser-4697"><span class="linenos">4697</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Parser-4698"><a href="#Parser-4698"><span class="linenos">4698</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4699"><a href="#Parser-4699"><span class="linenos">4699</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="Parser-4700"><a href="#Parser-4700"><span class="linenos">4700</span></a> <span class="p">)</span>
+</span><span id="Parser-4701"><a href="#Parser-4701"><span class="linenos">4701</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
+</span><span id="Parser-4702"><a href="#Parser-4702"><span class="linenos">4702</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4703"><a href="#Parser-4703"><span class="linenos">4703</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="Parser-4704"><a href="#Parser-4704"><span class="linenos">4704</span></a> <span class="p">)</span>
+</span><span id="Parser-4705"><a href="#Parser-4705"><span class="linenos">4705</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4706"><a href="#Parser-4706"><span class="linenos">4706</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="Parser-4707"><a href="#Parser-4707"><span class="linenos">4707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
+</span><span id="Parser-4708"><a href="#Parser-4708"><span class="linenos">4708</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="Parser-4709"><a href="#Parser-4709"><span class="linenos">4709</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
+</span><span id="Parser-4710"><a href="#Parser-4710"><span class="linenos">4710</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</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">Null</span><span class="p">()),</span>
+</span><span id="Parser-4711"><a href="#Parser-4711"><span class="linenos">4711</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4712"><a href="#Parser-4712"><span class="linenos">4712</span></a> <span class="p">),</span>
+</span><span id="Parser-4713"><a href="#Parser-4713"><span class="linenos">4713</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4714"><a href="#Parser-4714"><span class="linenos">4714</span></a> <span class="p">)</span>
+</span><span id="Parser-4715"><a href="#Parser-4715"><span class="linenos">4715</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
</span><span id="Parser-4716"><a href="#Parser-4716"><span class="linenos">4716</span></a>
-</span><span id="Parser-4717"><a href="#Parser-4717"><span class="linenos">4717</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4718"><a href="#Parser-4718"><span class="linenos">4718</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
-</span><span id="Parser-4719"><a href="#Parser-4719"><span class="linenos">4719</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4720"><a href="#Parser-4720"><span class="linenos">4720</span></a>
-</span><span id="Parser-4721"><a href="#Parser-4721"><span class="linenos">4721</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">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4722"><a href="#Parser-4722"><span class="linenos">4722</span></a>
-</span><span id="Parser-4723"><a href="#Parser-4723"><span class="linenos">4723</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Parser-4724"><a href="#Parser-4724"><span class="linenos">4724</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
-</span><span id="Parser-4725"><a href="#Parser-4725"><span class="linenos">4725</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="Parser-4726"><a href="#Parser-4726"><span class="linenos">4726</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="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
-</span><span id="Parser-4727"><a href="#Parser-4727"><span class="linenos">4727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Parser-4728"><a href="#Parser-4728"><span class="linenos">4728</span></a>
-</span><span id="Parser-4729"><a href="#Parser-4729"><span class="linenos">4729</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4730"><a href="#Parser-4730"><span class="linenos">4730</span></a>
-</span><span id="Parser-4731"><a href="#Parser-4731"><span class="linenos">4731</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-4732"><a href="#Parser-4732"><span class="linenos">4732</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</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">JSONObject</span><span class="p">:</span>
-</span><span id="Parser-4733"><a href="#Parser-4733"><span class="linenos">4733</span></a> <span class="o">...</span>
-</span><span id="Parser-4734"><a href="#Parser-4734"><span class="linenos">4734</span></a>
-</span><span id="Parser-4735"><a href="#Parser-4735"><span class="linenos">4735</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-4736"><a href="#Parser-4736"><span class="linenos">4736</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
-</span><span id="Parser-4737"><a href="#Parser-4737"><span class="linenos">4737</span></a> <span class="o">...</span>
-</span><span id="Parser-4738"><a href="#Parser-4738"><span class="linenos">4738</span></a>
-</span><span id="Parser-4739"><a href="#Parser-4739"><span class="linenos">4739</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4740"><a href="#Parser-4740"><span class="linenos">4740</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="Parser-4741"><a href="#Parser-4741"><span class="linenos">4741</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4742"><a href="#Parser-4742"><span class="linenos">4742</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
-</span><span id="Parser-4743"><a href="#Parser-4743"><span class="linenos">4743</span></a> <span class="k">if</span> <span class="n">star</span>
-</span><span id="Parser-4744"><a href="#Parser-4744"><span class="linenos">4744</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
-</span><span id="Parser-4745"><a href="#Parser-4745"><span class="linenos">4745</span></a> <span class="p">)</span>
-</span><span id="Parser-4746"><a href="#Parser-4746"><span class="linenos">4746</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
+</span><span id="Parser-4717"><a href="#Parser-4717"><span class="linenos">4717</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-4718"><a href="#Parser-4718"><span class="linenos">4718</span></a>
+</span><span id="Parser-4719"><a href="#Parser-4719"><span class="linenos">4719</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</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">JSONKeyValue</span><span class="p">]:</span>
+</span><span id="Parser-4720"><a href="#Parser-4720"><span class="linenos">4720</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4721"><a href="#Parser-4721"><span class="linenos">4721</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-4722"><a href="#Parser-4722"><span class="linenos">4722</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-4723"><a href="#Parser-4723"><span class="linenos">4723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
+</span><span id="Parser-4724"><a href="#Parser-4724"><span class="linenos">4724</span></a> <span class="n">value</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="Parser-4725"><a href="#Parser-4725"><span class="linenos">4725</span></a>
+</span><span id="Parser-4726"><a href="#Parser-4726"><span class="linenos">4726</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="Parser-4727"><a href="#Parser-4727"><span class="linenos">4727</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4728"><a href="#Parser-4728"><span class="linenos">4728</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">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Parser-4729"><a href="#Parser-4729"><span class="linenos">4729</span></a>
+</span><span id="Parser-4730"><a href="#Parser-4730"><span class="linenos">4730</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="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="Parser-4731"><a href="#Parser-4731"><span class="linenos">4731</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
+</span><span id="Parser-4732"><a href="#Parser-4732"><span class="linenos">4732</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4733"><a href="#Parser-4733"><span class="linenos">4733</span></a>
+</span><span id="Parser-4734"><a href="#Parser-4734"><span class="linenos">4734</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">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4735"><a href="#Parser-4735"><span class="linenos">4735</span></a>
+</span><span id="Parser-4736"><a href="#Parser-4736"><span class="linenos">4736</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Parser-4737"><a href="#Parser-4737"><span class="linenos">4737</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
+</span><span id="Parser-4738"><a href="#Parser-4738"><span class="linenos">4738</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="Parser-4739"><a href="#Parser-4739"><span class="linenos">4739</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="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
+</span><span id="Parser-4740"><a href="#Parser-4740"><span class="linenos">4740</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Parser-4741"><a href="#Parser-4741"><span class="linenos">4741</span></a>
+</span><span id="Parser-4742"><a href="#Parser-4742"><span class="linenos">4742</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4743"><a href="#Parser-4743"><span class="linenos">4743</span></a>
+</span><span id="Parser-4744"><a href="#Parser-4744"><span class="linenos">4744</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-4745"><a href="#Parser-4745"><span class="linenos">4745</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</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">JSONObject</span><span class="p">:</span>
+</span><span id="Parser-4746"><a href="#Parser-4746"><span class="linenos">4746</span></a> <span class="o">...</span>
</span><span id="Parser-4747"><a href="#Parser-4747"><span class="linenos">4747</span></a>
-</span><span id="Parser-4748"><a href="#Parser-4748"><span class="linenos">4748</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4749"><a href="#Parser-4749"><span class="linenos">4749</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4750"><a href="#Parser-4750"><span class="linenos">4750</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-4751"><a href="#Parser-4751"><span class="linenos">4751</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4752"><a href="#Parser-4752"><span class="linenos">4752</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4753"><a href="#Parser-4753"><span class="linenos">4753</span></a>
-</span><span id="Parser-4754"><a href="#Parser-4754"><span class="linenos">4754</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
-</span><span id="Parser-4755"><a href="#Parser-4755"><span class="linenos">4755</span></a>
-</span><span id="Parser-4756"><a href="#Parser-4756"><span class="linenos">4756</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
-</span><span id="Parser-4757"><a href="#Parser-4757"><span class="linenos">4757</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-4748"><a href="#Parser-4748"><span class="linenos">4748</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-4749"><a href="#Parser-4749"><span class="linenos">4749</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
+</span><span id="Parser-4750"><a href="#Parser-4750"><span class="linenos">4750</span></a> <span class="o">...</span>
+</span><span id="Parser-4751"><a href="#Parser-4751"><span class="linenos">4751</span></a>
+</span><span id="Parser-4752"><a href="#Parser-4752"><span class="linenos">4752</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4753"><a href="#Parser-4753"><span class="linenos">4753</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-4754"><a href="#Parser-4754"><span class="linenos">4754</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-4755"><a href="#Parser-4755"><span class="linenos">4755</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
+</span><span id="Parser-4756"><a href="#Parser-4756"><span class="linenos">4756</span></a> <span class="k">if</span> <span class="n">star</span>
+</span><span id="Parser-4757"><a href="#Parser-4757"><span class="linenos">4757</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
</span><span id="Parser-4758"><a href="#Parser-4758"><span class="linenos">4758</span></a> <span class="p">)</span>
-</span><span id="Parser-4759"><a href="#Parser-4759"><span class="linenos">4759</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-4759"><a href="#Parser-4759"><span class="linenos">4759</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
</span><span id="Parser-4760"><a href="#Parser-4760"><span class="linenos">4760</span></a>
-</span><span id="Parser-4761"><a href="#Parser-4761"><span class="linenos">4761</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="Parser-4762"><a href="#Parser-4762"><span class="linenos">4762</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="Parser-4763"><a href="#Parser-4763"><span class="linenos">4763</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-4764"><a href="#Parser-4764"><span class="linenos">4764</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
-</span><span id="Parser-4765"><a href="#Parser-4765"><span class="linenos">4765</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
-</span><span id="Parser-4766"><a href="#Parser-4766"><span class="linenos">4766</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
-</span><span id="Parser-4767"><a href="#Parser-4767"><span class="linenos">4767</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="Parser-4768"><a href="#Parser-4768"><span class="linenos">4768</span></a> <span class="p">)</span>
-</span><span id="Parser-4769"><a href="#Parser-4769"><span class="linenos">4769</span></a>
-</span><span id="Parser-4770"><a href="#Parser-4770"><span class="linenos">4770</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
-</span><span id="Parser-4771"><a href="#Parser-4771"><span class="linenos">4771</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</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">JSONColumnDef</span><span class="p">:</span>
-</span><span id="Parser-4772"><a href="#Parser-4772"><span class="linenos">4772</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;NESTED&quot;</span><span class="p">):</span>
-</span><span id="Parser-4773"><a href="#Parser-4773"><span class="linenos">4773</span></a> <span class="n">this</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><span id="Parser-4774"><a href="#Parser-4774"><span class="linenos">4774</span></a> <span class="n">kind</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 class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-4775"><a href="#Parser-4775"><span class="linenos">4775</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4776"><a href="#Parser-4776"><span class="linenos">4776</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4777"><a href="#Parser-4777"><span class="linenos">4777</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4778"><a href="#Parser-4778"><span class="linenos">4778</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4779"><a href="#Parser-4779"><span class="linenos">4779</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-4780"><a href="#Parser-4780"><span class="linenos">4780</span></a>
-</span><span id="Parser-4781"><a href="#Parser-4781"><span class="linenos">4781</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4782"><a href="#Parser-4782"><span class="linenos">4782</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="Parser-4783"><a href="#Parser-4783"><span class="linenos">4783</span></a>
-</span><span id="Parser-4784"><a href="#Parser-4784"><span class="linenos">4784</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="Parser-4785"><a href="#Parser-4785"><span class="linenos">4785</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
-</span><span id="Parser-4786"><a href="#Parser-4786"><span class="linenos">4786</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4787"><a href="#Parser-4787"><span class="linenos">4787</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-4788"><a href="#Parser-4788"><span class="linenos">4788</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-4789"><a href="#Parser-4789"><span class="linenos">4789</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
-</span><span id="Parser-4790"><a href="#Parser-4790"><span class="linenos">4790</span></a> <span class="p">)</span>
-</span><span id="Parser-4791"><a href="#Parser-4791"><span class="linenos">4791</span></a>
-</span><span id="Parser-4792"><a href="#Parser-4792"><span class="linenos">4792</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</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">JSONSchema</span><span class="p">:</span>
-</span><span id="Parser-4793"><a href="#Parser-4793"><span class="linenos">4793</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
-</span><span id="Parser-4794"><a href="#Parser-4794"><span class="linenos">4794</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="Parser-4795"><a href="#Parser-4795"><span class="linenos">4795</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
-</span><span id="Parser-4796"><a href="#Parser-4796"><span class="linenos">4796</span></a> <span class="n">expressions</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_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-4797"><a href="#Parser-4797"><span class="linenos">4797</span></a> <span class="p">)</span>
-</span><span id="Parser-4798"><a href="#Parser-4798"><span class="linenos">4798</span></a>
-</span><span id="Parser-4799"><a href="#Parser-4799"><span class="linenos">4799</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
-</span><span id="Parser-4800"><a href="#Parser-4800"><span class="linenos">4800</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</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="Parser-4801"><a href="#Parser-4801"><span class="linenos">4801</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4802"><a href="#Parser-4802"><span class="linenos">4802</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4803"><a href="#Parser-4803"><span class="linenos">4803</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4804"><a href="#Parser-4804"><span class="linenos">4804</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="Parser-4805"><a href="#Parser-4805"><span class="linenos">4805</span></a>
-</span><span id="Parser-4806"><a href="#Parser-4806"><span class="linenos">4806</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
-</span><span id="Parser-4807"><a href="#Parser-4807"><span class="linenos">4807</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4808"><a href="#Parser-4808"><span class="linenos">4808</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="Parser-4809"><a href="#Parser-4809"><span class="linenos">4809</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-4810"><a href="#Parser-4810"><span class="linenos">4810</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
-</span><span id="Parser-4811"><a href="#Parser-4811"><span class="linenos">4811</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
-</span><span id="Parser-4812"><a href="#Parser-4812"><span class="linenos">4812</span></a> <span class="p">)</span>
-</span><span id="Parser-4813"><a href="#Parser-4813"><span class="linenos">4813</span></a>
-</span><span id="Parser-4814"><a href="#Parser-4814"><span class="linenos">4814</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</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">MatchAgainst</span><span class="p">:</span>
-</span><span id="Parser-4815"><a href="#Parser-4815"><span class="linenos">4815</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_column</span><span class="p">)</span>
-</span><span id="Parser-4816"><a href="#Parser-4816"><span class="linenos">4816</span></a>
-</span><span id="Parser-4817"><a href="#Parser-4817"><span class="linenos">4817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
+</span><span id="Parser-4761"><a href="#Parser-4761"><span class="linenos">4761</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4762"><a href="#Parser-4762"><span class="linenos">4762</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4763"><a href="#Parser-4763"><span class="linenos">4763</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-4764"><a href="#Parser-4764"><span class="linenos">4764</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;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4765"><a href="#Parser-4765"><span class="linenos">4765</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4766"><a href="#Parser-4766"><span class="linenos">4766</span></a>
+</span><span id="Parser-4767"><a href="#Parser-4767"><span class="linenos">4767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
+</span><span id="Parser-4768"><a href="#Parser-4768"><span class="linenos">4768</span></a>
+</span><span id="Parser-4769"><a href="#Parser-4769"><span class="linenos">4769</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
+</span><span id="Parser-4770"><a href="#Parser-4770"><span class="linenos">4770</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-4771"><a href="#Parser-4771"><span class="linenos">4771</span></a> <span class="p">)</span>
+</span><span id="Parser-4772"><a href="#Parser-4772"><span class="linenos">4772</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-4773"><a href="#Parser-4773"><span class="linenos">4773</span></a>
+</span><span id="Parser-4774"><a href="#Parser-4774"><span class="linenos">4774</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="Parser-4775"><a href="#Parser-4775"><span class="linenos">4775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="Parser-4776"><a href="#Parser-4776"><span class="linenos">4776</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-4777"><a href="#Parser-4777"><span class="linenos">4777</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
+</span><span id="Parser-4778"><a href="#Parser-4778"><span class="linenos">4778</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
+</span><span id="Parser-4779"><a href="#Parser-4779"><span class="linenos">4779</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
+</span><span id="Parser-4780"><a href="#Parser-4780"><span class="linenos">4780</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="Parser-4781"><a href="#Parser-4781"><span class="linenos">4781</span></a> <span class="p">)</span>
+</span><span id="Parser-4782"><a href="#Parser-4782"><span class="linenos">4782</span></a>
+</span><span id="Parser-4783"><a href="#Parser-4783"><span class="linenos">4783</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
+</span><span id="Parser-4784"><a href="#Parser-4784"><span class="linenos">4784</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</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">JSONColumnDef</span><span class="p">:</span>
+</span><span id="Parser-4785"><a href="#Parser-4785"><span class="linenos">4785</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;NESTED&quot;</span><span class="p">):</span>
+</span><span id="Parser-4786"><a href="#Parser-4786"><span class="linenos">4786</span></a> <span class="n">this</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><span id="Parser-4787"><a href="#Parser-4787"><span class="linenos">4787</span></a> <span class="n">kind</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 class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-4788"><a href="#Parser-4788"><span class="linenos">4788</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4789"><a href="#Parser-4789"><span class="linenos">4789</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4790"><a href="#Parser-4790"><span class="linenos">4790</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4791"><a href="#Parser-4791"><span class="linenos">4791</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4792"><a href="#Parser-4792"><span class="linenos">4792</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-4793"><a href="#Parser-4793"><span class="linenos">4793</span></a>
+</span><span id="Parser-4794"><a href="#Parser-4794"><span class="linenos">4794</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4795"><a href="#Parser-4795"><span class="linenos">4795</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
+</span><span id="Parser-4796"><a href="#Parser-4796"><span class="linenos">4796</span></a>
+</span><span id="Parser-4797"><a href="#Parser-4797"><span class="linenos">4797</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="Parser-4798"><a href="#Parser-4798"><span class="linenos">4798</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
+</span><span id="Parser-4799"><a href="#Parser-4799"><span class="linenos">4799</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4800"><a href="#Parser-4800"><span class="linenos">4800</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-4801"><a href="#Parser-4801"><span class="linenos">4801</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-4802"><a href="#Parser-4802"><span class="linenos">4802</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
+</span><span id="Parser-4803"><a href="#Parser-4803"><span class="linenos">4803</span></a> <span class="p">)</span>
+</span><span id="Parser-4804"><a href="#Parser-4804"><span class="linenos">4804</span></a>
+</span><span id="Parser-4805"><a href="#Parser-4805"><span class="linenos">4805</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</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">JSONSchema</span><span class="p">:</span>
+</span><span id="Parser-4806"><a href="#Parser-4806"><span class="linenos">4806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
+</span><span id="Parser-4807"><a href="#Parser-4807"><span class="linenos">4807</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="Parser-4808"><a href="#Parser-4808"><span class="linenos">4808</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
+</span><span id="Parser-4809"><a href="#Parser-4809"><span class="linenos">4809</span></a> <span class="n">expressions</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_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-4810"><a href="#Parser-4810"><span class="linenos">4810</span></a> <span class="p">)</span>
+</span><span id="Parser-4811"><a href="#Parser-4811"><span class="linenos">4811</span></a>
+</span><span id="Parser-4812"><a href="#Parser-4812"><span class="linenos">4812</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
+</span><span id="Parser-4813"><a href="#Parser-4813"><span class="linenos">4813</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</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="Parser-4814"><a href="#Parser-4814"><span class="linenos">4814</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4815"><a href="#Parser-4815"><span class="linenos">4815</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4816"><a href="#Parser-4816"><span class="linenos">4816</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4817"><a href="#Parser-4817"><span class="linenos">4817</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="Parser-4818"><a href="#Parser-4818"><span class="linenos">4818</span></a>
-</span><span id="Parser-4819"><a href="#Parser-4819"><span class="linenos">4819</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4820"><a href="#Parser-4820"><span class="linenos">4820</span></a>
-</span><span id="Parser-4821"><a href="#Parser-4821"><span class="linenos">4821</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4822"><a href="#Parser-4822"><span class="linenos">4822</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
-</span><span id="Parser-4823"><a href="#Parser-4823"><span class="linenos">4823</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4824"><a href="#Parser-4824"><span class="linenos">4824</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
-</span><span id="Parser-4825"><a href="#Parser-4825"><span class="linenos">4825</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4826"><a href="#Parser-4826"><span class="linenos">4826</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="Parser-4827"><a href="#Parser-4827"><span class="linenos">4827</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4828"><a href="#Parser-4828"><span class="linenos">4828</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="Parser-4829"><a href="#Parser-4829"><span class="linenos">4829</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4830"><a href="#Parser-4830"><span class="linenos">4830</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4819"><a href="#Parser-4819"><span class="linenos">4819</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
+</span><span id="Parser-4820"><a href="#Parser-4820"><span class="linenos">4820</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4821"><a href="#Parser-4821"><span class="linenos">4821</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="Parser-4822"><a href="#Parser-4822"><span class="linenos">4822</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-4823"><a href="#Parser-4823"><span class="linenos">4823</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
+</span><span id="Parser-4824"><a href="#Parser-4824"><span class="linenos">4824</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
+</span><span id="Parser-4825"><a href="#Parser-4825"><span class="linenos">4825</span></a> <span class="p">)</span>
+</span><span id="Parser-4826"><a href="#Parser-4826"><span class="linenos">4826</span></a>
+</span><span id="Parser-4827"><a href="#Parser-4827"><span class="linenos">4827</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</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">MatchAgainst</span><span class="p">:</span>
+</span><span id="Parser-4828"><a href="#Parser-4828"><span class="linenos">4828</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_column</span><span class="p">)</span>
+</span><span id="Parser-4829"><a href="#Parser-4829"><span class="linenos">4829</span></a>
+</span><span id="Parser-4830"><a href="#Parser-4830"><span class="linenos">4830</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
</span><span id="Parser-4831"><a href="#Parser-4831"><span class="linenos">4831</span></a>
-</span><span id="Parser-4832"><a href="#Parser-4832"><span class="linenos">4832</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="Parser-4833"><a href="#Parser-4833"><span class="linenos">4833</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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 class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
-</span><span id="Parser-4834"><a href="#Parser-4834"><span class="linenos">4834</span></a> <span class="p">)</span>
-</span><span id="Parser-4835"><a href="#Parser-4835"><span class="linenos">4835</span></a>
-</span><span id="Parser-4836"><a href="#Parser-4836"><span class="linenos">4836</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
-</span><span id="Parser-4837"><a href="#Parser-4837"><span class="linenos">4837</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</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">OpenJSON</span><span class="p">:</span>
-</span><span id="Parser-4838"><a href="#Parser-4838"><span class="linenos">4838</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="Parser-4839"><a href="#Parser-4839"><span class="linenos">4839</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4840"><a href="#Parser-4840"><span class="linenos">4840</span></a>
-</span><span id="Parser-4841"><a href="#Parser-4841"><span class="linenos">4841</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
-</span><span id="Parser-4842"><a href="#Parser-4842"><span class="linenos">4842</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4843"><a href="#Parser-4843"><span class="linenos">4843</span></a> <span class="n">kind</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="Parser-4844"><a href="#Parser-4844"><span class="linenos">4844</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4845"><a href="#Parser-4845"><span class="linenos">4845</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
-</span><span id="Parser-4846"><a href="#Parser-4846"><span class="linenos">4846</span></a>
-</span><span id="Parser-4847"><a href="#Parser-4847"><span class="linenos">4847</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="Parser-4848"><a href="#Parser-4848"><span class="linenos">4848</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
-</span><span id="Parser-4849"><a href="#Parser-4849"><span class="linenos">4849</span></a> <span class="p">)</span>
-</span><span id="Parser-4850"><a href="#Parser-4850"><span class="linenos">4850</span></a>
-</span><span id="Parser-4851"><a href="#Parser-4851"><span class="linenos">4851</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4852"><a href="#Parser-4852"><span class="linenos">4852</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="Parser-4853"><a href="#Parser-4853"><span class="linenos">4853</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-4854"><a href="#Parser-4854"><span class="linenos">4854</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="n">_parse_open_json_column_def</span><span class="p">)</span>
-</span><span id="Parser-4855"><a href="#Parser-4855"><span class="linenos">4855</span></a>
-</span><span id="Parser-4856"><a href="#Parser-4856"><span class="linenos">4856</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">OpenJSON</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">path</span><span class="o">=</span><span class="n">path</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="Parser-4857"><a href="#Parser-4857"><span class="linenos">4857</span></a>
-</span><span id="Parser-4858"><a href="#Parser-4858"><span class="linenos">4858</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="Parser-4859"><a href="#Parser-4859"><span class="linenos">4859</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
-</span><span id="Parser-4860"><a href="#Parser-4860"><span class="linenos">4860</span></a>
-</span><span id="Parser-4861"><a href="#Parser-4861"><span class="linenos">4861</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">IN</span><span class="p">):</span>
-</span><span id="Parser-4862"><a href="#Parser-4862"><span class="linenos">4862</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="Parser-4863"><a href="#Parser-4863"><span class="linenos">4863</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</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">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="Parser-4864"><a href="#Parser-4864"><span class="linenos">4864</span></a> <span class="p">)</span>
-</span><span id="Parser-4865"><a href="#Parser-4865"><span class="linenos">4865</span></a>
-</span><span id="Parser-4866"><a href="#Parser-4866"><span class="linenos">4866</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="Parser-4867"><a href="#Parser-4867"><span class="linenos">4867</span></a> <span class="n">haystack</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="Parser-4868"><a href="#Parser-4868"><span class="linenos">4868</span></a> <span class="n">needle</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="Parser-4869"><a href="#Parser-4869"><span class="linenos">4869</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4870"><a href="#Parser-4870"><span class="linenos">4870</span></a> <span class="n">needle</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="Parser-4871"><a href="#Parser-4871"><span class="linenos">4871</span></a> <span class="n">haystack</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="Parser-4872"><a href="#Parser-4872"><span class="linenos">4872</span></a>
-</span><span id="Parser-4873"><a href="#Parser-4873"><span class="linenos">4873</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="Parser-4874"><a href="#Parser-4874"><span class="linenos">4874</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <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="Parser-4875"><a href="#Parser-4875"><span class="linenos">4875</span></a> <span class="p">)</span>
-</span><span id="Parser-4876"><a href="#Parser-4876"><span class="linenos">4876</span></a>
-</span><span id="Parser-4877"><a href="#Parser-4877"><span class="linenos">4877</span></a> <span class="k">def</span> <span class="nf">_parse_predict</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">Predict</span><span class="p">:</span>
-</span><span id="Parser-4878"><a href="#Parser-4878"><span class="linenos">4878</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4879"><a href="#Parser-4879"><span class="linenos">4879</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-4880"><a href="#Parser-4880"><span class="linenos">4880</span></a>
-</span><span id="Parser-4881"><a href="#Parser-4881"><span class="linenos">4881</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="Parser-4882"><a href="#Parser-4882"><span class="linenos">4882</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4883"><a href="#Parser-4883"><span class="linenos">4883</span></a>
-</span><span id="Parser-4884"><a href="#Parser-4884"><span class="linenos">4884</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="Parser-4885"><a href="#Parser-4885"><span class="linenos">4885</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
-</span><span id="Parser-4886"><a href="#Parser-4886"><span class="linenos">4886</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4887"><a href="#Parser-4887"><span class="linenos">4887</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
-</span><span id="Parser-4888"><a href="#Parser-4888"><span class="linenos">4888</span></a> <span class="n">params_struct</span><span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-4889"><a href="#Parser-4889"><span class="linenos">4889</span></a> <span class="p">)</span>
-</span><span id="Parser-4890"><a href="#Parser-4890"><span class="linenos">4890</span></a>
-</span><span id="Parser-4891"><a href="#Parser-4891"><span class="linenos">4891</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
-</span><span id="Parser-4892"><a href="#Parser-4892"><span class="linenos">4892</span></a> <span class="n">args</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_table</span><span class="p">)</span>
-</span><span id="Parser-4893"><a href="#Parser-4893"><span class="linenos">4893</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4894"><a href="#Parser-4894"><span class="linenos">4894</span></a>
-</span><span id="Parser-4895"><a href="#Parser-4895"><span class="linenos">4895</span></a> <span class="k">def</span> <span class="nf">_parse_substring</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">Substring</span><span class="p">:</span>
-</span><span id="Parser-4896"><a href="#Parser-4896"><span class="linenos">4896</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="Parser-4897"><a href="#Parser-4897"><span class="linenos">4897</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="Parser-4898"><a href="#Parser-4898"><span class="linenos">4898</span></a>
-</span><span id="Parser-4899"><a href="#Parser-4899"><span class="linenos">4899</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_bitwise</span><span class="p">))</span>
-</span><span id="Parser-4900"><a href="#Parser-4900"><span class="linenos">4900</span></a>
-</span><span id="Parser-4901"><a href="#Parser-4901"><span class="linenos">4901</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">FROM</span><span class="p">):</span>
-</span><span id="Parser-4902"><a href="#Parser-4902"><span class="linenos">4902</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4903"><a href="#Parser-4903"><span class="linenos">4903</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">FOR</span><span class="p">):</span>
-</span><span id="Parser-4904"><a href="#Parser-4904"><span class="linenos">4904</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4905"><a href="#Parser-4905"><span class="linenos">4905</span></a>
-</span><span id="Parser-4906"><a href="#Parser-4906"><span class="linenos">4906</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4832"><a href="#Parser-4832"><span class="linenos">4832</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4833"><a href="#Parser-4833"><span class="linenos">4833</span></a>
+</span><span id="Parser-4834"><a href="#Parser-4834"><span class="linenos">4834</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4835"><a href="#Parser-4835"><span class="linenos">4835</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
+</span><span id="Parser-4836"><a href="#Parser-4836"><span class="linenos">4836</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4837"><a href="#Parser-4837"><span class="linenos">4837</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
+</span><span id="Parser-4838"><a href="#Parser-4838"><span class="linenos">4838</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;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4839"><a href="#Parser-4839"><span class="linenos">4839</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="Parser-4840"><a href="#Parser-4840"><span class="linenos">4840</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;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4841"><a href="#Parser-4841"><span class="linenos">4841</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="Parser-4842"><a href="#Parser-4842"><span class="linenos">4842</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4843"><a href="#Parser-4843"><span class="linenos">4843</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4844"><a href="#Parser-4844"><span class="linenos">4844</span></a>
+</span><span id="Parser-4845"><a href="#Parser-4845"><span class="linenos">4845</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="Parser-4846"><a href="#Parser-4846"><span class="linenos">4846</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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 class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
+</span><span id="Parser-4847"><a href="#Parser-4847"><span class="linenos">4847</span></a> <span class="p">)</span>
+</span><span id="Parser-4848"><a href="#Parser-4848"><span class="linenos">4848</span></a>
+</span><span id="Parser-4849"><a href="#Parser-4849"><span class="linenos">4849</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
+</span><span id="Parser-4850"><a href="#Parser-4850"><span class="linenos">4850</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</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">OpenJSON</span><span class="p">:</span>
+</span><span id="Parser-4851"><a href="#Parser-4851"><span class="linenos">4851</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="Parser-4852"><a href="#Parser-4852"><span class="linenos">4852</span></a> <span class="n">path</span> <span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4853"><a href="#Parser-4853"><span class="linenos">4853</span></a>
+</span><span id="Parser-4854"><a href="#Parser-4854"><span class="linenos">4854</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
+</span><span id="Parser-4855"><a href="#Parser-4855"><span class="linenos">4855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4856"><a href="#Parser-4856"><span class="linenos">4856</span></a> <span class="n">kind</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="Parser-4857"><a href="#Parser-4857"><span class="linenos">4857</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4858"><a href="#Parser-4858"><span class="linenos">4858</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
+</span><span id="Parser-4859"><a href="#Parser-4859"><span class="linenos">4859</span></a>
+</span><span id="Parser-4860"><a href="#Parser-4860"><span class="linenos">4860</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="Parser-4861"><a href="#Parser-4861"><span class="linenos">4861</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
+</span><span id="Parser-4862"><a href="#Parser-4862"><span class="linenos">4862</span></a> <span class="p">)</span>
+</span><span id="Parser-4863"><a href="#Parser-4863"><span class="linenos">4863</span></a>
+</span><span id="Parser-4864"><a href="#Parser-4864"><span class="linenos">4864</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4865"><a href="#Parser-4865"><span class="linenos">4865</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="Parser-4866"><a href="#Parser-4866"><span class="linenos">4866</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-4867"><a href="#Parser-4867"><span class="linenos">4867</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="n">_parse_open_json_column_def</span><span class="p">)</span>
+</span><span id="Parser-4868"><a href="#Parser-4868"><span class="linenos">4868</span></a>
+</span><span id="Parser-4869"><a href="#Parser-4869"><span class="linenos">4869</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">OpenJSON</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">path</span><span class="o">=</span><span class="n">path</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="Parser-4870"><a href="#Parser-4870"><span class="linenos">4870</span></a>
+</span><span id="Parser-4871"><a href="#Parser-4871"><span class="linenos">4871</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="Parser-4872"><a href="#Parser-4872"><span class="linenos">4872</span></a> <span class="n">args</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_bitwise</span><span class="p">)</span>
+</span><span id="Parser-4873"><a href="#Parser-4873"><span class="linenos">4873</span></a>
+</span><span id="Parser-4874"><a href="#Parser-4874"><span class="linenos">4874</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">IN</span><span class="p">):</span>
+</span><span id="Parser-4875"><a href="#Parser-4875"><span class="linenos">4875</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="Parser-4876"><a href="#Parser-4876"><span class="linenos">4876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</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">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="Parser-4877"><a href="#Parser-4877"><span class="linenos">4877</span></a> <span class="p">)</span>
+</span><span id="Parser-4878"><a href="#Parser-4878"><span class="linenos">4878</span></a>
+</span><span id="Parser-4879"><a href="#Parser-4879"><span class="linenos">4879</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="Parser-4880"><a href="#Parser-4880"><span class="linenos">4880</span></a> <span class="n">haystack</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="Parser-4881"><a href="#Parser-4881"><span class="linenos">4881</span></a> <span class="n">needle</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="Parser-4882"><a href="#Parser-4882"><span class="linenos">4882</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4883"><a href="#Parser-4883"><span class="linenos">4883</span></a> <span class="n">needle</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="Parser-4884"><a href="#Parser-4884"><span class="linenos">4884</span></a> <span class="n">haystack</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="Parser-4885"><a href="#Parser-4885"><span class="linenos">4885</span></a>
+</span><span id="Parser-4886"><a href="#Parser-4886"><span class="linenos">4886</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="Parser-4887"><a href="#Parser-4887"><span class="linenos">4887</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <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="Parser-4888"><a href="#Parser-4888"><span class="linenos">4888</span></a> <span class="p">)</span>
+</span><span id="Parser-4889"><a href="#Parser-4889"><span class="linenos">4889</span></a>
+</span><span id="Parser-4890"><a href="#Parser-4890"><span class="linenos">4890</span></a> <span class="k">def</span> <span class="nf">_parse_predict</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">Predict</span><span class="p">:</span>
+</span><span id="Parser-4891"><a href="#Parser-4891"><span class="linenos">4891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4892"><a href="#Parser-4892"><span class="linenos">4892</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-4893"><a href="#Parser-4893"><span class="linenos">4893</span></a>
+</span><span id="Parser-4894"><a href="#Parser-4894"><span class="linenos">4894</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="Parser-4895"><a href="#Parser-4895"><span class="linenos">4895</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-4896"><a href="#Parser-4896"><span class="linenos">4896</span></a>
+</span><span id="Parser-4897"><a href="#Parser-4897"><span class="linenos">4897</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="Parser-4898"><a href="#Parser-4898"><span class="linenos">4898</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
+</span><span id="Parser-4899"><a href="#Parser-4899"><span class="linenos">4899</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4900"><a href="#Parser-4900"><span class="linenos">4900</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
+</span><span id="Parser-4901"><a href="#Parser-4901"><span class="linenos">4901</span></a> <span class="n">params_struct</span><span class="o">=</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 class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-4902"><a href="#Parser-4902"><span class="linenos">4902</span></a> <span class="p">)</span>
+</span><span id="Parser-4903"><a href="#Parser-4903"><span class="linenos">4903</span></a>
+</span><span id="Parser-4904"><a href="#Parser-4904"><span class="linenos">4904</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
+</span><span id="Parser-4905"><a href="#Parser-4905"><span class="linenos">4905</span></a> <span class="n">args</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_table</span><span class="p">)</span>
+</span><span id="Parser-4906"><a href="#Parser-4906"><span class="linenos">4906</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-4907"><a href="#Parser-4907"><span class="linenos">4907</span></a>
-</span><span id="Parser-4908"><a href="#Parser-4908"><span class="linenos">4908</span></a> <span class="k">def</span> <span class="nf">_parse_trim</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">Trim</span><span class="p">:</span>
-</span><span id="Parser-4909"><a href="#Parser-4909"><span class="linenos">4909</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="Parser-4910"><a href="#Parser-4910"><span class="linenos">4910</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="Parser-4908"><a href="#Parser-4908"><span class="linenos">4908</span></a> <span class="k">def</span> <span class="nf">_parse_substring</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">Substring</span><span class="p">:</span>
+</span><span id="Parser-4909"><a href="#Parser-4909"><span class="linenos">4909</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="Parser-4910"><a href="#Parser-4910"><span class="linenos">4910</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
</span><span id="Parser-4911"><a href="#Parser-4911"><span class="linenos">4911</span></a>
-</span><span id="Parser-4912"><a href="#Parser-4912"><span class="linenos">4912</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4913"><a href="#Parser-4913"><span class="linenos">4913</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4914"><a href="#Parser-4914"><span class="linenos">4914</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4915"><a href="#Parser-4915"><span class="linenos">4915</span></a>
-</span><span id="Parser-4916"><a href="#Parser-4916"><span class="linenos">4916</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="Parser-4917"><a href="#Parser-4917"><span class="linenos">4917</span></a> <span class="n">position</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4912"><a href="#Parser-4912"><span class="linenos">4912</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="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_bitwise</span><span class="p">))</span>
+</span><span id="Parser-4913"><a href="#Parser-4913"><span class="linenos">4913</span></a>
+</span><span id="Parser-4914"><a href="#Parser-4914"><span class="linenos">4914</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">FROM</span><span class="p">):</span>
+</span><span id="Parser-4915"><a href="#Parser-4915"><span class="linenos">4915</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4916"><a href="#Parser-4916"><span class="linenos">4916</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">FOR</span><span class="p">):</span>
+</span><span id="Parser-4917"><a href="#Parser-4917"><span class="linenos">4917</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-4918"><a href="#Parser-4918"><span class="linenos">4918</span></a>
-</span><span id="Parser-4919"><a href="#Parser-4919"><span class="linenos">4919</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="Parser-4920"><a href="#Parser-4920"><span class="linenos">4920</span></a> <span class="k">if</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">COMMA</span><span class="p">)):</span>
-</span><span id="Parser-4921"><a href="#Parser-4921"><span class="linenos">4921</span></a> <span class="n">invert_order</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
-</span><span id="Parser-4922"><a href="#Parser-4922"><span class="linenos">4922</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="Parser-4923"><a href="#Parser-4923"><span class="linenos">4923</span></a>
-</span><span id="Parser-4924"><a href="#Parser-4924"><span class="linenos">4924</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
-</span><span id="Parser-4925"><a href="#Parser-4925"><span class="linenos">4925</span></a> <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">this</span>
-</span><span id="Parser-4926"><a href="#Parser-4926"><span class="linenos">4926</span></a>
-</span><span id="Parser-4927"><a href="#Parser-4927"><span class="linenos">4927</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">COLLATE</span><span class="p">):</span>
-</span><span id="Parser-4928"><a href="#Parser-4928"><span class="linenos">4928</span></a> <span class="n">collation</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="Parser-4929"><a href="#Parser-4929"><span class="linenos">4929</span></a>
-</span><span id="Parser-4930"><a href="#Parser-4930"><span class="linenos">4930</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="Parser-4931"><a href="#Parser-4931"><span class="linenos">4931</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</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">position</span><span class="o">=</span><span class="n">position</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">collation</span><span class="o">=</span><span class="n">collation</span>
-</span><span id="Parser-4932"><a href="#Parser-4932"><span class="linenos">4932</span></a> <span class="p">)</span>
-</span><span id="Parser-4933"><a href="#Parser-4933"><span class="linenos">4933</span></a>
-</span><span id="Parser-4934"><a href="#Parser-4934"><span class="linenos">4934</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</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">t</span><span class="o">.</span><span class="n">List</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="Parser-4935"><a href="#Parser-4935"><span class="linenos">4935</span></a> <span class="k">return</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">WINDOW</span><span class="p">)</span> <span class="ow">and</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_named_window</span><span class="p">)</span>
+</span><span id="Parser-4919"><a href="#Parser-4919"><span class="linenos">4919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4920"><a href="#Parser-4920"><span class="linenos">4920</span></a>
+</span><span id="Parser-4921"><a href="#Parser-4921"><span class="linenos">4921</span></a> <span class="k">def</span> <span class="nf">_parse_trim</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">Trim</span><span class="p">:</span>
+</span><span id="Parser-4922"><a href="#Parser-4922"><span class="linenos">4922</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="Parser-4923"><a href="#Parser-4923"><span class="linenos">4923</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="Parser-4924"><a href="#Parser-4924"><span class="linenos">4924</span></a>
+</span><span id="Parser-4925"><a href="#Parser-4925"><span class="linenos">4925</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4926"><a href="#Parser-4926"><span class="linenos">4926</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4927"><a href="#Parser-4927"><span class="linenos">4927</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4928"><a href="#Parser-4928"><span class="linenos">4928</span></a>
+</span><span id="Parser-4929"><a href="#Parser-4929"><span class="linenos">4929</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="Parser-4930"><a href="#Parser-4930"><span class="linenos">4930</span></a> <span class="n">position</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4931"><a href="#Parser-4931"><span class="linenos">4931</span></a>
+</span><span id="Parser-4932"><a href="#Parser-4932"><span class="linenos">4932</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="Parser-4933"><a href="#Parser-4933"><span class="linenos">4933</span></a> <span class="k">if</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">COMMA</span><span class="p">)):</span>
+</span><span id="Parser-4934"><a href="#Parser-4934"><span class="linenos">4934</span></a> <span class="n">invert_order</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
+</span><span id="Parser-4935"><a href="#Parser-4935"><span class="linenos">4935</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="Parser-4936"><a href="#Parser-4936"><span class="linenos">4936</span></a>
-</span><span id="Parser-4937"><a href="#Parser-4937"><span class="linenos">4937</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</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="Parser-4938"><a href="#Parser-4938"><span class="linenos">4938</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4937"><a href="#Parser-4937"><span class="linenos">4937</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
+</span><span id="Parser-4938"><a href="#Parser-4938"><span class="linenos">4938</span></a> <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">this</span>
</span><span id="Parser-4939"><a href="#Parser-4939"><span class="linenos">4939</span></a>
-</span><span id="Parser-4940"><a href="#Parser-4940"><span class="linenos">4940</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
-</span><span id="Parser-4941"><a href="#Parser-4941"><span class="linenos">4941</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-4942"><a href="#Parser-4942"><span class="linenos">4942</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="Parser-4943"><a href="#Parser-4943"><span class="linenos">4943</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;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-4944"><a href="#Parser-4944"><span class="linenos">4944</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">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4945"><a href="#Parser-4945"><span class="linenos">4945</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;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-4946"><a href="#Parser-4946"><span class="linenos">4946</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">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4947"><a href="#Parser-4947"><span class="linenos">4947</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4948"><a href="#Parser-4948"><span class="linenos">4948</span></a>
-</span><span id="Parser-4949"><a href="#Parser-4949"><span class="linenos">4949</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="Parser-4950"><a href="#Parser-4950"><span class="linenos">4950</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4951"><a href="#Parser-4951"><span class="linenos">4951</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="Parser-4952"><a href="#Parser-4952"><span class="linenos">4952</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4953"><a href="#Parser-4953"><span class="linenos">4953</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">WHERE</span><span class="p">)</span>
-</span><span id="Parser-4954"><a href="#Parser-4954"><span class="linenos">4954</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><span id="Parser-4955"><a href="#Parser-4955"><span class="linenos">4955</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4956"><a href="#Parser-4956"><span class="linenos">4956</span></a> <span class="p">)</span>
-</span><span id="Parser-4957"><a href="#Parser-4957"><span class="linenos">4957</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4958"><a href="#Parser-4958"><span class="linenos">4958</span></a>
-</span><span id="Parser-4959"><a href="#Parser-4959"><span class="linenos">4959</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="Parser-4960"><a href="#Parser-4960"><span class="linenos">4960</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
-</span><span id="Parser-4961"><a href="#Parser-4961"><span class="linenos">4961</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="Parser-4962"><a href="#Parser-4962"><span class="linenos">4962</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
-</span><span id="Parser-4963"><a href="#Parser-4963"><span class="linenos">4963</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">WithinGroup</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">order</span><span class="p">)</span>
-</span><span id="Parser-4964"><a href="#Parser-4964"><span class="linenos">4964</span></a>
-</span><span id="Parser-4965"><a href="#Parser-4965"><span class="linenos">4965</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="Parser-4966"><a href="#Parser-4966"><span class="linenos">4966</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="Parser-4967"><a href="#Parser-4967"><span class="linenos">4967</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
-</span><span id="Parser-4968"><a href="#Parser-4968"><span class="linenos">4968</span></a>
-</span><span id="Parser-4969"><a href="#Parser-4969"><span class="linenos">4969</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="Parser-4970"><a href="#Parser-4970"><span class="linenos">4970</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="Parser-4940"><a href="#Parser-4940"><span class="linenos">4940</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">COLLATE</span><span class="p">):</span>
+</span><span id="Parser-4941"><a href="#Parser-4941"><span class="linenos">4941</span></a> <span class="n">collation</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="Parser-4942"><a href="#Parser-4942"><span class="linenos">4942</span></a>
+</span><span id="Parser-4943"><a href="#Parser-4943"><span class="linenos">4943</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="Parser-4944"><a href="#Parser-4944"><span class="linenos">4944</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</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">position</span><span class="o">=</span><span class="n">position</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">collation</span><span class="o">=</span><span class="n">collation</span>
+</span><span id="Parser-4945"><a href="#Parser-4945"><span class="linenos">4945</span></a> <span class="p">)</span>
+</span><span id="Parser-4946"><a href="#Parser-4946"><span class="linenos">4946</span></a>
+</span><span id="Parser-4947"><a href="#Parser-4947"><span class="linenos">4947</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</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">t</span><span class="o">.</span><span class="n">List</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="Parser-4948"><a href="#Parser-4948"><span class="linenos">4948</span></a> <span class="k">return</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">WINDOW</span><span class="p">)</span> <span class="ow">and</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_named_window</span><span class="p">)</span>
+</span><span id="Parser-4949"><a href="#Parser-4949"><span class="linenos">4949</span></a>
+</span><span id="Parser-4950"><a href="#Parser-4950"><span class="linenos">4950</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</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="Parser-4951"><a href="#Parser-4951"><span class="linenos">4951</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4952"><a href="#Parser-4952"><span class="linenos">4952</span></a>
+</span><span id="Parser-4953"><a href="#Parser-4953"><span class="linenos">4953</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="Parser-4954"><a href="#Parser-4954"><span class="linenos">4954</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-4955"><a href="#Parser-4955"><span class="linenos">4955</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="Parser-4956"><a href="#Parser-4956"><span class="linenos">4956</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;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-4957"><a href="#Parser-4957"><span class="linenos">4957</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">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4958"><a href="#Parser-4958"><span class="linenos">4958</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;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-4959"><a href="#Parser-4959"><span class="linenos">4959</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">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4960"><a href="#Parser-4960"><span class="linenos">4960</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4961"><a href="#Parser-4961"><span class="linenos">4961</span></a>
+</span><span id="Parser-4962"><a href="#Parser-4962"><span class="linenos">4962</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="Parser-4963"><a href="#Parser-4963"><span class="linenos">4963</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4964"><a href="#Parser-4964"><span class="linenos">4964</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="Parser-4965"><a href="#Parser-4965"><span class="linenos">4965</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4966"><a href="#Parser-4966"><span class="linenos">4966</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">WHERE</span><span class="p">)</span>
+</span><span id="Parser-4967"><a href="#Parser-4967"><span class="linenos">4967</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><span id="Parser-4968"><a href="#Parser-4968"><span class="linenos">4968</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4969"><a href="#Parser-4969"><span class="linenos">4969</span></a> <span class="p">)</span>
+</span><span id="Parser-4970"><a href="#Parser-4970"><span class="linenos">4970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4971"><a href="#Parser-4971"><span class="linenos">4971</span></a>
-</span><span id="Parser-4972"><a href="#Parser-4972"><span class="linenos">4972</span></a> <span class="c1"># The below changes handle</span>
-</span><span id="Parser-4973"><a href="#Parser-4973"><span class="linenos">4973</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="Parser-4974"><a href="#Parser-4974"><span class="linenos">4974</span></a>
-</span><span id="Parser-4975"><a href="#Parser-4975"><span class="linenos">4975</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="Parser-4976"><a href="#Parser-4976"><span class="linenos">4976</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
-</span><span id="Parser-4977"><a href="#Parser-4977"><span class="linenos">4977</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="Parser-4978"><a href="#Parser-4978"><span class="linenos">4978</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="Parser-4979"><a href="#Parser-4979"><span class="linenos">4979</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Parser-4980"><a href="#Parser-4980"><span class="linenos">4980</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="Parser-4972"><a href="#Parser-4972"><span class="linenos">4972</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="Parser-4973"><a href="#Parser-4973"><span class="linenos">4973</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
+</span><span id="Parser-4974"><a href="#Parser-4974"><span class="linenos">4974</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;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="Parser-4975"><a href="#Parser-4975"><span class="linenos">4975</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
+</span><span id="Parser-4976"><a href="#Parser-4976"><span class="linenos">4976</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">WithinGroup</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">order</span><span class="p">)</span>
+</span><span id="Parser-4977"><a href="#Parser-4977"><span class="linenos">4977</span></a>
+</span><span id="Parser-4978"><a href="#Parser-4978"><span class="linenos">4978</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="Parser-4979"><a href="#Parser-4979"><span class="linenos">4979</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="Parser-4980"><a href="#Parser-4980"><span class="linenos">4980</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="Parser-4981"><a href="#Parser-4981"><span class="linenos">4981</span></a>
-</span><span id="Parser-4982"><a href="#Parser-4982"><span class="linenos">4982</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-4983"><a href="#Parser-4983"><span class="linenos">4983</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4984"><a href="#Parser-4984"><span class="linenos">4984</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">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4985"><a href="#Parser-4985"><span class="linenos">4985</span></a>
-</span><span id="Parser-4986"><a href="#Parser-4986"><span class="linenos">4986</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4982"><a href="#Parser-4982"><span class="linenos">4982</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="Parser-4983"><a href="#Parser-4983"><span class="linenos">4983</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="Parser-4984"><a href="#Parser-4984"><span class="linenos">4984</span></a>
+</span><span id="Parser-4985"><a href="#Parser-4985"><span class="linenos">4985</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="Parser-4986"><a href="#Parser-4986"><span class="linenos">4986</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
</span><span id="Parser-4987"><a href="#Parser-4987"><span class="linenos">4987</span></a>
-</span><span id="Parser-4988"><a href="#Parser-4988"><span class="linenos">4988</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="Parser-4989"><a href="#Parser-4989"><span class="linenos">4989</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-4990"><a href="#Parser-4990"><span class="linenos">4990</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4991"><a href="#Parser-4991"><span class="linenos">4991</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">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-4992"><a href="#Parser-4992"><span class="linenos">4992</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-4993"><a href="#Parser-4993"><span class="linenos">4993</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4994"><a href="#Parser-4994"><span class="linenos">4994</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4995"><a href="#Parser-4995"><span class="linenos">4995</span></a> <span class="n">over</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4996"><a href="#Parser-4996"><span class="linenos">4996</span></a>
-</span><span id="Parser-4997"><a href="#Parser-4997"><span class="linenos">4997</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4998"><a href="#Parser-4998"><span class="linenos">4998</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="Parser-4999"><a href="#Parser-4999"><span class="linenos">4999</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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">alias</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="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
-</span><span id="Parser-5000"><a href="#Parser-5000"><span class="linenos">5000</span></a> <span class="p">)</span>
-</span><span id="Parser-5001"><a href="#Parser-5001"><span class="linenos">5001</span></a>
-</span><span id="Parser-5002"><a href="#Parser-5002"><span class="linenos">5002</span></a> <span class="n">window_alias</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">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-5003"><a href="#Parser-5003"><span class="linenos">5003</span></a>
-</span><span id="Parser-5004"><a href="#Parser-5004"><span class="linenos">5004</span></a> <span class="n">first</span> <span class="o">=</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">FIRST</span><span class="p">)</span>
-</span><span id="Parser-5005"><a href="#Parser-5005"><span class="linenos">5005</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;LAST&quot;</span><span class="p">):</span>
-</span><span id="Parser-5006"><a href="#Parser-5006"><span class="linenos">5006</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-5007"><a href="#Parser-5007"><span class="linenos">5007</span></a>
-</span><span id="Parser-5008"><a href="#Parser-5008"><span class="linenos">5008</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
-</span><span id="Parser-5009"><a href="#Parser-5009"><span class="linenos">5009</span></a> <span class="n">kind</span> <span class="o">=</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">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</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="Parser-5010"><a href="#Parser-5010"><span class="linenos">5010</span></a>
-</span><span id="Parser-5011"><a href="#Parser-5011"><span class="linenos">5011</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-5012"><a href="#Parser-5012"><span class="linenos">5012</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">BETWEEN</span><span class="p">)</span>
-</span><span id="Parser-5013"><a href="#Parser-5013"><span class="linenos">5013</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
-</span><span id="Parser-5014"><a href="#Parser-5014"><span class="linenos">5014</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">AND</span><span class="p">)</span>
-</span><span id="Parser-5015"><a href="#Parser-5015"><span class="linenos">5015</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="Parser-4988"><a href="#Parser-4988"><span class="linenos">4988</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="Parser-4989"><a href="#Parser-4989"><span class="linenos">4989</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
+</span><span id="Parser-4990"><a href="#Parser-4990"><span class="linenos">4990</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="Parser-4991"><a href="#Parser-4991"><span class="linenos">4991</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="Parser-4992"><a href="#Parser-4992"><span class="linenos">4992</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Parser-4993"><a href="#Parser-4993"><span class="linenos">4993</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="Parser-4994"><a href="#Parser-4994"><span class="linenos">4994</span></a>
+</span><span id="Parser-4995"><a href="#Parser-4995"><span class="linenos">4995</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-4996"><a href="#Parser-4996"><span class="linenos">4996</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4997"><a href="#Parser-4997"><span class="linenos">4997</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">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4998"><a href="#Parser-4998"><span class="linenos">4998</span></a>
+</span><span id="Parser-4999"><a href="#Parser-4999"><span class="linenos">4999</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-5000"><a href="#Parser-5000"><span class="linenos">5000</span></a>
+</span><span id="Parser-5001"><a href="#Parser-5001"><span class="linenos">5001</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="Parser-5002"><a href="#Parser-5002"><span class="linenos">5002</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-5003"><a href="#Parser-5003"><span class="linenos">5003</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5004"><a href="#Parser-5004"><span class="linenos">5004</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">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-5005"><a href="#Parser-5005"><span class="linenos">5005</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5006"><a href="#Parser-5006"><span class="linenos">5006</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5007"><a href="#Parser-5007"><span class="linenos">5007</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5008"><a href="#Parser-5008"><span class="linenos">5008</span></a> <span class="n">over</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-5009"><a href="#Parser-5009"><span class="linenos">5009</span></a>
+</span><span id="Parser-5010"><a href="#Parser-5010"><span class="linenos">5010</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-5011"><a href="#Parser-5011"><span class="linenos">5011</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="Parser-5012"><a href="#Parser-5012"><span class="linenos">5012</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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">alias</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="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
+</span><span id="Parser-5013"><a href="#Parser-5013"><span class="linenos">5013</span></a> <span class="p">)</span>
+</span><span id="Parser-5014"><a href="#Parser-5014"><span class="linenos">5014</span></a>
+</span><span id="Parser-5015"><a href="#Parser-5015"><span class="linenos">5015</span></a> <span class="n">window_alias</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">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="Parser-5016"><a href="#Parser-5016"><span class="linenos">5016</span></a>
-</span><span id="Parser-5017"><a href="#Parser-5017"><span class="linenos">5017</span></a> <span class="n">spec</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="Parser-5018"><a href="#Parser-5018"><span class="linenos">5018</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="Parser-5019"><a href="#Parser-5019"><span class="linenos">5019</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-5020"><a href="#Parser-5020"><span class="linenos">5020</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="Parser-5021"><a href="#Parser-5021"><span class="linenos">5021</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="Parser-5022"><a href="#Parser-5022"><span class="linenos">5022</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="Parser-5023"><a href="#Parser-5023"><span class="linenos">5023</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="Parser-5024"><a href="#Parser-5024"><span class="linenos">5024</span></a> <span class="p">)</span>
-</span><span id="Parser-5025"><a href="#Parser-5025"><span class="linenos">5025</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5026"><a href="#Parser-5026"><span class="linenos">5026</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5027"><a href="#Parser-5027"><span class="linenos">5027</span></a>
-</span><span id="Parser-5028"><a href="#Parser-5028"><span class="linenos">5028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5017"><a href="#Parser-5017"><span class="linenos">5017</span></a> <span class="n">first</span> <span class="o">=</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">FIRST</span><span class="p">)</span>
+</span><span id="Parser-5018"><a href="#Parser-5018"><span class="linenos">5018</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;LAST&quot;</span><span class="p">):</span>
+</span><span id="Parser-5019"><a href="#Parser-5019"><span class="linenos">5019</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-5020"><a href="#Parser-5020"><span class="linenos">5020</span></a>
+</span><span id="Parser-5021"><a href="#Parser-5021"><span class="linenos">5021</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
+</span><span id="Parser-5022"><a href="#Parser-5022"><span class="linenos">5022</span></a> <span class="n">kind</span> <span class="o">=</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">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</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="Parser-5023"><a href="#Parser-5023"><span class="linenos">5023</span></a>
+</span><span id="Parser-5024"><a href="#Parser-5024"><span class="linenos">5024</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-5025"><a href="#Parser-5025"><span class="linenos">5025</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">BETWEEN</span><span class="p">)</span>
+</span><span id="Parser-5026"><a href="#Parser-5026"><span class="linenos">5026</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="Parser-5027"><a href="#Parser-5027"><span class="linenos">5027</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">AND</span><span class="p">)</span>
+</span><span id="Parser-5028"><a href="#Parser-5028"><span class="linenos">5028</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="Parser-5029"><a href="#Parser-5029"><span class="linenos">5029</span></a>
-</span><span id="Parser-5030"><a href="#Parser-5030"><span class="linenos">5030</span></a> <span class="n">window</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="Parser-5031"><a href="#Parser-5031"><span class="linenos">5031</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="Parser-5032"><a href="#Parser-5032"><span class="linenos">5032</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5033"><a href="#Parser-5033"><span class="linenos">5033</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="Parser-5034"><a href="#Parser-5034"><span class="linenos">5034</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-5035"><a href="#Parser-5035"><span class="linenos">5035</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="Parser-5036"><a href="#Parser-5036"><span class="linenos">5036</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
-</span><span id="Parser-5037"><a href="#Parser-5037"><span class="linenos">5037</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
-</span><span id="Parser-5038"><a href="#Parser-5038"><span class="linenos">5038</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
-</span><span id="Parser-5039"><a href="#Parser-5039"><span class="linenos">5039</span></a> <span class="p">)</span>
+</span><span id="Parser-5030"><a href="#Parser-5030"><span class="linenos">5030</span></a> <span class="n">spec</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="Parser-5031"><a href="#Parser-5031"><span class="linenos">5031</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="Parser-5032"><a href="#Parser-5032"><span class="linenos">5032</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-5033"><a href="#Parser-5033"><span class="linenos">5033</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="Parser-5034"><a href="#Parser-5034"><span class="linenos">5034</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="Parser-5035"><a href="#Parser-5035"><span class="linenos">5035</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="Parser-5036"><a href="#Parser-5036"><span class="linenos">5036</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="Parser-5037"><a href="#Parser-5037"><span class="linenos">5037</span></a> <span class="p">)</span>
+</span><span id="Parser-5038"><a href="#Parser-5038"><span class="linenos">5038</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5039"><a href="#Parser-5039"><span class="linenos">5039</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5040"><a href="#Parser-5040"><span class="linenos">5040</span></a>
-</span><span id="Parser-5041"><a href="#Parser-5041"><span class="linenos">5041</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
-</span><span id="Parser-5042"><a href="#Parser-5042"><span class="linenos">5042</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</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="Parser-5043"><a href="#Parser-5043"><span class="linenos">5043</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-5044"><a href="#Parser-5044"><span class="linenos">5044</span></a>
-</span><span id="Parser-5045"><a href="#Parser-5045"><span class="linenos">5045</span></a> <span class="k">return</span> <span class="n">window</span>
-</span><span id="Parser-5046"><a href="#Parser-5046"><span class="linenos">5046</span></a>
-</span><span id="Parser-5047"><a href="#Parser-5047"><span class="linenos">5047</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
-</span><span id="Parser-5048"><a href="#Parser-5048"><span class="linenos">5048</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-5049"><a href="#Parser-5049"><span class="linenos">5049</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">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="Parser-5050"><a href="#Parser-5050"><span class="linenos">5050</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="Parser-5051"><a href="#Parser-5051"><span class="linenos">5051</span></a>
-</span><span id="Parser-5052"><a href="#Parser-5052"><span class="linenos">5052</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</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">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-5053"><a href="#Parser-5053"><span class="linenos">5053</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">BETWEEN</span><span class="p">)</span>
-</span><span id="Parser-5054"><a href="#Parser-5054"><span class="linenos">5054</span></a>
-</span><span id="Parser-5055"><a href="#Parser-5055"><span class="linenos">5055</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="Parser-5056"><a href="#Parser-5056"><span class="linenos">5056</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="Parser-5057"><a href="#Parser-5057"><span class="linenos">5057</span></a> <span class="p">(</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;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
-</span><span id="Parser-5058"><a href="#Parser-5058"><span class="linenos">5058</span></a> <span class="ow">or</span> <span class="p">(</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;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
-</span><span id="Parser-5059"><a href="#Parser-5059"><span class="linenos">5059</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-5060"><a href="#Parser-5060"><span class="linenos">5060</span></a> <span class="p">),</span>
-</span><span id="Parser-5061"><a href="#Parser-5061"><span class="linenos">5061</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span>
-</span><span id="Parser-5062"><a href="#Parser-5062"><span class="linenos">5062</span></a> <span class="p">}</span>
-</span><span id="Parser-5063"><a href="#Parser-5063"><span class="linenos">5063</span></a>
-</span><span id="Parser-5064"><a href="#Parser-5064"><span class="linenos">5064</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
-</span><span id="Parser-5065"><a href="#Parser-5065"><span class="linenos">5065</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-5066"><a href="#Parser-5066"><span class="linenos">5066</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="Parser-5067"><a href="#Parser-5067"><span class="linenos">5067</span></a> <span class="n">any_token</span> <span class="o">=</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><span id="Parser-5068"><a href="#Parser-5068"><span class="linenos">5068</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-5069"><a href="#Parser-5069"><span class="linenos">5069</span></a>
-</span><span id="Parser-5070"><a href="#Parser-5070"><span class="linenos">5070</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
-</span><span id="Parser-5071"><a href="#Parser-5071"><span class="linenos">5071</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5072"><a href="#Parser-5072"><span class="linenos">5072</span></a>
-</span><span id="Parser-5073"><a href="#Parser-5073"><span class="linenos">5073</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-5074"><a href="#Parser-5074"><span class="linenos">5074</span></a> <span class="n">aliases</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="Parser-5075"><a href="#Parser-5075"><span class="linenos">5075</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="Parser-5076"><a href="#Parser-5076"><span class="linenos">5076</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-5077"><a href="#Parser-5077"><span class="linenos">5077</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5078"><a href="#Parser-5078"><span class="linenos">5078</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="k">lambda</span><span class="p">:</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="p">)),</span>
-</span><span id="Parser-5079"><a href="#Parser-5079"><span class="linenos">5079</span></a> <span class="p">)</span>
-</span><span id="Parser-5080"><a href="#Parser-5080"><span class="linenos">5080</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
-</span><span id="Parser-5081"><a href="#Parser-5081"><span class="linenos">5081</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="Parser-5041"><a href="#Parser-5041"><span class="linenos">5041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5042"><a href="#Parser-5042"><span class="linenos">5042</span></a>
+</span><span id="Parser-5043"><a href="#Parser-5043"><span class="linenos">5043</span></a> <span class="n">window</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="Parser-5044"><a href="#Parser-5044"><span class="linenos">5044</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="Parser-5045"><a href="#Parser-5045"><span class="linenos">5045</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5046"><a href="#Parser-5046"><span class="linenos">5046</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="Parser-5047"><a href="#Parser-5047"><span class="linenos">5047</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-5048"><a href="#Parser-5048"><span class="linenos">5048</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="Parser-5049"><a href="#Parser-5049"><span class="linenos">5049</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
+</span><span id="Parser-5050"><a href="#Parser-5050"><span class="linenos">5050</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="Parser-5051"><a href="#Parser-5051"><span class="linenos">5051</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="Parser-5052"><a href="#Parser-5052"><span class="linenos">5052</span></a> <span class="p">)</span>
+</span><span id="Parser-5053"><a href="#Parser-5053"><span class="linenos">5053</span></a>
+</span><span id="Parser-5054"><a href="#Parser-5054"><span class="linenos">5054</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
+</span><span id="Parser-5055"><a href="#Parser-5055"><span class="linenos">5055</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</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="Parser-5056"><a href="#Parser-5056"><span class="linenos">5056</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-5057"><a href="#Parser-5057"><span class="linenos">5057</span></a>
+</span><span id="Parser-5058"><a href="#Parser-5058"><span class="linenos">5058</span></a> <span class="k">return</span> <span class="n">window</span>
+</span><span id="Parser-5059"><a href="#Parser-5059"><span class="linenos">5059</span></a>
+</span><span id="Parser-5060"><a href="#Parser-5060"><span class="linenos">5060</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="Parser-5061"><a href="#Parser-5061"><span class="linenos">5061</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-5062"><a href="#Parser-5062"><span class="linenos">5062</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">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="Parser-5063"><a href="#Parser-5063"><span class="linenos">5063</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="Parser-5064"><a href="#Parser-5064"><span class="linenos">5064</span></a>
+</span><span id="Parser-5065"><a href="#Parser-5065"><span class="linenos">5065</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</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">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-5066"><a href="#Parser-5066"><span class="linenos">5066</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">BETWEEN</span><span class="p">)</span>
+</span><span id="Parser-5067"><a href="#Parser-5067"><span class="linenos">5067</span></a>
+</span><span id="Parser-5068"><a href="#Parser-5068"><span class="linenos">5068</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="Parser-5069"><a href="#Parser-5069"><span class="linenos">5069</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Parser-5070"><a href="#Parser-5070"><span class="linenos">5070</span></a> <span class="p">(</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;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
+</span><span id="Parser-5071"><a href="#Parser-5071"><span class="linenos">5071</span></a> <span class="ow">or</span> <span class="p">(</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;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
+</span><span id="Parser-5072"><a href="#Parser-5072"><span class="linenos">5072</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-5073"><a href="#Parser-5073"><span class="linenos">5073</span></a> <span class="p">),</span>
+</span><span id="Parser-5074"><a href="#Parser-5074"><span class="linenos">5074</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span>
+</span><span id="Parser-5075"><a href="#Parser-5075"><span class="linenos">5075</span></a> <span class="p">}</span>
+</span><span id="Parser-5076"><a href="#Parser-5076"><span class="linenos">5076</span></a>
+</span><span id="Parser-5077"><a href="#Parser-5077"><span class="linenos">5077</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="Parser-5078"><a href="#Parser-5078"><span class="linenos">5078</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-5079"><a href="#Parser-5079"><span class="linenos">5079</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="Parser-5080"><a href="#Parser-5080"><span class="linenos">5080</span></a> <span class="n">any_token</span> <span class="o">=</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><span id="Parser-5081"><a href="#Parser-5081"><span class="linenos">5081</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-5082"><a href="#Parser-5082"><span class="linenos">5082</span></a>
-</span><span id="Parser-5083"><a href="#Parser-5083"><span class="linenos">5083</span></a> <span class="n">alias</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="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="Parser-5084"><a href="#Parser-5084"><span class="linenos">5084</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="Parser-5085"><a href="#Parser-5085"><span class="linenos">5085</span></a> <span class="p">)</span>
-</span><span id="Parser-5086"><a href="#Parser-5086"><span class="linenos">5086</span></a>
-</span><span id="Parser-5087"><a href="#Parser-5087"><span class="linenos">5087</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-5088"><a href="#Parser-5088"><span class="linenos">5088</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">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-5089"><a href="#Parser-5089"><span class="linenos">5089</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-5090"><a href="#Parser-5090"><span class="linenos">5090</span></a>
-</span><span id="Parser-5091"><a href="#Parser-5091"><span class="linenos">5091</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
-</span><span id="Parser-5092"><a href="#Parser-5092"><span class="linenos">5092</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
-</span><span id="Parser-5093"><a href="#Parser-5093"><span class="linenos">5093</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Parser-5094"><a href="#Parser-5094"><span class="linenos">5094</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5083"><a href="#Parser-5083"><span class="linenos">5083</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
+</span><span id="Parser-5084"><a href="#Parser-5084"><span class="linenos">5084</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5085"><a href="#Parser-5085"><span class="linenos">5085</span></a>
+</span><span id="Parser-5086"><a href="#Parser-5086"><span class="linenos">5086</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-5087"><a href="#Parser-5087"><span class="linenos">5087</span></a> <span class="n">aliases</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="Parser-5088"><a href="#Parser-5088"><span class="linenos">5088</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="Parser-5089"><a href="#Parser-5089"><span class="linenos">5089</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-5090"><a href="#Parser-5090"><span class="linenos">5090</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5091"><a href="#Parser-5091"><span class="linenos">5091</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="k">lambda</span><span class="p">:</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="p">)),</span>
+</span><span id="Parser-5092"><a href="#Parser-5092"><span class="linenos">5092</span></a> <span class="p">)</span>
+</span><span id="Parser-5093"><a href="#Parser-5093"><span class="linenos">5093</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
+</span><span id="Parser-5094"><a href="#Parser-5094"><span class="linenos">5094</span></a> <span class="k">return</span> <span class="n">aliases</span>
</span><span id="Parser-5095"><a href="#Parser-5095"><span class="linenos">5095</span></a>
-</span><span id="Parser-5096"><a href="#Parser-5096"><span class="linenos">5096</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5097"><a href="#Parser-5097"><span class="linenos">5097</span></a>
-</span><span id="Parser-5098"><a href="#Parser-5098"><span class="linenos">5098</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-5099"><a href="#Parser-5099"><span class="linenos">5099</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-5100"><a href="#Parser-5100"><span class="linenos">5100</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-5101"><a href="#Parser-5101"><span class="linenos">5101</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-5102"><a href="#Parser-5102"><span class="linenos">5102</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="Parser-5103"><a href="#Parser-5103"><span class="linenos">5103</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
-</span><span id="Parser-5104"><a href="#Parser-5104"><span class="linenos">5104</span></a>
-</span><span id="Parser-5105"><a href="#Parser-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="Parser-5106"><a href="#Parser-5106"><span class="linenos">5106</span></a> <span class="k">return</span> <span class="n">identifier</span>
-</span><span id="Parser-5107"><a href="#Parser-5107"><span class="linenos">5107</span></a>
-</span><span id="Parser-5108"><a href="#Parser-5108"><span class="linenos">5108</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5109"><a href="#Parser-5109"><span class="linenos">5109</span></a> <span class="n">quoted</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
-</span><span id="Parser-5110"><a href="#Parser-5110"><span class="linenos">5110</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
-</span><span id="Parser-5111"><a href="#Parser-5111"><span class="linenos">5111</span></a>
-</span><span id="Parser-5112"><a href="#Parser-5112"><span class="linenos">5112</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5113"><a href="#Parser-5113"><span class="linenos">5113</span></a>
-</span><span id="Parser-5114"><a href="#Parser-5114"><span class="linenos">5114</span></a> <span class="k">def</span> <span class="nf">_parse_string</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="Parser-5115"><a href="#Parser-5115"><span class="linenos">5115</span></a> <span class="k">if</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
-</span><span id="Parser-5116"><a href="#Parser-5116"><span class="linenos">5116</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5117"><a href="#Parser-5117"><span class="linenos">5117</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5118"><a href="#Parser-5118"><span class="linenos">5118</span></a>
-</span><span id="Parser-5119"><a href="#Parser-5119"><span class="linenos">5119</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</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">Identifier</span><span class="p">]:</span>
-</span><span id="Parser-5120"><a href="#Parser-5120"><span class="linenos">5120</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5121"><a href="#Parser-5121"><span class="linenos">5121</span></a>
-</span><span id="Parser-5122"><a href="#Parser-5122"><span class="linenos">5122</span></a> <span class="k">def</span> <span class="nf">_parse_number</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="Parser-5123"><a href="#Parser-5123"><span class="linenos">5123</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">NUMBER</span><span class="p">):</span>
-</span><span id="Parser-5124"><a href="#Parser-5124"><span class="linenos">5124</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5125"><a href="#Parser-5125"><span class="linenos">5125</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5096"><a href="#Parser-5096"><span class="linenos">5096</span></a> <span class="n">alias</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="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="Parser-5097"><a href="#Parser-5097"><span class="linenos">5097</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="Parser-5098"><a href="#Parser-5098"><span class="linenos">5098</span></a> <span class="p">)</span>
+</span><span id="Parser-5099"><a href="#Parser-5099"><span class="linenos">5099</span></a>
+</span><span id="Parser-5100"><a href="#Parser-5100"><span class="linenos">5100</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-5101"><a href="#Parser-5101"><span class="linenos">5101</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">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-5102"><a href="#Parser-5102"><span class="linenos">5102</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-5103"><a href="#Parser-5103"><span class="linenos">5103</span></a>
+</span><span id="Parser-5104"><a href="#Parser-5104"><span class="linenos">5104</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
+</span><span id="Parser-5105"><a href="#Parser-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
+</span><span id="Parser-5106"><a href="#Parser-5106"><span class="linenos">5106</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Parser-5107"><a href="#Parser-5107"><span class="linenos">5107</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5108"><a href="#Parser-5108"><span class="linenos">5108</span></a>
+</span><span id="Parser-5109"><a href="#Parser-5109"><span class="linenos">5109</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5110"><a href="#Parser-5110"><span class="linenos">5110</span></a>
+</span><span id="Parser-5111"><a href="#Parser-5111"><span class="linenos">5111</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-5112"><a href="#Parser-5112"><span class="linenos">5112</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-5113"><a href="#Parser-5113"><span class="linenos">5113</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-5114"><a href="#Parser-5114"><span class="linenos">5114</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-5115"><a href="#Parser-5115"><span class="linenos">5115</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="Parser-5116"><a href="#Parser-5116"><span class="linenos">5116</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
+</span><span id="Parser-5117"><a href="#Parser-5117"><span class="linenos">5117</span></a>
+</span><span id="Parser-5118"><a href="#Parser-5118"><span class="linenos">5118</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="Parser-5119"><a href="#Parser-5119"><span class="linenos">5119</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="Parser-5120"><a href="#Parser-5120"><span class="linenos">5120</span></a>
+</span><span id="Parser-5121"><a href="#Parser-5121"><span class="linenos">5121</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5122"><a href="#Parser-5122"><span class="linenos">5122</span></a> <span class="n">quoted</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="Parser-5123"><a href="#Parser-5123"><span class="linenos">5123</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
+</span><span id="Parser-5124"><a href="#Parser-5124"><span class="linenos">5124</span></a>
+</span><span id="Parser-5125"><a href="#Parser-5125"><span class="linenos">5125</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5126"><a href="#Parser-5126"><span class="linenos">5126</span></a>
-</span><span id="Parser-5127"><a href="#Parser-5127"><span class="linenos">5127</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</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="Parser-5128"><a href="#Parser-5128"><span class="linenos">5128</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">IDENTIFIER</span><span class="p">):</span>
-</span><span id="Parser-5129"><a href="#Parser-5129"><span class="linenos">5129</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">Identifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5127"><a href="#Parser-5127"><span class="linenos">5127</span></a> <span class="k">def</span> <span class="nf">_parse_string</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="Parser-5128"><a href="#Parser-5128"><span class="linenos">5128</span></a> <span class="k">if</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
+</span><span id="Parser-5129"><a href="#Parser-5129"><span class="linenos">5129</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-5130"><a href="#Parser-5130"><span class="linenos">5130</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-5131"><a href="#Parser-5131"><span class="linenos">5131</span></a>
-</span><span id="Parser-5132"><a href="#Parser-5132"><span class="linenos">5132</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
-</span><span id="Parser-5133"><a href="#Parser-5133"><span class="linenos">5133</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-5134"><a href="#Parser-5134"><span class="linenos">5134</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-5135"><a href="#Parser-5135"><span class="linenos">5135</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-5136"><a href="#Parser-5136"><span class="linenos">5136</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-5137"><a href="#Parser-5137"><span class="linenos">5137</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="Parser-5138"><a href="#Parser-5138"><span class="linenos">5138</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-5139"><a href="#Parser-5139"><span class="linenos">5139</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
-</span><span id="Parser-5140"><a href="#Parser-5140"><span class="linenos">5140</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">VAR</span><span class="p">)</span>
-</span><span id="Parser-5141"><a href="#Parser-5141"><span class="linenos">5141</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-5142"><a href="#Parser-5142"><span class="linenos">5142</span></a> <span class="p">):</span>
-</span><span id="Parser-5143"><a href="#Parser-5143"><span class="linenos">5143</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="Parser-5144"><a href="#Parser-5144"><span class="linenos">5144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</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="Parser-5145"><a href="#Parser-5145"><span class="linenos">5145</span></a> <span class="p">)</span>
-</span><span id="Parser-5146"><a href="#Parser-5146"><span class="linenos">5146</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5147"><a href="#Parser-5147"><span class="linenos">5147</span></a>
-</span><span id="Parser-5148"><a href="#Parser-5148"><span class="linenos">5148</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Parser-5149"><a href="#Parser-5149"><span class="linenos">5149</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5150"><a href="#Parser-5150"><span class="linenos">5150</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5151"><a href="#Parser-5151"><span class="linenos">5151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="Parser-5152"><a href="#Parser-5152"><span class="linenos">5152</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5153"><a href="#Parser-5153"><span class="linenos">5153</span></a>
-</span><span id="Parser-5154"><a href="#Parser-5154"><span class="linenos">5154</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</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="Parser-5155"><a href="#Parser-5155"><span class="linenos">5155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-5156"><a href="#Parser-5156"><span class="linenos">5156</span></a>
-</span><span id="Parser-5157"><a href="#Parser-5157"><span class="linenos">5157</span></a> <span class="k">def</span> <span class="nf">_parse_null</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="Parser-5158"><a href="#Parser-5158"><span class="linenos">5158</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5159"><a href="#Parser-5159"><span class="linenos">5159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5160"><a href="#Parser-5160"><span class="linenos">5160</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5161"><a href="#Parser-5161"><span class="linenos">5161</span></a>
-</span><span id="Parser-5162"><a href="#Parser-5162"><span class="linenos">5162</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</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="Parser-5163"><a href="#Parser-5163"><span class="linenos">5163</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">TRUE</span><span class="p">):</span>
-</span><span id="Parser-5164"><a href="#Parser-5164"><span class="linenos">5164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5165"><a href="#Parser-5165"><span class="linenos">5165</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">FALSE</span><span class="p">):</span>
-</span><span id="Parser-5166"><a href="#Parser-5166"><span class="linenos">5166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5167"><a href="#Parser-5167"><span class="linenos">5167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5168"><a href="#Parser-5168"><span class="linenos">5168</span></a>
-</span><span id="Parser-5169"><a href="#Parser-5169"><span class="linenos">5169</span></a> <span class="k">def</span> <span class="nf">_parse_star</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="Parser-5170"><a href="#Parser-5170"><span class="linenos">5170</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">STAR</span><span class="p">):</span>
-</span><span id="Parser-5171"><a href="#Parser-5171"><span class="linenos">5171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5172"><a href="#Parser-5172"><span class="linenos">5172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5173"><a href="#Parser-5173"><span class="linenos">5173</span></a>
-</span><span id="Parser-5174"><a href="#Parser-5174"><span class="linenos">5174</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</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">Parameter</span><span class="p">:</span>
-</span><span id="Parser-5175"><a href="#Parser-5175"><span class="linenos">5175</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</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="Parser-5176"><a href="#Parser-5176"><span class="linenos">5176</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-5177"><a href="#Parser-5177"><span class="linenos">5177</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5178"><a href="#Parser-5178"><span class="linenos">5178</span></a> <span class="p">)</span>
-</span><span id="Parser-5179"><a href="#Parser-5179"><span class="linenos">5179</span></a>
-</span><span id="Parser-5180"><a href="#Parser-5180"><span class="linenos">5180</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">L_BRACE</span><span class="p">)</span>
-</span><span id="Parser-5181"><a href="#Parser-5181"><span class="linenos">5181</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="Parser-5182"><a href="#Parser-5182"><span class="linenos">5182</span></a> <span class="n">expression</span> <span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="Parser-5183"><a href="#Parser-5183"><span class="linenos">5183</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">R_BRACE</span><span class="p">)</span>
-</span><span id="Parser-5184"><a href="#Parser-5184"><span class="linenos">5184</span></a>
-</span><span id="Parser-5185"><a href="#Parser-5185"><span class="linenos">5185</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">Parameter</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><span id="Parser-5132"><a href="#Parser-5132"><span class="linenos">5132</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</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">Identifier</span><span class="p">]:</span>
+</span><span id="Parser-5133"><a href="#Parser-5133"><span class="linenos">5133</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</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 class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5134"><a href="#Parser-5134"><span class="linenos">5134</span></a>
+</span><span id="Parser-5135"><a href="#Parser-5135"><span class="linenos">5135</span></a> <span class="k">def</span> <span class="nf">_parse_number</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="Parser-5136"><a href="#Parser-5136"><span class="linenos">5136</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">NUMBER</span><span class="p">):</span>
+</span><span id="Parser-5137"><a href="#Parser-5137"><span class="linenos">5137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5138"><a href="#Parser-5138"><span class="linenos">5138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5139"><a href="#Parser-5139"><span class="linenos">5139</span></a>
+</span><span id="Parser-5140"><a href="#Parser-5140"><span class="linenos">5140</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</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="Parser-5141"><a href="#Parser-5141"><span class="linenos">5141</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">IDENTIFIER</span><span class="p">):</span>
+</span><span id="Parser-5142"><a href="#Parser-5142"><span class="linenos">5142</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">Identifier</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5143"><a href="#Parser-5143"><span class="linenos">5143</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5144"><a href="#Parser-5144"><span class="linenos">5144</span></a>
+</span><span id="Parser-5145"><a href="#Parser-5145"><span class="linenos">5145</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="Parser-5146"><a href="#Parser-5146"><span class="linenos">5146</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-5147"><a href="#Parser-5147"><span class="linenos">5147</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-5148"><a href="#Parser-5148"><span class="linenos">5148</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-5149"><a href="#Parser-5149"><span class="linenos">5149</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-5150"><a href="#Parser-5150"><span class="linenos">5150</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="Parser-5151"><a href="#Parser-5151"><span class="linenos">5151</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-5152"><a href="#Parser-5152"><span class="linenos">5152</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
+</span><span id="Parser-5153"><a href="#Parser-5153"><span class="linenos">5153</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">VAR</span><span class="p">)</span>
+</span><span id="Parser-5154"><a href="#Parser-5154"><span class="linenos">5154</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-5155"><a href="#Parser-5155"><span class="linenos">5155</span></a> <span class="p">):</span>
+</span><span id="Parser-5156"><a href="#Parser-5156"><span class="linenos">5156</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="Parser-5157"><a href="#Parser-5157"><span class="linenos">5157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</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="Parser-5158"><a href="#Parser-5158"><span class="linenos">5158</span></a> <span class="p">)</span>
+</span><span id="Parser-5159"><a href="#Parser-5159"><span class="linenos">5159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5160"><a href="#Parser-5160"><span class="linenos">5160</span></a>
+</span><span id="Parser-5161"><a href="#Parser-5161"><span class="linenos">5161</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Parser-5162"><a href="#Parser-5162"><span class="linenos">5162</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5163"><a href="#Parser-5163"><span class="linenos">5163</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5164"><a href="#Parser-5164"><span class="linenos">5164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="Parser-5165"><a href="#Parser-5165"><span class="linenos">5165</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5166"><a href="#Parser-5166"><span class="linenos">5166</span></a>
+</span><span id="Parser-5167"><a href="#Parser-5167"><span class="linenos">5167</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</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="Parser-5168"><a href="#Parser-5168"><span class="linenos">5168</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-5169"><a href="#Parser-5169"><span class="linenos">5169</span></a>
+</span><span id="Parser-5170"><a href="#Parser-5170"><span class="linenos">5170</span></a> <span class="k">def</span> <span class="nf">_parse_null</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="Parser-5171"><a href="#Parser-5171"><span class="linenos">5171</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5172"><a href="#Parser-5172"><span class="linenos">5172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5173"><a href="#Parser-5173"><span class="linenos">5173</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5174"><a href="#Parser-5174"><span class="linenos">5174</span></a>
+</span><span id="Parser-5175"><a href="#Parser-5175"><span class="linenos">5175</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</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="Parser-5176"><a href="#Parser-5176"><span class="linenos">5176</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">TRUE</span><span class="p">):</span>
+</span><span id="Parser-5177"><a href="#Parser-5177"><span class="linenos">5177</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5178"><a href="#Parser-5178"><span class="linenos">5178</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">FALSE</span><span class="p">):</span>
+</span><span id="Parser-5179"><a href="#Parser-5179"><span class="linenos">5179</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5180"><a href="#Parser-5180"><span class="linenos">5180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5181"><a href="#Parser-5181"><span class="linenos">5181</span></a>
+</span><span id="Parser-5182"><a href="#Parser-5182"><span class="linenos">5182</span></a> <span class="k">def</span> <span class="nf">_parse_star</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="Parser-5183"><a href="#Parser-5183"><span class="linenos">5183</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">STAR</span><span class="p">):</span>
+</span><span id="Parser-5184"><a href="#Parser-5184"><span class="linenos">5184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5185"><a href="#Parser-5185"><span class="linenos">5185</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-5186"><a href="#Parser-5186"><span class="linenos">5186</span></a>
-</span><span id="Parser-5187"><a href="#Parser-5187"><span class="linenos">5187</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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="Parser-5188"><a href="#Parser-5188"><span class="linenos">5188</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-5189"><a href="#Parser-5189"><span class="linenos">5189</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-5190"><a href="#Parser-5190"><span class="linenos">5190</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
-</span><span id="Parser-5191"><a href="#Parser-5191"><span class="linenos">5191</span></a> <span class="k">return</span> <span class="n">placeholder</span>
-</span><span id="Parser-5192"><a href="#Parser-5192"><span class="linenos">5192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-5193"><a href="#Parser-5193"><span class="linenos">5193</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5194"><a href="#Parser-5194"><span class="linenos">5194</span></a>
-</span><span id="Parser-5195"><a href="#Parser-5195"><span class="linenos">5195</span></a> <span class="k">def</span> <span class="nf">_parse_except</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">t</span><span class="o">.</span><span class="n">List</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="Parser-5196"><a href="#Parser-5196"><span class="linenos">5196</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
-</span><span id="Parser-5197"><a href="#Parser-5197"><span class="linenos">5197</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5198"><a href="#Parser-5198"><span class="linenos">5198</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">L_PAREN</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="Parser-5199"><a href="#Parser-5199"><span class="linenos">5199</span></a> <span class="k">return</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_column</span><span class="p">)</span>
-</span><span id="Parser-5200"><a href="#Parser-5200"><span class="linenos">5200</span></a>
-</span><span id="Parser-5201"><a href="#Parser-5201"><span class="linenos">5201</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5202"><a href="#Parser-5202"><span class="linenos">5202</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5203"><a href="#Parser-5203"><span class="linenos">5203</span></a>
-</span><span id="Parser-5204"><a href="#Parser-5204"><span class="linenos">5204</span></a> <span class="k">def</span> <span class="nf">_parse_replace</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">t</span><span class="o">.</span><span class="n">List</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="Parser-5205"><a href="#Parser-5205"><span class="linenos">5205</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
-</span><span id="Parser-5206"><a href="#Parser-5206"><span class="linenos">5206</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5207"><a href="#Parser-5207"><span class="linenos">5207</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">L_PAREN</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="Parser-5208"><a href="#Parser-5208"><span class="linenos">5208</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
-</span><span id="Parser-5209"><a href="#Parser-5209"><span class="linenos">5209</span></a>
-</span><span id="Parser-5210"><a href="#Parser-5210"><span class="linenos">5210</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
-</span><span id="Parser-5211"><a href="#Parser-5211"><span class="linenos">5211</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5212"><a href="#Parser-5212"><span class="linenos">5212</span></a>
-</span><span id="Parser-5213"><a href="#Parser-5213"><span class="linenos">5213</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-5214"><a href="#Parser-5214"><span class="linenos">5214</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
-</span><span id="Parser-5215"><a href="#Parser-5215"><span class="linenos">5215</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Parser-5216"><a href="#Parser-5216"><span class="linenos">5216</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-5217"><a href="#Parser-5217"><span class="linenos">5217</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Parser-5218"><a href="#Parser-5218"><span class="linenos">5218</span></a>
-</span><span id="Parser-5219"><a href="#Parser-5219"><span class="linenos">5219</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
-</span><span id="Parser-5220"><a href="#Parser-5220"><span class="linenos">5220</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="Parser-5221"><a href="#Parser-5221"><span class="linenos">5221</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-5222"><a href="#Parser-5222"><span class="linenos">5222</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5223"><a href="#Parser-5223"><span class="linenos">5223</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="Parser-5224"><a href="#Parser-5224"><span class="linenos">5224</span></a>
-</span><span id="Parser-5225"><a href="#Parser-5225"><span class="linenos">5225</span></a> <span class="k">return</span> <span class="n">items</span>
-</span><span id="Parser-5226"><a href="#Parser-5226"><span class="linenos">5226</span></a>
-</span><span id="Parser-5227"><a href="#Parser-5227"><span class="linenos">5227</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
-</span><span id="Parser-5228"><a href="#Parser-5228"><span class="linenos">5228</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="Parser-5229"><a href="#Parser-5229"><span class="linenos">5229</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="Parser-5230"><a href="#Parser-5230"><span class="linenos">5230</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5187"><a href="#Parser-5187"><span class="linenos">5187</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</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">Parameter</span><span class="p">:</span>
+</span><span id="Parser-5188"><a href="#Parser-5188"><span class="linenos">5188</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</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="Parser-5189"><a href="#Parser-5189"><span class="linenos">5189</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-5190"><a href="#Parser-5190"><span class="linenos">5190</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5191"><a href="#Parser-5191"><span class="linenos">5191</span></a> <span class="p">)</span>
+</span><span id="Parser-5192"><a href="#Parser-5192"><span class="linenos">5192</span></a>
+</span><span id="Parser-5193"><a href="#Parser-5193"><span class="linenos">5193</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">L_BRACE</span><span class="p">)</span>
+</span><span id="Parser-5194"><a href="#Parser-5194"><span class="linenos">5194</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="Parser-5195"><a href="#Parser-5195"><span class="linenos">5195</span></a> <span class="n">expression</span> <span class="o">=</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">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="Parser-5196"><a href="#Parser-5196"><span class="linenos">5196</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">R_BRACE</span><span class="p">)</span>
+</span><span id="Parser-5197"><a href="#Parser-5197"><span class="linenos">5197</span></a>
+</span><span id="Parser-5198"><a href="#Parser-5198"><span class="linenos">5198</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">Parameter</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><span id="Parser-5199"><a href="#Parser-5199"><span class="linenos">5199</span></a>
+</span><span id="Parser-5200"><a href="#Parser-5200"><span class="linenos">5200</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</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="Parser-5201"><a href="#Parser-5201"><span class="linenos">5201</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-5202"><a href="#Parser-5202"><span class="linenos">5202</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-5203"><a href="#Parser-5203"><span class="linenos">5203</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="Parser-5204"><a href="#Parser-5204"><span class="linenos">5204</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="Parser-5205"><a href="#Parser-5205"><span class="linenos">5205</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-5206"><a href="#Parser-5206"><span class="linenos">5206</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5207"><a href="#Parser-5207"><span class="linenos">5207</span></a>
+</span><span id="Parser-5208"><a href="#Parser-5208"><span class="linenos">5208</span></a> <span class="k">def</span> <span class="nf">_parse_except</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">t</span><span class="o">.</span><span class="n">List</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="Parser-5209"><a href="#Parser-5209"><span class="linenos">5209</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
+</span><span id="Parser-5210"><a href="#Parser-5210"><span class="linenos">5210</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5211"><a href="#Parser-5211"><span class="linenos">5211</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">L_PAREN</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="Parser-5212"><a href="#Parser-5212"><span class="linenos">5212</span></a> <span class="k">return</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_column</span><span class="p">)</span>
+</span><span id="Parser-5213"><a href="#Parser-5213"><span class="linenos">5213</span></a>
+</span><span id="Parser-5214"><a href="#Parser-5214"><span class="linenos">5214</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5215"><a href="#Parser-5215"><span class="linenos">5215</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5216"><a href="#Parser-5216"><span class="linenos">5216</span></a>
+</span><span id="Parser-5217"><a href="#Parser-5217"><span class="linenos">5217</span></a> <span class="k">def</span> <span class="nf">_parse_replace</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">t</span><span class="o">.</span><span class="n">List</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="Parser-5218"><a href="#Parser-5218"><span class="linenos">5218</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
+</span><span id="Parser-5219"><a href="#Parser-5219"><span class="linenos">5219</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5220"><a href="#Parser-5220"><span class="linenos">5220</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">L_PAREN</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="Parser-5221"><a href="#Parser-5221"><span class="linenos">5221</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
+</span><span id="Parser-5222"><a href="#Parser-5222"><span class="linenos">5222</span></a>
+</span><span id="Parser-5223"><a href="#Parser-5223"><span class="linenos">5223</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
+</span><span id="Parser-5224"><a href="#Parser-5224"><span class="linenos">5224</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5225"><a href="#Parser-5225"><span class="linenos">5225</span></a>
+</span><span id="Parser-5226"><a href="#Parser-5226"><span class="linenos">5226</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-5227"><a href="#Parser-5227"><span class="linenos">5227</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
+</span><span id="Parser-5228"><a href="#Parser-5228"><span class="linenos">5228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Parser-5229"><a href="#Parser-5229"><span class="linenos">5229</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5230"><a href="#Parser-5230"><span class="linenos">5230</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="Parser-5231"><a href="#Parser-5231"><span class="linenos">5231</span></a>
-</span><span id="Parser-5232"><a href="#Parser-5232"><span class="linenos">5232</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Parser-5233"><a href="#Parser-5233"><span class="linenos">5233</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><span id="Parser-5234"><a href="#Parser-5234"><span class="linenos">5234</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="Parser-5235"><a href="#Parser-5235"><span class="linenos">5235</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5236"><a href="#Parser-5236"><span class="linenos">5236</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="Parser-5237"><a href="#Parser-5237"><span class="linenos">5237</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="Parser-5238"><a href="#Parser-5238"><span class="linenos">5238</span></a> <span class="p">)</span>
+</span><span id="Parser-5232"><a href="#Parser-5232"><span class="linenos">5232</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
+</span><span id="Parser-5233"><a href="#Parser-5233"><span class="linenos">5233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="Parser-5234"><a href="#Parser-5234"><span class="linenos">5234</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5235"><a href="#Parser-5235"><span class="linenos">5235</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5236"><a href="#Parser-5236"><span class="linenos">5236</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="Parser-5237"><a href="#Parser-5237"><span class="linenos">5237</span></a>
+</span><span id="Parser-5238"><a href="#Parser-5238"><span class="linenos">5238</span></a> <span class="k">return</span> <span class="n">items</span>
</span><span id="Parser-5239"><a href="#Parser-5239"><span class="linenos">5239</span></a>
-</span><span id="Parser-5240"><a href="#Parser-5240"><span class="linenos">5240</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5241"><a href="#Parser-5241"><span class="linenos">5241</span></a>
-</span><span id="Parser-5242"><a href="#Parser-5242"><span class="linenos">5242</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</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="Parser-5243"><a href="#Parser-5243"><span class="linenos">5243</span></a> <span class="k">return</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_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="Parser-5240"><a href="#Parser-5240"><span class="linenos">5240</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
+</span><span id="Parser-5241"><a href="#Parser-5241"><span class="linenos">5241</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="Parser-5242"><a href="#Parser-5242"><span class="linenos">5242</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="Parser-5243"><a href="#Parser-5243"><span class="linenos">5243</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-5244"><a href="#Parser-5244"><span class="linenos">5244</span></a>
-</span><span id="Parser-5245"><a href="#Parser-5245"><span class="linenos">5245</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="Parser-5246"><a href="#Parser-5246"><span class="linenos">5246</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-5247"><a href="#Parser-5247"><span class="linenos">5247</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Parser-5248"><a href="#Parser-5248"><span class="linenos">5248</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
-</span><span id="Parser-5249"><a href="#Parser-5249"><span class="linenos">5249</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
-</span><span id="Parser-5250"><a href="#Parser-5250"><span class="linenos">5250</span></a> <span class="p">)</span>
-</span><span id="Parser-5251"><a href="#Parser-5251"><span class="linenos">5251</span></a>
-</span><span id="Parser-5252"><a href="#Parser-5252"><span class="linenos">5252</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
-</span><span id="Parser-5253"><a href="#Parser-5253"><span class="linenos">5253</span></a> <span class="n">wrapped</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
-</span><span id="Parser-5254"><a href="#Parser-5254"><span class="linenos">5254</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
-</span><span id="Parser-5255"><a href="#Parser-5255"><span class="linenos">5255</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;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="Parser-5256"><a href="#Parser-5256"><span class="linenos">5256</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-5257"><a href="#Parser-5257"><span class="linenos">5257</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
-</span><span id="Parser-5258"><a href="#Parser-5258"><span class="linenos">5258</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-5259"><a href="#Parser-5259"><span class="linenos">5259</span></a> <span class="k">return</span> <span class="n">parse_result</span>
-</span><span id="Parser-5260"><a href="#Parser-5260"><span class="linenos">5260</span></a>
-</span><span id="Parser-5261"><a href="#Parser-5261"><span class="linenos">5261</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</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">List</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="Parser-5262"><a href="#Parser-5262"><span class="linenos">5262</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
-</span><span id="Parser-5263"><a href="#Parser-5263"><span class="linenos">5263</span></a>
-</span><span id="Parser-5264"><a href="#Parser-5264"><span class="linenos">5264</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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="Parser-5265"><a href="#Parser-5265"><span class="linenos">5265</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="Parser-5266"><a href="#Parser-5266"><span class="linenos">5266</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-5267"><a href="#Parser-5267"><span class="linenos">5267</span></a> <span class="p">)</span>
-</span><span id="Parser-5268"><a href="#Parser-5268"><span class="linenos">5268</span></a>
-</span><span id="Parser-5269"><a href="#Parser-5269"><span class="linenos">5269</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</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="Parser-5270"><a href="#Parser-5270"><span class="linenos">5270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="Parser-5271"><a href="#Parser-5271"><span class="linenos">5271</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Parser-5272"><a href="#Parser-5272"><span class="linenos">5272</span></a> <span class="p">)</span>
+</span><span id="Parser-5245"><a href="#Parser-5245"><span class="linenos">5245</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Parser-5246"><a href="#Parser-5246"><span class="linenos">5246</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><span id="Parser-5247"><a href="#Parser-5247"><span class="linenos">5247</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="Parser-5248"><a href="#Parser-5248"><span class="linenos">5248</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5249"><a href="#Parser-5249"><span class="linenos">5249</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="Parser-5250"><a href="#Parser-5250"><span class="linenos">5250</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="Parser-5251"><a href="#Parser-5251"><span class="linenos">5251</span></a> <span class="p">)</span>
+</span><span id="Parser-5252"><a href="#Parser-5252"><span class="linenos">5252</span></a>
+</span><span id="Parser-5253"><a href="#Parser-5253"><span class="linenos">5253</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5254"><a href="#Parser-5254"><span class="linenos">5254</span></a>
+</span><span id="Parser-5255"><a href="#Parser-5255"><span class="linenos">5255</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">List</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="Parser-5256"><a href="#Parser-5256"><span class="linenos">5256</span></a> <span class="k">return</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_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="Parser-5257"><a href="#Parser-5257"><span class="linenos">5257</span></a>
+</span><span id="Parser-5258"><a href="#Parser-5258"><span class="linenos">5258</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="Parser-5259"><a href="#Parser-5259"><span class="linenos">5259</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-5260"><a href="#Parser-5260"><span class="linenos">5260</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</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="Parser-5261"><a href="#Parser-5261"><span class="linenos">5261</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
+</span><span id="Parser-5262"><a href="#Parser-5262"><span class="linenos">5262</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
+</span><span id="Parser-5263"><a href="#Parser-5263"><span class="linenos">5263</span></a> <span class="p">)</span>
+</span><span id="Parser-5264"><a href="#Parser-5264"><span class="linenos">5264</span></a>
+</span><span id="Parser-5265"><a href="#Parser-5265"><span class="linenos">5265</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
+</span><span id="Parser-5266"><a href="#Parser-5266"><span class="linenos">5266</span></a> <span class="n">wrapped</span> <span class="o">=</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">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-5267"><a href="#Parser-5267"><span class="linenos">5267</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
+</span><span id="Parser-5268"><a href="#Parser-5268"><span class="linenos">5268</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;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="Parser-5269"><a href="#Parser-5269"><span class="linenos">5269</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5270"><a href="#Parser-5270"><span class="linenos">5270</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
+</span><span id="Parser-5271"><a href="#Parser-5271"><span class="linenos">5271</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5272"><a href="#Parser-5272"><span class="linenos">5272</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="Parser-5273"><a href="#Parser-5273"><span class="linenos">5273</span></a>
-</span><span id="Parser-5274"><a href="#Parser-5274"><span class="linenos">5274</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</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">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5275"><a href="#Parser-5275"><span class="linenos">5275</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5276"><a href="#Parser-5276"><span class="linenos">5276</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
-</span><span id="Parser-5277"><a href="#Parser-5277"><span class="linenos">5277</span></a> <span class="n">this</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="Parser-5278"><a href="#Parser-5278"><span class="linenos">5278</span></a>
-</span><span id="Parser-5279"><a href="#Parser-5279"><span class="linenos">5279</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="Parser-5280"><a href="#Parser-5280"><span class="linenos">5280</span></a>
-</span><span id="Parser-5281"><a href="#Parser-5281"><span class="linenos">5281</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5282"><a href="#Parser-5282"><span class="linenos">5282</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-5283"><a href="#Parser-5283"><span class="linenos">5283</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5284"><a href="#Parser-5284"><span class="linenos">5284</span></a> <span class="k">while</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">VAR</span><span class="p">):</span>
-</span><span id="Parser-5285"><a href="#Parser-5285"><span class="linenos">5285</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5274"><a href="#Parser-5274"><span class="linenos">5274</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</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">List</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="Parser-5275"><a href="#Parser-5275"><span class="linenos">5275</span></a> <span class="k">return</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_expression</span><span class="p">)</span>
+</span><span id="Parser-5276"><a href="#Parser-5276"><span class="linenos">5276</span></a>
+</span><span id="Parser-5277"><a href="#Parser-5277"><span class="linenos">5277</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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="Parser-5278"><a href="#Parser-5278"><span class="linenos">5278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="Parser-5279"><a href="#Parser-5279"><span class="linenos">5279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-5280"><a href="#Parser-5280"><span class="linenos">5280</span></a> <span class="p">)</span>
+</span><span id="Parser-5281"><a href="#Parser-5281"><span class="linenos">5281</span></a>
+</span><span id="Parser-5282"><a href="#Parser-5282"><span class="linenos">5282</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</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="Parser-5283"><a href="#Parser-5283"><span class="linenos">5283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="Parser-5284"><a href="#Parser-5284"><span class="linenos">5284</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Parser-5285"><a href="#Parser-5285"><span class="linenos">5285</span></a> <span class="p">)</span>
</span><span id="Parser-5286"><a href="#Parser-5286"><span class="linenos">5286</span></a>
-</span><span id="Parser-5287"><a href="#Parser-5287"><span class="linenos">5287</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="Parser-5288"><a href="#Parser-5288"><span class="linenos">5288</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
-</span><span id="Parser-5289"><a href="#Parser-5289"><span class="linenos">5289</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</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="Parser-5290"><a href="#Parser-5290"><span class="linenos">5290</span></a> <span class="k">break</span>
+</span><span id="Parser-5287"><a href="#Parser-5287"><span class="linenos">5287</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</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">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5288"><a href="#Parser-5288"><span class="linenos">5288</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5289"><a href="#Parser-5289"><span class="linenos">5289</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
+</span><span id="Parser-5290"><a href="#Parser-5290"><span class="linenos">5290</span></a> <span class="n">this</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="Parser-5291"><a href="#Parser-5291"><span class="linenos">5291</span></a>
-</span><span id="Parser-5292"><a href="#Parser-5292"><span class="linenos">5292</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">Transaction</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">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="Parser-5292"><a href="#Parser-5292"><span class="linenos">5292</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="Parser-5293"><a href="#Parser-5293"><span class="linenos">5293</span></a>
-</span><span id="Parser-5294"><a href="#Parser-5294"><span class="linenos">5294</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</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">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="Parser-5295"><a href="#Parser-5295"><span class="linenos">5295</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5296"><a href="#Parser-5296"><span class="linenos">5296</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5297"><a href="#Parser-5297"><span class="linenos">5297</span></a> <span class="n">is_rollback</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
-</span><span id="Parser-5298"><a href="#Parser-5298"><span class="linenos">5298</span></a>
-</span><span id="Parser-5299"><a href="#Parser-5299"><span class="linenos">5299</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="Parser-5300"><a href="#Parser-5300"><span class="linenos">5300</span></a>
-</span><span id="Parser-5301"><a href="#Parser-5301"><span class="linenos">5301</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;TO&quot;</span><span class="p">):</span>
-</span><span id="Parser-5302"><a href="#Parser-5302"><span class="linenos">5302</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
-</span><span id="Parser-5303"><a href="#Parser-5303"><span class="linenos">5303</span></a> <span class="n">savepoint</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><span id="Parser-5294"><a href="#Parser-5294"><span class="linenos">5294</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5295"><a href="#Parser-5295"><span class="linenos">5295</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-5296"><a href="#Parser-5296"><span class="linenos">5296</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5297"><a href="#Parser-5297"><span class="linenos">5297</span></a> <span class="k">while</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">VAR</span><span class="p">):</span>
+</span><span id="Parser-5298"><a href="#Parser-5298"><span class="linenos">5298</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5299"><a href="#Parser-5299"><span class="linenos">5299</span></a>
+</span><span id="Parser-5300"><a href="#Parser-5300"><span class="linenos">5300</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="Parser-5301"><a href="#Parser-5301"><span class="linenos">5301</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
+</span><span id="Parser-5302"><a href="#Parser-5302"><span class="linenos">5302</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</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="Parser-5303"><a href="#Parser-5303"><span class="linenos">5303</span></a> <span class="k">break</span>
</span><span id="Parser-5304"><a href="#Parser-5304"><span class="linenos">5304</span></a>
-</span><span id="Parser-5305"><a href="#Parser-5305"><span class="linenos">5305</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">AND</span><span class="p">):</span>
-</span><span id="Parser-5306"><a href="#Parser-5306"><span class="linenos">5306</span></a> <span class="n">chain</span> <span class="o">=</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;NO&quot;</span><span class="p">)</span>
-</span><span id="Parser-5307"><a href="#Parser-5307"><span class="linenos">5307</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
-</span><span id="Parser-5308"><a href="#Parser-5308"><span class="linenos">5308</span></a>
-</span><span id="Parser-5309"><a href="#Parser-5309"><span class="linenos">5309</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="Parser-5310"><a href="#Parser-5310"><span class="linenos">5310</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">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="Parser-5305"><a href="#Parser-5305"><span class="linenos">5305</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">Transaction</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">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="Parser-5306"><a href="#Parser-5306"><span class="linenos">5306</span></a>
+</span><span id="Parser-5307"><a href="#Parser-5307"><span class="linenos">5307</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</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">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="Parser-5308"><a href="#Parser-5308"><span class="linenos">5308</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5309"><a href="#Parser-5309"><span class="linenos">5309</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5310"><a href="#Parser-5310"><span class="linenos">5310</span></a> <span class="n">is_rollback</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">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
</span><span id="Parser-5311"><a href="#Parser-5311"><span class="linenos">5311</span></a>
-</span><span id="Parser-5312"><a href="#Parser-5312"><span class="linenos">5312</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">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="Parser-5312"><a href="#Parser-5312"><span class="linenos">5312</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;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="Parser-5313"><a href="#Parser-5313"><span class="linenos">5313</span></a>
-</span><span id="Parser-5314"><a href="#Parser-5314"><span class="linenos">5314</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</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">Refresh</span><span class="p">:</span>
-</span><span id="Parser-5315"><a href="#Parser-5315"><span class="linenos">5315</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">TABLE</span><span class="p">)</span>
-</span><span id="Parser-5316"><a href="#Parser-5316"><span class="linenos">5316</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">Refresh</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_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="Parser-5314"><a href="#Parser-5314"><span class="linenos">5314</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;TO&quot;</span><span class="p">):</span>
+</span><span id="Parser-5315"><a href="#Parser-5315"><span class="linenos">5315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
+</span><span id="Parser-5316"><a href="#Parser-5316"><span class="linenos">5316</span></a> <span class="n">savepoint</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><span id="Parser-5317"><a href="#Parser-5317"><span class="linenos">5317</span></a>
-</span><span id="Parser-5318"><a href="#Parser-5318"><span class="linenos">5318</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5319"><a href="#Parser-5319"><span class="linenos">5319</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;ADD&quot;</span><span class="p">):</span>
-</span><span id="Parser-5320"><a href="#Parser-5320"><span class="linenos">5320</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5318"><a href="#Parser-5318"><span class="linenos">5318</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">AND</span><span class="p">):</span>
+</span><span id="Parser-5319"><a href="#Parser-5319"><span class="linenos">5319</span></a> <span class="n">chain</span> <span class="o">=</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;NO&quot;</span><span class="p">)</span>
+</span><span id="Parser-5320"><a href="#Parser-5320"><span class="linenos">5320</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
</span><span id="Parser-5321"><a href="#Parser-5321"><span class="linenos">5321</span></a>
-</span><span id="Parser-5322"><a href="#Parser-5322"><span class="linenos">5322</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">COLUMN</span><span class="p">)</span>
-</span><span id="Parser-5323"><a href="#Parser-5323"><span class="linenos">5323</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5324"><a href="#Parser-5324"><span class="linenos">5324</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
-</span><span id="Parser-5325"><a href="#Parser-5325"><span class="linenos">5325</span></a>
-</span><span id="Parser-5326"><a href="#Parser-5326"><span class="linenos">5326</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-5327"><a href="#Parser-5327"><span class="linenos">5327</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
-</span><span id="Parser-5328"><a href="#Parser-5328"><span class="linenos">5328</span></a>
-</span><span id="Parser-5329"><a href="#Parser-5329"><span class="linenos">5329</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="Parser-5330"><a href="#Parser-5330"><span class="linenos">5330</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
-</span><span id="Parser-5331"><a href="#Parser-5331"><span class="linenos">5331</span></a> <span class="n">position</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="Parser-5332"><a href="#Parser-5332"><span class="linenos">5332</span></a> <span class="n">column_position</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="Parser-5333"><a href="#Parser-5333"><span class="linenos">5333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</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_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
-</span><span id="Parser-5334"><a href="#Parser-5334"><span class="linenos">5334</span></a> <span class="p">)</span>
-</span><span id="Parser-5335"><a href="#Parser-5335"><span class="linenos">5335</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
-</span><span id="Parser-5336"><a href="#Parser-5336"><span class="linenos">5336</span></a>
-</span><span id="Parser-5337"><a href="#Parser-5337"><span class="linenos">5337</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Parser-5322"><a href="#Parser-5322"><span class="linenos">5322</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
+</span><span id="Parser-5323"><a href="#Parser-5323"><span class="linenos">5323</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">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="Parser-5324"><a href="#Parser-5324"><span class="linenos">5324</span></a>
+</span><span id="Parser-5325"><a href="#Parser-5325"><span class="linenos">5325</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">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="Parser-5326"><a href="#Parser-5326"><span class="linenos">5326</span></a>
+</span><span id="Parser-5327"><a href="#Parser-5327"><span class="linenos">5327</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</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">Refresh</span><span class="p">:</span>
+</span><span id="Parser-5328"><a href="#Parser-5328"><span class="linenos">5328</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">TABLE</span><span class="p">)</span>
+</span><span id="Parser-5329"><a href="#Parser-5329"><span class="linenos">5329</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">Refresh</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_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="Parser-5330"><a href="#Parser-5330"><span class="linenos">5330</span></a>
+</span><span id="Parser-5331"><a href="#Parser-5331"><span class="linenos">5331</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5332"><a href="#Parser-5332"><span class="linenos">5332</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;ADD&quot;</span><span class="p">):</span>
+</span><span id="Parser-5333"><a href="#Parser-5333"><span class="linenos">5333</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5334"><a href="#Parser-5334"><span class="linenos">5334</span></a>
+</span><span id="Parser-5335"><a href="#Parser-5335"><span class="linenos">5335</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">COLUMN</span><span class="p">)</span>
+</span><span id="Parser-5336"><a href="#Parser-5336"><span class="linenos">5336</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5337"><a href="#Parser-5337"><span class="linenos">5337</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
</span><span id="Parser-5338"><a href="#Parser-5338"><span class="linenos">5338</span></a>
-</span><span id="Parser-5339"><a href="#Parser-5339"><span class="linenos">5339</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="Parser-5340"><a href="#Parser-5340"><span class="linenos">5340</span></a> <span class="n">drop</span> <span class="o">=</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">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
-</span><span id="Parser-5341"><a href="#Parser-5341"><span class="linenos">5341</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
-</span><span id="Parser-5342"><a href="#Parser-5342"><span class="linenos">5342</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
-</span><span id="Parser-5343"><a href="#Parser-5343"><span class="linenos">5343</span></a> <span class="k">return</span> <span class="n">drop</span>
-</span><span id="Parser-5344"><a href="#Parser-5344"><span class="linenos">5344</span></a>
-</span><span id="Parser-5345"><a href="#Parser-5345"><span class="linenos">5345</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="Parser-5346"><a href="#Parser-5346"><span class="linenos">5346</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
-</span><span id="Parser-5347"><a href="#Parser-5347"><span class="linenos">5347</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="Parser-5348"><a href="#Parser-5348"><span class="linenos">5348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <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_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
-</span><span id="Parser-5349"><a href="#Parser-5349"><span class="linenos">5349</span></a> <span class="p">)</span>
-</span><span id="Parser-5350"><a href="#Parser-5350"><span class="linenos">5350</span></a>
-</span><span id="Parser-5351"><a href="#Parser-5351"><span class="linenos">5351</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</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">AddConstraint</span><span class="p">:</span>
-</span><span id="Parser-5352"><a href="#Parser-5352"><span class="linenos">5352</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5353"><a href="#Parser-5353"><span class="linenos">5353</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">token_type</span>
-</span><span id="Parser-5354"><a href="#Parser-5354"><span class="linenos">5354</span></a>
-</span><span id="Parser-5355"><a href="#Parser-5355"><span class="linenos">5355</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
-</span><span id="Parser-5356"><a href="#Parser-5356"><span class="linenos">5356</span></a> <span class="n">this</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><span id="Parser-5339"><a href="#Parser-5339"><span class="linenos">5339</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-5340"><a href="#Parser-5340"><span class="linenos">5340</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
+</span><span id="Parser-5341"><a href="#Parser-5341"><span class="linenos">5341</span></a>
+</span><span id="Parser-5342"><a href="#Parser-5342"><span class="linenos">5342</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="Parser-5343"><a href="#Parser-5343"><span class="linenos">5343</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
+</span><span id="Parser-5344"><a href="#Parser-5344"><span class="linenos">5344</span></a> <span class="n">position</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="Parser-5345"><a href="#Parser-5345"><span class="linenos">5345</span></a> <span class="n">column_position</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="Parser-5346"><a href="#Parser-5346"><span class="linenos">5346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</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_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
+</span><span id="Parser-5347"><a href="#Parser-5347"><span class="linenos">5347</span></a> <span class="p">)</span>
+</span><span id="Parser-5348"><a href="#Parser-5348"><span class="linenos">5348</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
+</span><span id="Parser-5349"><a href="#Parser-5349"><span class="linenos">5349</span></a>
+</span><span id="Parser-5350"><a href="#Parser-5350"><span class="linenos">5350</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Parser-5351"><a href="#Parser-5351"><span class="linenos">5351</span></a>
+</span><span id="Parser-5352"><a href="#Parser-5352"><span class="linenos">5352</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="Parser-5353"><a href="#Parser-5353"><span class="linenos">5353</span></a> <span class="n">drop</span> <span class="o">=</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">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
+</span><span id="Parser-5354"><a href="#Parser-5354"><span class="linenos">5354</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
+</span><span id="Parser-5355"><a href="#Parser-5355"><span class="linenos">5355</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
+</span><span id="Parser-5356"><a href="#Parser-5356"><span class="linenos">5356</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="Parser-5357"><a href="#Parser-5357"><span class="linenos">5357</span></a>
-</span><span id="Parser-5358"><a href="#Parser-5358"><span class="linenos">5358</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;CHECK&quot;</span><span class="p">):</span>
-</span><span id="Parser-5359"><a href="#Parser-5359"><span class="linenos">5359</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="Parser-5360"><a href="#Parser-5360"><span class="linenos">5360</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="Parser-5361"><a href="#Parser-5361"><span class="linenos">5361</span></a>
-</span><span id="Parser-5362"><a href="#Parser-5362"><span class="linenos">5362</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="Parser-5363"><a href="#Parser-5363"><span class="linenos">5363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</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">enforced</span><span class="o">=</span><span class="n">enforced</span>
-</span><span id="Parser-5364"><a href="#Parser-5364"><span class="linenos">5364</span></a> <span class="p">)</span>
-</span><span id="Parser-5365"><a href="#Parser-5365"><span class="linenos">5365</span></a>
-</span><span id="Parser-5366"><a href="#Parser-5366"><span class="linenos">5366</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <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">FOREIGN_KEY</span><span class="p">):</span>
-</span><span id="Parser-5367"><a href="#Parser-5367"><span class="linenos">5367</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
-</span><span id="Parser-5368"><a href="#Parser-5368"><span class="linenos">5368</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <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">PRIMARY_KEY</span><span class="p">):</span>
-</span><span id="Parser-5369"><a href="#Parser-5369"><span class="linenos">5369</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
-</span><span id="Parser-5370"><a href="#Parser-5370"><span class="linenos">5370</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5371"><a href="#Parser-5371"><span class="linenos">5371</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5372"><a href="#Parser-5372"><span class="linenos">5372</span></a>
-</span><span id="Parser-5373"><a href="#Parser-5373"><span class="linenos">5373</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">AddConstraint</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><span id="Parser-5358"><a href="#Parser-5358"><span class="linenos">5358</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="Parser-5359"><a href="#Parser-5359"><span class="linenos">5359</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
+</span><span id="Parser-5360"><a href="#Parser-5360"><span class="linenos">5360</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="Parser-5361"><a href="#Parser-5361"><span class="linenos">5361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <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_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
+</span><span id="Parser-5362"><a href="#Parser-5362"><span class="linenos">5362</span></a> <span class="p">)</span>
+</span><span id="Parser-5363"><a href="#Parser-5363"><span class="linenos">5363</span></a>
+</span><span id="Parser-5364"><a href="#Parser-5364"><span class="linenos">5364</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</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">AddConstraint</span><span class="p">:</span>
+</span><span id="Parser-5365"><a href="#Parser-5365"><span class="linenos">5365</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5366"><a href="#Parser-5366"><span class="linenos">5366</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">token_type</span>
+</span><span id="Parser-5367"><a href="#Parser-5367"><span class="linenos">5367</span></a>
+</span><span id="Parser-5368"><a href="#Parser-5368"><span class="linenos">5368</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
+</span><span id="Parser-5369"><a href="#Parser-5369"><span class="linenos">5369</span></a> <span class="n">this</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><span id="Parser-5370"><a href="#Parser-5370"><span class="linenos">5370</span></a>
+</span><span id="Parser-5371"><a href="#Parser-5371"><span class="linenos">5371</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;CHECK&quot;</span><span class="p">):</span>
+</span><span id="Parser-5372"><a href="#Parser-5372"><span class="linenos">5372</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-5373"><a href="#Parser-5373"><span class="linenos">5373</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
</span><span id="Parser-5374"><a href="#Parser-5374"><span class="linenos">5374</span></a>
-</span><span id="Parser-5375"><a href="#Parser-5375"><span class="linenos">5375</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</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">List</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="Parser-5376"><a href="#Parser-5376"><span class="linenos">5376</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-5377"><a href="#Parser-5377"><span class="linenos">5377</span></a>
-</span><span id="Parser-5378"><a href="#Parser-5378"><span class="linenos">5378</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5379"><a href="#Parser-5379"><span class="linenos">5379</span></a> <span class="k">return</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_add_constraint</span><span class="p">)</span>
-</span><span id="Parser-5380"><a href="#Parser-5380"><span class="linenos">5380</span></a>
-</span><span id="Parser-5381"><a href="#Parser-5381"><span class="linenos">5381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5382"><a href="#Parser-5382"><span class="linenos">5382</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</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;ADD&quot;</span><span class="p">):</span>
-</span><span id="Parser-5383"><a href="#Parser-5383"><span class="linenos">5383</span></a> <span class="k">return</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_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5384"><a href="#Parser-5384"><span class="linenos">5384</span></a> <span class="k">return</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_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5375"><a href="#Parser-5375"><span class="linenos">5375</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="Parser-5376"><a href="#Parser-5376"><span class="linenos">5376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</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">enforced</span><span class="o">=</span><span class="n">enforced</span>
+</span><span id="Parser-5377"><a href="#Parser-5377"><span class="linenos">5377</span></a> <span class="p">)</span>
+</span><span id="Parser-5378"><a href="#Parser-5378"><span class="linenos">5378</span></a>
+</span><span id="Parser-5379"><a href="#Parser-5379"><span class="linenos">5379</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <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">FOREIGN_KEY</span><span class="p">):</span>
+</span><span id="Parser-5380"><a href="#Parser-5380"><span class="linenos">5380</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
+</span><span id="Parser-5381"><a href="#Parser-5381"><span class="linenos">5381</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <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">PRIMARY_KEY</span><span class="p">):</span>
+</span><span id="Parser-5382"><a href="#Parser-5382"><span class="linenos">5382</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
+</span><span id="Parser-5383"><a href="#Parser-5383"><span class="linenos">5383</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5384"><a href="#Parser-5384"><span class="linenos">5384</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5385"><a href="#Parser-5385"><span class="linenos">5385</span></a>
-</span><span id="Parser-5386"><a href="#Parser-5386"><span class="linenos">5386</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</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">AlterColumn</span><span class="p">:</span>
-</span><span id="Parser-5387"><a href="#Parser-5387"><span class="linenos">5387</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">COLUMN</span><span class="p">)</span>
-</span><span id="Parser-5388"><a href="#Parser-5388"><span class="linenos">5388</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5389"><a href="#Parser-5389"><span class="linenos">5389</span></a>
-</span><span id="Parser-5390"><a href="#Parser-5390"><span class="linenos">5390</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="Parser-5391"><a href="#Parser-5391"><span class="linenos">5391</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5392"><a href="#Parser-5392"><span class="linenos">5392</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="Parser-5393"><a href="#Parser-5393"><span class="linenos">5393</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</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="Parser-5394"><a href="#Parser-5394"><span class="linenos">5394</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">COMMENT</span><span class="p">):</span>
-</span><span id="Parser-5395"><a href="#Parser-5395"><span class="linenos">5395</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="Parser-5396"><a href="#Parser-5396"><span class="linenos">5396</span></a>
-</span><span id="Parser-5397"><a href="#Parser-5397"><span class="linenos">5397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
-</span><span id="Parser-5398"><a href="#Parser-5398"><span class="linenos">5398</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="Parser-5399"><a href="#Parser-5399"><span class="linenos">5399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="Parser-5400"><a href="#Parser-5400"><span class="linenos">5400</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="Parser-5401"><a href="#Parser-5401"><span class="linenos">5401</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
-</span><span id="Parser-5402"><a href="#Parser-5402"><span class="linenos">5402</span></a> <span class="n">collate</span><span class="o">=</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">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="Parser-5403"><a href="#Parser-5403"><span class="linenos">5403</span></a> <span class="n">using</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="Parser-5404"><a href="#Parser-5404"><span class="linenos">5404</span></a> <span class="p">)</span>
-</span><span id="Parser-5405"><a href="#Parser-5405"><span class="linenos">5405</span></a>
-</span><span id="Parser-5406"><a href="#Parser-5406"><span class="linenos">5406</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</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">List</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="Parser-5407"><a href="#Parser-5407"><span class="linenos">5407</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-5408"><a href="#Parser-5408"><span class="linenos">5408</span></a>
-</span><span id="Parser-5409"><a href="#Parser-5409"><span class="linenos">5409</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="Parser-5410"><a href="#Parser-5410"><span class="linenos">5410</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">PARTITION</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="Parser-5411"><a href="#Parser-5411"><span class="linenos">5411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
-</span><span id="Parser-5412"><a href="#Parser-5412"><span class="linenos">5412</span></a>
-</span><span id="Parser-5413"><a href="#Parser-5413"><span class="linenos">5413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5414"><a href="#Parser-5414"><span class="linenos">5414</span></a> <span class="k">return</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_drop_column</span><span class="p">)</span>
-</span><span id="Parser-5415"><a href="#Parser-5415"><span class="linenos">5415</span></a>
-</span><span id="Parser-5416"><a href="#Parser-5416"><span class="linenos">5416</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</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">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
-</span><span id="Parser-5417"><a href="#Parser-5417"><span class="linenos">5417</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">COLUMN</span><span class="p">):</span>
-</span><span id="Parser-5418"><a href="#Parser-5418"><span class="linenos">5418</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="Parser-5419"><a href="#Parser-5419"><span class="linenos">5419</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5420"><a href="#Parser-5420"><span class="linenos">5420</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="Parser-5421"><a href="#Parser-5421"><span class="linenos">5421</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5422"><a href="#Parser-5422"><span class="linenos">5422</span></a>
-</span><span id="Parser-5423"><a href="#Parser-5423"><span class="linenos">5423</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5424"><a href="#Parser-5424"><span class="linenos">5424</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5386"><a href="#Parser-5386"><span class="linenos">5386</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">AddConstraint</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><span id="Parser-5387"><a href="#Parser-5387"><span class="linenos">5387</span></a>
+</span><span id="Parser-5388"><a href="#Parser-5388"><span class="linenos">5388</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</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">List</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="Parser-5389"><a href="#Parser-5389"><span class="linenos">5389</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-5390"><a href="#Parser-5390"><span class="linenos">5390</span></a>
+</span><span id="Parser-5391"><a href="#Parser-5391"><span class="linenos">5391</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5392"><a href="#Parser-5392"><span class="linenos">5392</span></a> <span class="k">return</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_add_constraint</span><span class="p">)</span>
+</span><span id="Parser-5393"><a href="#Parser-5393"><span class="linenos">5393</span></a>
+</span><span id="Parser-5394"><a href="#Parser-5394"><span class="linenos">5394</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5395"><a href="#Parser-5395"><span class="linenos">5395</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</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;ADD&quot;</span><span class="p">):</span>
+</span><span id="Parser-5396"><a href="#Parser-5396"><span class="linenos">5396</span></a> <span class="k">return</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_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5397"><a href="#Parser-5397"><span class="linenos">5397</span></a> <span class="k">return</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_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5398"><a href="#Parser-5398"><span class="linenos">5398</span></a>
+</span><span id="Parser-5399"><a href="#Parser-5399"><span class="linenos">5399</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</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">AlterColumn</span><span class="p">:</span>
+</span><span id="Parser-5400"><a href="#Parser-5400"><span class="linenos">5400</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">COLUMN</span><span class="p">)</span>
+</span><span id="Parser-5401"><a href="#Parser-5401"><span class="linenos">5401</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5402"><a href="#Parser-5402"><span class="linenos">5402</span></a>
+</span><span id="Parser-5403"><a href="#Parser-5403"><span class="linenos">5403</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="Parser-5404"><a href="#Parser-5404"><span class="linenos">5404</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5405"><a href="#Parser-5405"><span class="linenos">5405</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="Parser-5406"><a href="#Parser-5406"><span class="linenos">5406</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</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="Parser-5407"><a href="#Parser-5407"><span class="linenos">5407</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">COMMENT</span><span class="p">):</span>
+</span><span id="Parser-5408"><a href="#Parser-5408"><span class="linenos">5408</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">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="Parser-5409"><a href="#Parser-5409"><span class="linenos">5409</span></a>
+</span><span id="Parser-5410"><a href="#Parser-5410"><span class="linenos">5410</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
+</span><span id="Parser-5411"><a href="#Parser-5411"><span class="linenos">5411</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="Parser-5412"><a href="#Parser-5412"><span class="linenos">5412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="Parser-5413"><a href="#Parser-5413"><span class="linenos">5413</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
+</span><span id="Parser-5414"><a href="#Parser-5414"><span class="linenos">5414</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
+</span><span id="Parser-5415"><a href="#Parser-5415"><span class="linenos">5415</span></a> <span class="n">collate</span><span class="o">=</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">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="Parser-5416"><a href="#Parser-5416"><span class="linenos">5416</span></a> <span class="n">using</span><span class="o">=</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">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="Parser-5417"><a href="#Parser-5417"><span class="linenos">5417</span></a> <span class="p">)</span>
+</span><span id="Parser-5418"><a href="#Parser-5418"><span class="linenos">5418</span></a>
+</span><span id="Parser-5419"><a href="#Parser-5419"><span class="linenos">5419</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</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">List</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="Parser-5420"><a href="#Parser-5420"><span class="linenos">5420</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-5421"><a href="#Parser-5421"><span class="linenos">5421</span></a>
+</span><span id="Parser-5422"><a href="#Parser-5422"><span class="linenos">5422</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="Parser-5423"><a href="#Parser-5423"><span class="linenos">5423</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">PARTITION</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="Parser-5424"><a href="#Parser-5424"><span class="linenos">5424</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
</span><span id="Parser-5425"><a href="#Parser-5425"><span class="linenos">5425</span></a>
-</span><span id="Parser-5426"><a href="#Parser-5426"><span class="linenos">5426</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">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
-</span><span id="Parser-5427"><a href="#Parser-5427"><span class="linenos">5427</span></a>
-</span><span id="Parser-5428"><a href="#Parser-5428"><span class="linenos">5428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="Parser-5429"><a href="#Parser-5429"><span class="linenos">5429</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">RenameTable</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-5430"><a href="#Parser-5430"><span class="linenos">5430</span></a>
-</span><span id="Parser-5431"><a href="#Parser-5431"><span class="linenos">5431</span></a> <span class="k">def</span> <span class="nf">_parse_alter</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">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5432"><a href="#Parser-5432"><span class="linenos">5432</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="Parser-5433"><a href="#Parser-5433"><span class="linenos">5433</span></a>
-</span><span id="Parser-5434"><a href="#Parser-5434"><span class="linenos">5434</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
-</span><span id="Parser-5435"><a href="#Parser-5435"><span class="linenos">5435</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="Parser-5436"><a href="#Parser-5436"><span class="linenos">5436</span></a>
-</span><span id="Parser-5437"><a href="#Parser-5437"><span class="linenos">5437</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="Parser-5438"><a href="#Parser-5438"><span class="linenos">5438</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="Parser-5439"><a href="#Parser-5439"><span class="linenos">5439</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5426"><a href="#Parser-5426"><span class="linenos">5426</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5427"><a href="#Parser-5427"><span class="linenos">5427</span></a> <span class="k">return</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_drop_column</span><span class="p">)</span>
+</span><span id="Parser-5428"><a href="#Parser-5428"><span class="linenos">5428</span></a>
+</span><span id="Parser-5429"><a href="#Parser-5429"><span class="linenos">5429</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</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">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
+</span><span id="Parser-5430"><a href="#Parser-5430"><span class="linenos">5430</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">COLUMN</span><span class="p">):</span>
+</span><span id="Parser-5431"><a href="#Parser-5431"><span class="linenos">5431</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="Parser-5432"><a href="#Parser-5432"><span class="linenos">5432</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5433"><a href="#Parser-5433"><span class="linenos">5433</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="Parser-5434"><a href="#Parser-5434"><span class="linenos">5434</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5435"><a href="#Parser-5435"><span class="linenos">5435</span></a>
+</span><span id="Parser-5436"><a href="#Parser-5436"><span class="linenos">5436</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5437"><a href="#Parser-5437"><span class="linenos">5437</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5438"><a href="#Parser-5438"><span class="linenos">5438</span></a>
+</span><span id="Parser-5439"><a href="#Parser-5439"><span class="linenos">5439</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">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
</span><span id="Parser-5440"><a href="#Parser-5440"><span class="linenos">5440</span></a>
-</span><span id="Parser-5441"><a href="#Parser-5441"><span class="linenos">5441</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="Parser-5442"><a href="#Parser-5442"><span class="linenos">5442</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5441"><a href="#Parser-5441"><span class="linenos">5441</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="Parser-5442"><a href="#Parser-5442"><span class="linenos">5442</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">RenameTable</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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-5443"><a href="#Parser-5443"><span class="linenos">5443</span></a>
-</span><span id="Parser-5444"><a href="#Parser-5444"><span class="linenos">5444</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</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 class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5445"><a href="#Parser-5445"><span class="linenos">5445</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-5446"><a href="#Parser-5446"><span class="linenos">5446</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
-</span><span id="Parser-5447"><a href="#Parser-5447"><span class="linenos">5447</span></a>
-</span><span id="Parser-5448"><a href="#Parser-5448"><span class="linenos">5448</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
-</span><span id="Parser-5449"><a href="#Parser-5449"><span class="linenos">5449</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="Parser-5450"><a href="#Parser-5450"><span class="linenos">5450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="Parser-5451"><a href="#Parser-5451"><span class="linenos">5451</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5452"><a href="#Parser-5452"><span class="linenos">5452</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="Parser-5453"><a href="#Parser-5453"><span class="linenos">5453</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="Parser-5454"><a href="#Parser-5454"><span class="linenos">5454</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
-</span><span id="Parser-5455"><a href="#Parser-5455"><span class="linenos">5455</span></a> <span class="p">)</span>
+</span><span id="Parser-5444"><a href="#Parser-5444"><span class="linenos">5444</span></a> <span class="k">def</span> <span class="nf">_parse_alter</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">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5445"><a href="#Parser-5445"><span class="linenos">5445</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="Parser-5446"><a href="#Parser-5446"><span class="linenos">5446</span></a>
+</span><span id="Parser-5447"><a href="#Parser-5447"><span class="linenos">5447</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
+</span><span id="Parser-5448"><a href="#Parser-5448"><span class="linenos">5448</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
+</span><span id="Parser-5449"><a href="#Parser-5449"><span class="linenos">5449</span></a>
+</span><span id="Parser-5450"><a href="#Parser-5450"><span class="linenos">5450</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="Parser-5451"><a href="#Parser-5451"><span class="linenos">5451</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="Parser-5452"><a href="#Parser-5452"><span class="linenos">5452</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5453"><a href="#Parser-5453"><span class="linenos">5453</span></a>
+</span><span id="Parser-5454"><a href="#Parser-5454"><span class="linenos">5454</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="Parser-5455"><a href="#Parser-5455"><span class="linenos">5455</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-5456"><a href="#Parser-5456"><span class="linenos">5456</span></a>
-</span><span id="Parser-5457"><a href="#Parser-5457"><span class="linenos">5457</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="Parser-5458"><a href="#Parser-5458"><span class="linenos">5458</span></a>
-</span><span id="Parser-5459"><a href="#Parser-5459"><span class="linenos">5459</span></a> <span class="k">def</span> <span class="nf">_parse_merge</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">Merge</span><span class="p">:</span>
-</span><span id="Parser-5460"><a href="#Parser-5460"><span class="linenos">5460</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">INTO</span><span class="p">)</span>
-</span><span id="Parser-5461"><a href="#Parser-5461"><span class="linenos">5461</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-5462"><a href="#Parser-5462"><span class="linenos">5462</span></a>
-</span><span id="Parser-5463"><a href="#Parser-5463"><span class="linenos">5463</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</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="Parser-5464"><a href="#Parser-5464"><span class="linenos">5464</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="Parser-5465"><a href="#Parser-5465"><span class="linenos">5465</span></a>
-</span><span id="Parser-5466"><a href="#Parser-5466"><span class="linenos">5466</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">USING</span><span class="p">)</span>
-</span><span id="Parser-5467"><a href="#Parser-5467"><span class="linenos">5467</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-5468"><a href="#Parser-5468"><span class="linenos">5468</span></a>
-</span><span id="Parser-5469"><a href="#Parser-5469"><span class="linenos">5469</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">ON</span><span class="p">)</span>
-</span><span id="Parser-5470"><a href="#Parser-5470"><span class="linenos">5470</span></a> <span class="n">on</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="Parser-5457"><a href="#Parser-5457"><span class="linenos">5457</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</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 class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5458"><a href="#Parser-5458"><span class="linenos">5458</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-5459"><a href="#Parser-5459"><span class="linenos">5459</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="Parser-5460"><a href="#Parser-5460"><span class="linenos">5460</span></a>
+</span><span id="Parser-5461"><a href="#Parser-5461"><span class="linenos">5461</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
+</span><span id="Parser-5462"><a href="#Parser-5462"><span class="linenos">5462</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="Parser-5463"><a href="#Parser-5463"><span class="linenos">5463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="Parser-5464"><a href="#Parser-5464"><span class="linenos">5464</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5465"><a href="#Parser-5465"><span class="linenos">5465</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="Parser-5466"><a href="#Parser-5466"><span class="linenos">5466</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="Parser-5467"><a href="#Parser-5467"><span class="linenos">5467</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
+</span><span id="Parser-5468"><a href="#Parser-5468"><span class="linenos">5468</span></a> <span class="p">)</span>
+</span><span id="Parser-5469"><a href="#Parser-5469"><span class="linenos">5469</span></a>
+</span><span id="Parser-5470"><a href="#Parser-5470"><span class="linenos">5470</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-5471"><a href="#Parser-5471"><span class="linenos">5471</span></a>
-</span><span id="Parser-5472"><a href="#Parser-5472"><span class="linenos">5472</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="Parser-5473"><a href="#Parser-5473"><span class="linenos">5473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="Parser-5474"><a href="#Parser-5474"><span class="linenos">5474</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="Parser-5475"><a href="#Parser-5475"><span class="linenos">5475</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="Parser-5476"><a href="#Parser-5476"><span class="linenos">5476</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="Parser-5477"><a href="#Parser-5477"><span class="linenos">5477</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
-</span><span id="Parser-5478"><a href="#Parser-5478"><span class="linenos">5478</span></a> <span class="p">)</span>
-</span><span id="Parser-5479"><a href="#Parser-5479"><span class="linenos">5479</span></a>
-</span><span id="Parser-5480"><a href="#Parser-5480"><span class="linenos">5480</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
-</span><span id="Parser-5481"><a href="#Parser-5481"><span class="linenos">5481</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5482"><a href="#Parser-5482"><span class="linenos">5482</span></a>
-</span><span id="Parser-5483"><a href="#Parser-5483"><span class="linenos">5483</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
-</span><span id="Parser-5484"><a href="#Parser-5484"><span class="linenos">5484</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</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">NOT</span><span class="p">)</span>
-</span><span id="Parser-5485"><a href="#Parser-5485"><span class="linenos">5485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
-</span><span id="Parser-5486"><a href="#Parser-5486"><span class="linenos">5486</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-5487"><a href="#Parser-5487"><span class="linenos">5487</span></a> <span class="kc">False</span>
-</span><span id="Parser-5488"><a href="#Parser-5488"><span class="linenos">5488</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
-</span><span id="Parser-5489"><a href="#Parser-5489"><span class="linenos">5489</span></a> <span class="k">else</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
-</span><span id="Parser-5490"><a href="#Parser-5490"><span class="linenos">5490</span></a> <span class="p">)</span>
-</span><span id="Parser-5491"><a href="#Parser-5491"><span class="linenos">5491</span></a> <span class="n">condition</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 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">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5472"><a href="#Parser-5472"><span class="linenos">5472</span></a> <span class="k">def</span> <span class="nf">_parse_merge</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">Merge</span><span class="p">:</span>
+</span><span id="Parser-5473"><a href="#Parser-5473"><span class="linenos">5473</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">INTO</span><span class="p">)</span>
+</span><span id="Parser-5474"><a href="#Parser-5474"><span class="linenos">5474</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-5475"><a href="#Parser-5475"><span class="linenos">5475</span></a>
+</span><span id="Parser-5476"><a href="#Parser-5476"><span class="linenos">5476</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</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="Parser-5477"><a href="#Parser-5477"><span class="linenos">5477</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-5478"><a href="#Parser-5478"><span class="linenos">5478</span></a>
+</span><span id="Parser-5479"><a href="#Parser-5479"><span class="linenos">5479</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">USING</span><span class="p">)</span>
+</span><span id="Parser-5480"><a href="#Parser-5480"><span class="linenos">5480</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-5481"><a href="#Parser-5481"><span class="linenos">5481</span></a>
+</span><span id="Parser-5482"><a href="#Parser-5482"><span class="linenos">5482</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">ON</span><span class="p">)</span>
+</span><span id="Parser-5483"><a href="#Parser-5483"><span class="linenos">5483</span></a> <span class="n">on</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="Parser-5484"><a href="#Parser-5484"><span class="linenos">5484</span></a>
+</span><span id="Parser-5485"><a href="#Parser-5485"><span class="linenos">5485</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="Parser-5486"><a href="#Parser-5486"><span class="linenos">5486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
+</span><span id="Parser-5487"><a href="#Parser-5487"><span class="linenos">5487</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
+</span><span id="Parser-5488"><a href="#Parser-5488"><span class="linenos">5488</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="Parser-5489"><a href="#Parser-5489"><span class="linenos">5489</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="Parser-5490"><a href="#Parser-5490"><span class="linenos">5490</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
+</span><span id="Parser-5491"><a href="#Parser-5491"><span class="linenos">5491</span></a> <span class="p">)</span>
</span><span id="Parser-5492"><a href="#Parser-5492"><span class="linenos">5492</span></a>
-</span><span id="Parser-5493"><a href="#Parser-5493"><span class="linenos">5493</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">THEN</span><span class="p">)</span>
-</span><span id="Parser-5494"><a href="#Parser-5494"><span class="linenos">5494</span></a>
-</span><span id="Parser-5495"><a href="#Parser-5495"><span class="linenos">5495</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">INSERT</span><span class="p">):</span>
-</span><span id="Parser-5496"><a href="#Parser-5496"><span class="linenos">5496</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="Parser-5497"><a href="#Parser-5497"><span class="linenos">5497</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="Parser-5498"><a href="#Parser-5498"><span class="linenos">5498</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="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">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
-</span><span id="Parser-5499"><a href="#Parser-5499"><span class="linenos">5499</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5500"><a href="#Parser-5500"><span class="linenos">5500</span></a> <span class="n">then</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="Parser-5501"><a href="#Parser-5501"><span class="linenos">5501</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Parser-5502"><a href="#Parser-5502"><span class="linenos">5502</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="Parser-5503"><a href="#Parser-5503"><span class="linenos">5503</span></a> <span class="n">expression</span><span class="o">=</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">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="Parser-5504"><a href="#Parser-5504"><span class="linenos">5504</span></a> <span class="p">)</span>
-</span><span id="Parser-5505"><a href="#Parser-5505"><span class="linenos">5505</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">UPDATE</span><span class="p">):</span>
-</span><span id="Parser-5506"><a href="#Parser-5506"><span class="linenos">5506</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="Parser-5507"><a href="#Parser-5507"><span class="linenos">5507</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-5508"><a href="#Parser-5508"><span class="linenos">5508</span></a> <span class="n">then</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">Update</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="Parser-5509"><a href="#Parser-5509"><span class="linenos">5509</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5510"><a href="#Parser-5510"><span class="linenos">5510</span></a> <span class="n">then</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="Parser-5511"><a href="#Parser-5511"><span class="linenos">5511</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Parser-5512"><a href="#Parser-5512"><span class="linenos">5512</span></a> <span class="n">expressions</span><span class="o">=</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">SET</span><span class="p">)</span>
-</span><span id="Parser-5513"><a href="#Parser-5513"><span class="linenos">5513</span></a> <span class="ow">and</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_equality</span><span class="p">),</span>
-</span><span id="Parser-5514"><a href="#Parser-5514"><span class="linenos">5514</span></a> <span class="p">)</span>
-</span><span id="Parser-5515"><a href="#Parser-5515"><span class="linenos">5515</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">DELETE</span><span class="p">):</span>
-</span><span id="Parser-5516"><a href="#Parser-5516"><span class="linenos">5516</span></a> <span class="n">then</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">Var</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-5517"><a href="#Parser-5517"><span class="linenos">5517</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5518"><a href="#Parser-5518"><span class="linenos">5518</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5519"><a href="#Parser-5519"><span class="linenos">5519</span></a>
-</span><span id="Parser-5520"><a href="#Parser-5520"><span class="linenos">5520</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-5521"><a href="#Parser-5521"><span class="linenos">5521</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5522"><a href="#Parser-5522"><span class="linenos">5522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="Parser-5523"><a href="#Parser-5523"><span class="linenos">5523</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="Parser-5524"><a href="#Parser-5524"><span class="linenos">5524</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="Parser-5525"><a href="#Parser-5525"><span class="linenos">5525</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="Parser-5526"><a href="#Parser-5526"><span class="linenos">5526</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="Parser-5527"><a href="#Parser-5527"><span class="linenos">5527</span></a> <span class="p">)</span>
-</span><span id="Parser-5528"><a href="#Parser-5528"><span class="linenos">5528</span></a> <span class="p">)</span>
-</span><span id="Parser-5529"><a href="#Parser-5529"><span class="linenos">5529</span></a> <span class="k">return</span> <span class="n">whens</span>
-</span><span id="Parser-5530"><a href="#Parser-5530"><span class="linenos">5530</span></a>
-</span><span id="Parser-5531"><a href="#Parser-5531"><span class="linenos">5531</span></a> <span class="k">def</span> <span class="nf">_parse_show</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="Parser-5532"><a href="#Parser-5532"><span class="linenos">5532</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
-</span><span id="Parser-5533"><a href="#Parser-5533"><span class="linenos">5533</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-5534"><a href="#Parser-5534"><span class="linenos">5534</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-5535"><a href="#Parser-5535"><span class="linenos">5535</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5536"><a href="#Parser-5536"><span class="linenos">5536</span></a>
-</span><span id="Parser-5537"><a href="#Parser-5537"><span class="linenos">5537</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="Parser-5538"><a href="#Parser-5538"><span class="linenos">5538</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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5539"><a href="#Parser-5539"><span class="linenos">5539</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="Parser-5540"><a href="#Parser-5540"><span class="linenos">5540</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5541"><a href="#Parser-5541"><span class="linenos">5541</span></a>
-</span><span id="Parser-5542"><a href="#Parser-5542"><span class="linenos">5542</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;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</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;TRANSACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-5543"><a href="#Parser-5543"><span class="linenos">5543</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-5544"><a href="#Parser-5544"><span class="linenos">5544</span></a>
-</span><span id="Parser-5545"><a href="#Parser-5545"><span class="linenos">5545</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-5546"><a href="#Parser-5546"><span class="linenos">5546</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
-</span><span id="Parser-5547"><a href="#Parser-5547"><span class="linenos">5547</span></a>
-</span><span id="Parser-5548"><a href="#Parser-5548"><span class="linenos">5548</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
-</span><span id="Parser-5549"><a href="#Parser-5549"><span class="linenos">5549</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5550"><a href="#Parser-5550"><span class="linenos">5550</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5551"><a href="#Parser-5551"><span class="linenos">5551</span></a>
-</span><span id="Parser-5552"><a href="#Parser-5552"><span class="linenos">5552</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-5553"><a href="#Parser-5553"><span class="linenos">5553</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">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="Parser-5493"><a href="#Parser-5493"><span class="linenos">5493</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</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">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
+</span><span id="Parser-5494"><a href="#Parser-5494"><span class="linenos">5494</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5495"><a href="#Parser-5495"><span class="linenos">5495</span></a>
+</span><span id="Parser-5496"><a href="#Parser-5496"><span class="linenos">5496</span></a> <span class="k">while</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">WHEN</span><span class="p">):</span>
+</span><span id="Parser-5497"><a href="#Parser-5497"><span class="linenos">5497</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</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">NOT</span><span class="p">)</span>
+</span><span id="Parser-5498"><a href="#Parser-5498"><span class="linenos">5498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
+</span><span id="Parser-5499"><a href="#Parser-5499"><span class="linenos">5499</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-5500"><a href="#Parser-5500"><span class="linenos">5500</span></a> <span class="kc">False</span>
+</span><span id="Parser-5501"><a href="#Parser-5501"><span class="linenos">5501</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
+</span><span id="Parser-5502"><a href="#Parser-5502"><span class="linenos">5502</span></a> <span class="k">else</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;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
+</span><span id="Parser-5503"><a href="#Parser-5503"><span class="linenos">5503</span></a> <span class="p">)</span>
+</span><span id="Parser-5504"><a href="#Parser-5504"><span class="linenos">5504</span></a> <span class="n">condition</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 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">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5505"><a href="#Parser-5505"><span class="linenos">5505</span></a>
+</span><span id="Parser-5506"><a href="#Parser-5506"><span class="linenos">5506</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">THEN</span><span class="p">)</span>
+</span><span id="Parser-5507"><a href="#Parser-5507"><span class="linenos">5507</span></a>
+</span><span id="Parser-5508"><a href="#Parser-5508"><span class="linenos">5508</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">INSERT</span><span class="p">):</span>
+</span><span id="Parser-5509"><a href="#Parser-5509"><span class="linenos">5509</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-5510"><a href="#Parser-5510"><span class="linenos">5510</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="Parser-5511"><a href="#Parser-5511"><span class="linenos">5511</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="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">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
+</span><span id="Parser-5512"><a href="#Parser-5512"><span class="linenos">5512</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5513"><a href="#Parser-5513"><span class="linenos">5513</span></a> <span class="n">then</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="Parser-5514"><a href="#Parser-5514"><span class="linenos">5514</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Parser-5515"><a href="#Parser-5515"><span class="linenos">5515</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="Parser-5516"><a href="#Parser-5516"><span class="linenos">5516</span></a> <span class="n">expression</span><span class="o">=</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">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="Parser-5517"><a href="#Parser-5517"><span class="linenos">5517</span></a> <span class="p">)</span>
+</span><span id="Parser-5518"><a href="#Parser-5518"><span class="linenos">5518</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">UPDATE</span><span class="p">):</span>
+</span><span id="Parser-5519"><a href="#Parser-5519"><span class="linenos">5519</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-5520"><a href="#Parser-5520"><span class="linenos">5520</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-5521"><a href="#Parser-5521"><span class="linenos">5521</span></a> <span class="n">then</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">Update</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="Parser-5522"><a href="#Parser-5522"><span class="linenos">5522</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5523"><a href="#Parser-5523"><span class="linenos">5523</span></a> <span class="n">then</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="Parser-5524"><a href="#Parser-5524"><span class="linenos">5524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Parser-5525"><a href="#Parser-5525"><span class="linenos">5525</span></a> <span class="n">expressions</span><span class="o">=</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">SET</span><span class="p">)</span>
+</span><span id="Parser-5526"><a href="#Parser-5526"><span class="linenos">5526</span></a> <span class="ow">and</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_equality</span><span class="p">),</span>
+</span><span id="Parser-5527"><a href="#Parser-5527"><span class="linenos">5527</span></a> <span class="p">)</span>
+</span><span id="Parser-5528"><a href="#Parser-5528"><span class="linenos">5528</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">DELETE</span><span class="p">):</span>
+</span><span id="Parser-5529"><a href="#Parser-5529"><span class="linenos">5529</span></a> <span class="n">then</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">Var</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5530"><a href="#Parser-5530"><span class="linenos">5530</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5531"><a href="#Parser-5531"><span class="linenos">5531</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5532"><a href="#Parser-5532"><span class="linenos">5532</span></a>
+</span><span id="Parser-5533"><a href="#Parser-5533"><span class="linenos">5533</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-5534"><a href="#Parser-5534"><span class="linenos">5534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5535"><a href="#Parser-5535"><span class="linenos">5535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="Parser-5536"><a href="#Parser-5536"><span class="linenos">5536</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="Parser-5537"><a href="#Parser-5537"><span class="linenos">5537</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="Parser-5538"><a href="#Parser-5538"><span class="linenos">5538</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="Parser-5539"><a href="#Parser-5539"><span class="linenos">5539</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="Parser-5540"><a href="#Parser-5540"><span class="linenos">5540</span></a> <span class="p">)</span>
+</span><span id="Parser-5541"><a href="#Parser-5541"><span class="linenos">5541</span></a> <span class="p">)</span>
+</span><span id="Parser-5542"><a href="#Parser-5542"><span class="linenos">5542</span></a> <span class="k">return</span> <span class="n">whens</span>
+</span><span id="Parser-5543"><a href="#Parser-5543"><span class="linenos">5543</span></a>
+</span><span id="Parser-5544"><a href="#Parser-5544"><span class="linenos">5544</span></a> <span class="k">def</span> <span class="nf">_parse_show</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="Parser-5545"><a href="#Parser-5545"><span class="linenos">5545</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
+</span><span id="Parser-5546"><a href="#Parser-5546"><span class="linenos">5546</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-5547"><a href="#Parser-5547"><span class="linenos">5547</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-5548"><a href="#Parser-5548"><span class="linenos">5548</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5549"><a href="#Parser-5549"><span class="linenos">5549</span></a>
+</span><span id="Parser-5550"><a href="#Parser-5550"><span class="linenos">5550</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="Parser-5551"><a href="#Parser-5551"><span class="linenos">5551</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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5552"><a href="#Parser-5552"><span class="linenos">5552</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="Parser-5553"><a href="#Parser-5553"><span class="linenos">5553</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5554"><a href="#Parser-5554"><span class="linenos">5554</span></a>
-</span><span id="Parser-5555"><a href="#Parser-5555"><span class="linenos">5555</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">SetItem</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="Parser-5556"><a href="#Parser-5556"><span class="linenos">5556</span></a>
-</span><span id="Parser-5557"><a href="#Parser-5557"><span class="linenos">5557</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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="Parser-5558"><a href="#Parser-5558"><span class="linenos">5558</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
-</span><span id="Parser-5559"><a href="#Parser-5559"><span class="linenos">5559</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-5560"><a href="#Parser-5560"><span class="linenos">5560</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
-</span><span id="Parser-5561"><a href="#Parser-5561"><span class="linenos">5561</span></a> <span class="p">)</span>
-</span><span id="Parser-5562"><a href="#Parser-5562"><span class="linenos">5562</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="Parser-5563"><a href="#Parser-5563"><span class="linenos">5563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="Parser-5564"><a href="#Parser-5564"><span class="linenos">5564</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="Parser-5565"><a href="#Parser-5565"><span class="linenos">5565</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
-</span><span id="Parser-5566"><a href="#Parser-5566"><span class="linenos">5566</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-5567"><a href="#Parser-5567"><span class="linenos">5567</span></a> <span class="p">)</span>
-</span><span id="Parser-5568"><a href="#Parser-5568"><span class="linenos">5568</span></a>
-</span><span id="Parser-5569"><a href="#Parser-5569"><span class="linenos">5569</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</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="Parser-5570"><a href="#Parser-5570"><span class="linenos">5570</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
-</span><span id="Parser-5571"><a href="#Parser-5571"><span class="linenos">5571</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-5572"><a href="#Parser-5572"><span class="linenos">5572</span></a>
-</span><span id="Parser-5573"><a href="#Parser-5573"><span class="linenos">5573</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</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">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5574"><a href="#Parser-5574"><span class="linenos">5574</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5575"><a href="#Parser-5575"><span class="linenos">5575</span></a> <span class="n">set_</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="Parser-5576"><a href="#Parser-5576"><span class="linenos">5576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <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_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
-</span><span id="Parser-5577"><a href="#Parser-5577"><span class="linenos">5577</span></a> <span class="p">)</span>
-</span><span id="Parser-5578"><a href="#Parser-5578"><span class="linenos">5578</span></a>
-</span><span id="Parser-5579"><a href="#Parser-5579"><span class="linenos">5579</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5580"><a href="#Parser-5580"><span class="linenos">5580</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5581"><a href="#Parser-5581"><span class="linenos">5581</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5582"><a href="#Parser-5582"><span class="linenos">5582</span></a>
-</span><span id="Parser-5583"><a href="#Parser-5583"><span class="linenos">5583</span></a> <span class="k">return</span> <span class="n">set_</span>
-</span><span id="Parser-5584"><a href="#Parser-5584"><span class="linenos">5584</span></a>
-</span><span id="Parser-5585"><a href="#Parser-5585"><span class="linenos">5585</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</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">Var</span><span class="p">]:</span>
-</span><span id="Parser-5586"><a href="#Parser-5586"><span class="linenos">5586</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
-</span><span id="Parser-5587"><a href="#Parser-5587"><span class="linenos">5587</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="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
-</span><span id="Parser-5588"><a href="#Parser-5588"><span class="linenos">5588</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
-</span><span id="Parser-5589"><a href="#Parser-5589"><span class="linenos">5589</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5590"><a href="#Parser-5590"><span class="linenos">5590</span></a>
-</span><span id="Parser-5591"><a href="#Parser-5591"><span class="linenos">5591</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5592"><a href="#Parser-5592"><span class="linenos">5592</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5593"><a href="#Parser-5593"><span class="linenos">5593</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5594"><a href="#Parser-5594"><span class="linenos">5594</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5595"><a href="#Parser-5595"><span class="linenos">5595</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-5596"><a href="#Parser-5596"><span class="linenos">5596</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
-</span><span id="Parser-5597"><a href="#Parser-5597"><span class="linenos">5597</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
-</span><span id="Parser-5598"><a href="#Parser-5598"><span class="linenos">5598</span></a>
-</span><span id="Parser-5599"><a href="#Parser-5599"><span class="linenos">5599</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
-</span><span id="Parser-5600"><a href="#Parser-5600"><span class="linenos">5600</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5601"><a href="#Parser-5601"><span class="linenos">5601</span></a>
-</span><span id="Parser-5602"><a href="#Parser-5602"><span class="linenos">5602</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-5603"><a href="#Parser-5603"><span class="linenos">5603</span></a> <span class="n">kind</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><span id="Parser-5604"><a href="#Parser-5604"><span class="linenos">5604</span></a>
-</span><span id="Parser-5605"><a href="#Parser-5605"><span class="linenos">5605</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-5606"><a href="#Parser-5606"><span class="linenos">5606</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-5607"><a href="#Parser-5607"><span class="linenos">5607</span></a> <span class="n">key</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><span id="Parser-5608"><a href="#Parser-5608"><span class="linenos">5608</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5609"><a href="#Parser-5609"><span class="linenos">5609</span></a>
-</span><span id="Parser-5610"><a href="#Parser-5610"><span class="linenos">5610</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5611"><a href="#Parser-5611"><span class="linenos">5611</span></a> <span class="k">break</span>
-</span><span id="Parser-5612"><a href="#Parser-5612"><span class="linenos">5612</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
-</span><span id="Parser-5613"><a href="#Parser-5613"><span class="linenos">5613</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">R_PAREN</span><span class="p">)</span>
+</span><span id="Parser-5555"><a href="#Parser-5555"><span class="linenos">5555</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;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</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;TRANSACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-5556"><a href="#Parser-5556"><span class="linenos">5556</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-5557"><a href="#Parser-5557"><span class="linenos">5557</span></a>
+</span><span id="Parser-5558"><a href="#Parser-5558"><span class="linenos">5558</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5559"><a href="#Parser-5559"><span class="linenos">5559</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
+</span><span id="Parser-5560"><a href="#Parser-5560"><span class="linenos">5560</span></a>
+</span><span id="Parser-5561"><a href="#Parser-5561"><span class="linenos">5561</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
+</span><span id="Parser-5562"><a href="#Parser-5562"><span class="linenos">5562</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5563"><a href="#Parser-5563"><span class="linenos">5563</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5564"><a href="#Parser-5564"><span class="linenos">5564</span></a>
+</span><span id="Parser-5565"><a href="#Parser-5565"><span class="linenos">5565</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5566"><a href="#Parser-5566"><span class="linenos">5566</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">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="Parser-5567"><a href="#Parser-5567"><span class="linenos">5567</span></a>
+</span><span id="Parser-5568"><a href="#Parser-5568"><span class="linenos">5568</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">SetItem</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="Parser-5569"><a href="#Parser-5569"><span class="linenos">5569</span></a>
+</span><span id="Parser-5570"><a href="#Parser-5570"><span class="linenos">5570</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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="Parser-5571"><a href="#Parser-5571"><span class="linenos">5571</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
+</span><span id="Parser-5572"><a href="#Parser-5572"><span class="linenos">5572</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-5573"><a href="#Parser-5573"><span class="linenos">5573</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
+</span><span id="Parser-5574"><a href="#Parser-5574"><span class="linenos">5574</span></a> <span class="p">)</span>
+</span><span id="Parser-5575"><a href="#Parser-5575"><span class="linenos">5575</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="Parser-5576"><a href="#Parser-5576"><span class="linenos">5576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="Parser-5577"><a href="#Parser-5577"><span class="linenos">5577</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="Parser-5578"><a href="#Parser-5578"><span class="linenos">5578</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
+</span><span id="Parser-5579"><a href="#Parser-5579"><span class="linenos">5579</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-5580"><a href="#Parser-5580"><span class="linenos">5580</span></a> <span class="p">)</span>
+</span><span id="Parser-5581"><a href="#Parser-5581"><span class="linenos">5581</span></a>
+</span><span id="Parser-5582"><a href="#Parser-5582"><span class="linenos">5582</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</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="Parser-5583"><a href="#Parser-5583"><span class="linenos">5583</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
+</span><span id="Parser-5584"><a href="#Parser-5584"><span class="linenos">5584</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-5585"><a href="#Parser-5585"><span class="linenos">5585</span></a>
+</span><span id="Parser-5586"><a href="#Parser-5586"><span class="linenos">5586</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</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">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5587"><a href="#Parser-5587"><span class="linenos">5587</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5588"><a href="#Parser-5588"><span class="linenos">5588</span></a> <span class="n">set_</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="Parser-5589"><a href="#Parser-5589"><span class="linenos">5589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <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_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
+</span><span id="Parser-5590"><a href="#Parser-5590"><span class="linenos">5590</span></a> <span class="p">)</span>
+</span><span id="Parser-5591"><a href="#Parser-5591"><span class="linenos">5591</span></a>
+</span><span id="Parser-5592"><a href="#Parser-5592"><span class="linenos">5592</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5593"><a href="#Parser-5593"><span class="linenos">5593</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5594"><a href="#Parser-5594"><span class="linenos">5594</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5595"><a href="#Parser-5595"><span class="linenos">5595</span></a>
+</span><span id="Parser-5596"><a href="#Parser-5596"><span class="linenos">5596</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="Parser-5597"><a href="#Parser-5597"><span class="linenos">5597</span></a>
+</span><span id="Parser-5598"><a href="#Parser-5598"><span class="linenos">5598</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</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">Var</span><span class="p">]:</span>
+</span><span id="Parser-5599"><a href="#Parser-5599"><span class="linenos">5599</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
+</span><span id="Parser-5600"><a href="#Parser-5600"><span class="linenos">5600</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="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
+</span><span id="Parser-5601"><a href="#Parser-5601"><span class="linenos">5601</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
+</span><span id="Parser-5602"><a href="#Parser-5602"><span class="linenos">5602</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5603"><a href="#Parser-5603"><span class="linenos">5603</span></a>
+</span><span id="Parser-5604"><a href="#Parser-5604"><span class="linenos">5604</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5605"><a href="#Parser-5605"><span class="linenos">5605</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5606"><a href="#Parser-5606"><span class="linenos">5606</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5607"><a href="#Parser-5607"><span class="linenos">5607</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5608"><a href="#Parser-5608"><span class="linenos">5608</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5609"><a href="#Parser-5609"><span class="linenos">5609</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
+</span><span id="Parser-5610"><a href="#Parser-5610"><span class="linenos">5610</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
+</span><span id="Parser-5611"><a href="#Parser-5611"><span class="linenos">5611</span></a>
+</span><span id="Parser-5612"><a href="#Parser-5612"><span class="linenos">5612</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
+</span><span id="Parser-5613"><a href="#Parser-5613"><span class="linenos">5613</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5614"><a href="#Parser-5614"><span class="linenos">5614</span></a>
-</span><span id="Parser-5615"><a href="#Parser-5615"><span class="linenos">5615</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-5616"><a href="#Parser-5616"><span class="linenos">5616</span></a>
-</span><span id="Parser-5617"><a href="#Parser-5617"><span class="linenos">5617</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="Parser-5618"><a href="#Parser-5618"><span class="linenos">5618</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
-</span><span id="Parser-5619"><a href="#Parser-5619"><span class="linenos">5619</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5620"><a href="#Parser-5620"><span class="linenos">5620</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-5621"><a href="#Parser-5621"><span class="linenos">5621</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
-</span><span id="Parser-5622"><a href="#Parser-5622"><span class="linenos">5622</span></a> <span class="p">)</span>
-</span><span id="Parser-5623"><a href="#Parser-5623"><span class="linenos">5623</span></a>
-</span><span id="Parser-5624"><a href="#Parser-5624"><span class="linenos">5624</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
-</span><span id="Parser-5625"><a href="#Parser-5625"><span class="linenos">5625</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-5626"><a href="#Parser-5626"><span class="linenos">5626</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
-</span><span id="Parser-5627"><a href="#Parser-5627"><span class="linenos">5627</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
-</span><span id="Parser-5628"><a href="#Parser-5628"><span class="linenos">5628</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5629"><a href="#Parser-5629"><span class="linenos">5629</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="Parser-5630"><a href="#Parser-5630"><span class="linenos">5630</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5631"><a href="#Parser-5631"><span class="linenos">5631</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5632"><a href="#Parser-5632"><span class="linenos">5632</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5633"><a href="#Parser-5633"><span class="linenos">5633</span></a> <span class="nb">min</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">0</span><span class="p">)</span>
-</span><span id="Parser-5634"><a href="#Parser-5634"><span class="linenos">5634</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-5635"><a href="#Parser-5635"><span class="linenos">5635</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">DictRange</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">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="Parser-5615"><a href="#Parser-5615"><span class="linenos">5615</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-5616"><a href="#Parser-5616"><span class="linenos">5616</span></a> <span class="n">kind</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><span id="Parser-5617"><a href="#Parser-5617"><span class="linenos">5617</span></a>
+</span><span id="Parser-5618"><a href="#Parser-5618"><span class="linenos">5618</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-5619"><a href="#Parser-5619"><span class="linenos">5619</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-5620"><a href="#Parser-5620"><span class="linenos">5620</span></a> <span class="n">key</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><span id="Parser-5621"><a href="#Parser-5621"><span class="linenos">5621</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5622"><a href="#Parser-5622"><span class="linenos">5622</span></a>
+</span><span id="Parser-5623"><a href="#Parser-5623"><span class="linenos">5623</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5624"><a href="#Parser-5624"><span class="linenos">5624</span></a> <span class="k">break</span>
+</span><span id="Parser-5625"><a href="#Parser-5625"><span class="linenos">5625</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
+</span><span id="Parser-5626"><a href="#Parser-5626"><span class="linenos">5626</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">R_PAREN</span><span class="p">)</span>
+</span><span id="Parser-5627"><a href="#Parser-5627"><span class="linenos">5627</span></a>
+</span><span id="Parser-5628"><a href="#Parser-5628"><span class="linenos">5628</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5629"><a href="#Parser-5629"><span class="linenos">5629</span></a>
+</span><span id="Parser-5630"><a href="#Parser-5630"><span class="linenos">5630</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="Parser-5631"><a href="#Parser-5631"><span class="linenos">5631</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
+</span><span id="Parser-5632"><a href="#Parser-5632"><span class="linenos">5632</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5633"><a href="#Parser-5633"><span class="linenos">5633</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-5634"><a href="#Parser-5634"><span class="linenos">5634</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
+</span><span id="Parser-5635"><a href="#Parser-5635"><span class="linenos">5635</span></a> <span class="p">)</span>
</span><span id="Parser-5636"><a href="#Parser-5636"><span class="linenos">5636</span></a>
-</span><span id="Parser-5637"><a href="#Parser-5637"><span class="linenos">5637</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
-</span><span id="Parser-5638"><a href="#Parser-5638"><span class="linenos">5638</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-5639"><a href="#Parser-5639"><span class="linenos">5639</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">Comprehension</span><span class="p">]:</span>
-</span><span id="Parser-5640"><a href="#Parser-5640"><span class="linenos">5640</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5641"><a href="#Parser-5641"><span class="linenos">5641</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5642"><a href="#Parser-5642"><span class="linenos">5642</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
-</span><span id="Parser-5643"><a href="#Parser-5643"><span class="linenos">5643</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-5644"><a href="#Parser-5644"><span class="linenos">5644</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5645"><a href="#Parser-5645"><span class="linenos">5645</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5646"><a href="#Parser-5646"><span class="linenos">5646</span></a> <span class="n">condition</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 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;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5647"><a href="#Parser-5647"><span class="linenos">5647</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="Parser-5648"><a href="#Parser-5648"><span class="linenos">5648</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
-</span><span id="Parser-5649"><a href="#Parser-5649"><span class="linenos">5649</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5650"><a href="#Parser-5650"><span class="linenos">5650</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Parser-5651"><a href="#Parser-5651"><span class="linenos">5651</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
-</span><span id="Parser-5652"><a href="#Parser-5652"><span class="linenos">5652</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="Parser-5653"><a href="#Parser-5653"><span class="linenos">5653</span></a> <span class="p">)</span>
-</span><span id="Parser-5654"><a href="#Parser-5654"><span class="linenos">5654</span></a>
-</span><span id="Parser-5655"><a href="#Parser-5655"><span class="linenos">5655</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</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">Heredoc</span><span class="p">]:</span>
-</span><span id="Parser-5656"><a href="#Parser-5656"><span class="linenos">5656</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">HEREDOC_STRING</span><span class="p">):</span>
-</span><span id="Parser-5657"><a href="#Parser-5657"><span class="linenos">5657</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">Heredoc</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-5658"><a href="#Parser-5658"><span class="linenos">5658</span></a>
-</span><span id="Parser-5659"><a href="#Parser-5659"><span class="linenos">5659</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;$&quot;</span><span class="p">):</span>
-</span><span id="Parser-5660"><a href="#Parser-5660"><span class="linenos">5660</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5661"><a href="#Parser-5661"><span class="linenos">5661</span></a>
-</span><span id="Parser-5662"><a href="#Parser-5662"><span class="linenos">5662</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="Parser-5663"><a href="#Parser-5663"><span class="linenos">5663</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5664"><a href="#Parser-5664"><span class="linenos">5664</span></a>
-</span><span id="Parser-5665"><a href="#Parser-5665"><span class="linenos">5665</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
-</span><span id="Parser-5666"><a href="#Parser-5666"><span class="linenos">5666</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5667"><a href="#Parser-5667"><span class="linenos">5667</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-5668"><a href="#Parser-5668"><span class="linenos">5668</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5669"><a href="#Parser-5669"><span class="linenos">5669</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;No closing $ found&quot;</span><span class="p">)</span>
-</span><span id="Parser-5670"><a href="#Parser-5670"><span class="linenos">5670</span></a>
-</span><span id="Parser-5671"><a href="#Parser-5671"><span class="linenos">5671</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
-</span><span id="Parser-5672"><a href="#Parser-5672"><span class="linenos">5672</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</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;$&quot;</span><span class="p">):</span>
-</span><span id="Parser-5673"><a href="#Parser-5673"><span class="linenos">5673</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="Parser-5674"><a href="#Parser-5674"><span class="linenos">5674</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
-</span><span id="Parser-5675"><a href="#Parser-5675"><span class="linenos">5675</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5676"><a href="#Parser-5676"><span class="linenos">5676</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;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="Parser-5637"><a href="#Parser-5637"><span class="linenos">5637</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
+</span><span id="Parser-5638"><a href="#Parser-5638"><span class="linenos">5638</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-5639"><a href="#Parser-5639"><span class="linenos">5639</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
+</span><span id="Parser-5640"><a href="#Parser-5640"><span class="linenos">5640</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
+</span><span id="Parser-5641"><a href="#Parser-5641"><span class="linenos">5641</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5642"><a href="#Parser-5642"><span class="linenos">5642</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="Parser-5643"><a href="#Parser-5643"><span class="linenos">5643</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5644"><a href="#Parser-5644"><span class="linenos">5644</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5645"><a href="#Parser-5645"><span class="linenos">5645</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5646"><a href="#Parser-5646"><span class="linenos">5646</span></a> <span class="nb">min</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">0</span><span class="p">)</span>
+</span><span id="Parser-5647"><a href="#Parser-5647"><span class="linenos">5647</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5648"><a href="#Parser-5648"><span class="linenos">5648</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">DictRange</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">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="Parser-5649"><a href="#Parser-5649"><span class="linenos">5649</span></a>
+</span><span id="Parser-5650"><a href="#Parser-5650"><span class="linenos">5650</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
+</span><span id="Parser-5651"><a href="#Parser-5651"><span class="linenos">5651</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-5652"><a href="#Parser-5652"><span class="linenos">5652</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">Comprehension</span><span class="p">]:</span>
+</span><span id="Parser-5653"><a href="#Parser-5653"><span class="linenos">5653</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5654"><a href="#Parser-5654"><span class="linenos">5654</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5655"><a href="#Parser-5655"><span class="linenos">5655</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
+</span><span id="Parser-5656"><a href="#Parser-5656"><span class="linenos">5656</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-5657"><a href="#Parser-5657"><span class="linenos">5657</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5658"><a href="#Parser-5658"><span class="linenos">5658</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5659"><a href="#Parser-5659"><span class="linenos">5659</span></a> <span class="n">condition</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 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;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5660"><a href="#Parser-5660"><span class="linenos">5660</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="Parser-5661"><a href="#Parser-5661"><span class="linenos">5661</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
+</span><span id="Parser-5662"><a href="#Parser-5662"><span class="linenos">5662</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5663"><a href="#Parser-5663"><span class="linenos">5663</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-5664"><a href="#Parser-5664"><span class="linenos">5664</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
+</span><span id="Parser-5665"><a href="#Parser-5665"><span class="linenos">5665</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="Parser-5666"><a href="#Parser-5666"><span class="linenos">5666</span></a> <span class="p">)</span>
+</span><span id="Parser-5667"><a href="#Parser-5667"><span class="linenos">5667</span></a>
+</span><span id="Parser-5668"><a href="#Parser-5668"><span class="linenos">5668</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</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">Heredoc</span><span class="p">]:</span>
+</span><span id="Parser-5669"><a href="#Parser-5669"><span class="linenos">5669</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">HEREDOC_STRING</span><span class="p">):</span>
+</span><span id="Parser-5670"><a href="#Parser-5670"><span class="linenos">5670</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">Heredoc</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5671"><a href="#Parser-5671"><span class="linenos">5671</span></a>
+</span><span id="Parser-5672"><a href="#Parser-5672"><span class="linenos">5672</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;$&quot;</span><span class="p">):</span>
+</span><span id="Parser-5673"><a href="#Parser-5673"><span class="linenos">5673</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5674"><a href="#Parser-5674"><span class="linenos">5674</span></a>
+</span><span id="Parser-5675"><a href="#Parser-5675"><span class="linenos">5675</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="Parser-5676"><a href="#Parser-5676"><span class="linenos">5676</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5677"><a href="#Parser-5677"><span class="linenos">5677</span></a>
-</span><span id="Parser-5678"><a href="#Parser-5678"><span class="linenos">5678</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="Parser-5679"><a href="#Parser-5679"><span class="linenos">5679</span></a>
-</span><span id="Parser-5680"><a href="#Parser-5680"><span class="linenos">5680</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5681"><a href="#Parser-5681"><span class="linenos">5681</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="o">*</span><span class="n">tags</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="Parser-5682"><a href="#Parser-5682"><span class="linenos">5682</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5683"><a href="#Parser-5683"><span class="linenos">5683</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
-</span><span id="Parser-5684"><a href="#Parser-5684"><span class="linenos">5684</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">Heredoc</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">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
-</span><span id="Parser-5685"><a href="#Parser-5685"><span class="linenos">5685</span></a>
-</span><span id="Parser-5686"><a href="#Parser-5686"><span class="linenos">5686</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5687"><a href="#Parser-5687"><span class="linenos">5687</span></a>
-</span><span id="Parser-5688"><a href="#Parser-5688"><span class="linenos">5688</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
-</span><span id="Parser-5689"><a href="#Parser-5689"><span class="linenos">5689</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5678"><a href="#Parser-5678"><span class="linenos">5678</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
+</span><span id="Parser-5679"><a href="#Parser-5679"><span class="linenos">5679</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5680"><a href="#Parser-5680"><span class="linenos">5680</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-5681"><a href="#Parser-5681"><span class="linenos">5681</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5682"><a href="#Parser-5682"><span class="linenos">5682</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;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="Parser-5683"><a href="#Parser-5683"><span class="linenos">5683</span></a>
+</span><span id="Parser-5684"><a href="#Parser-5684"><span class="linenos">5684</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
+</span><span id="Parser-5685"><a href="#Parser-5685"><span class="linenos">5685</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</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;$&quot;</span><span class="p">):</span>
+</span><span id="Parser-5686"><a href="#Parser-5686"><span class="linenos">5686</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="Parser-5687"><a href="#Parser-5687"><span class="linenos">5687</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
+</span><span id="Parser-5688"><a href="#Parser-5688"><span class="linenos">5688</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5689"><a href="#Parser-5689"><span class="linenos">5689</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;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="Parser-5690"><a href="#Parser-5690"><span class="linenos">5690</span></a>
-</span><span id="Parser-5691"><a href="#Parser-5691"><span class="linenos">5691</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="Parser-5692"><a href="#Parser-5692"><span class="linenos">5692</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="Parser-5693"><a href="#Parser-5693"><span class="linenos">5693</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">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
-</span><span id="Parser-5694"><a href="#Parser-5694"><span class="linenos">5694</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5695"><a href="#Parser-5695"><span class="linenos">5695</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5696"><a href="#Parser-5696"><span class="linenos">5696</span></a>
-</span><span id="Parser-5697"><a href="#Parser-5697"><span class="linenos">5697</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5698"><a href="#Parser-5698"><span class="linenos">5698</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5699"><a href="#Parser-5699"><span class="linenos">5699</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-5700"><a href="#Parser-5700"><span class="linenos">5700</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="Parser-5701"><a href="#Parser-5701"><span class="linenos">5701</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-5702"><a href="#Parser-5702"><span class="linenos">5702</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Parser-5703"><a href="#Parser-5703"><span class="linenos">5703</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
-</span><span id="Parser-5704"><a href="#Parser-5704"><span class="linenos">5704</span></a>
-</span><span id="Parser-5705"><a href="#Parser-5705"><span class="linenos">5705</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5706"><a href="#Parser-5706"><span class="linenos">5706</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
-</span><span id="Parser-5707"><a href="#Parser-5707"><span class="linenos">5707</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="Parser-5708"><a href="#Parser-5708"><span class="linenos">5708</span></a> <span class="k">break</span>
+</span><span id="Parser-5691"><a href="#Parser-5691"><span class="linenos">5691</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="Parser-5692"><a href="#Parser-5692"><span class="linenos">5692</span></a>
+</span><span id="Parser-5693"><a href="#Parser-5693"><span class="linenos">5693</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5694"><a href="#Parser-5694"><span class="linenos">5694</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="o">*</span><span class="n">tags</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="Parser-5695"><a href="#Parser-5695"><span class="linenos">5695</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5696"><a href="#Parser-5696"><span class="linenos">5696</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
+</span><span id="Parser-5697"><a href="#Parser-5697"><span class="linenos">5697</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">Heredoc</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">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
+</span><span id="Parser-5698"><a href="#Parser-5698"><span class="linenos">5698</span></a>
+</span><span id="Parser-5699"><a href="#Parser-5699"><span class="linenos">5699</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5700"><a href="#Parser-5700"><span class="linenos">5700</span></a>
+</span><span id="Parser-5701"><a href="#Parser-5701"><span class="linenos">5701</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
+</span><span id="Parser-5702"><a href="#Parser-5702"><span class="linenos">5702</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5703"><a href="#Parser-5703"><span class="linenos">5703</span></a>
+</span><span id="Parser-5704"><a href="#Parser-5704"><span class="linenos">5704</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="Parser-5705"><a href="#Parser-5705"><span class="linenos">5705</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="Parser-5706"><a href="#Parser-5706"><span class="linenos">5706</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">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
+</span><span id="Parser-5707"><a href="#Parser-5707"><span class="linenos">5707</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5708"><a href="#Parser-5708"><span class="linenos">5708</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5709"><a href="#Parser-5709"><span class="linenos">5709</span></a>
-</span><span id="Parser-5710"><a href="#Parser-5710"><span class="linenos">5710</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="Parser-5711"><a href="#Parser-5711"><span class="linenos">5711</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
-</span><span id="Parser-5712"><a href="#Parser-5712"><span class="linenos">5712</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="Parser-5713"><a href="#Parser-5713"><span class="linenos">5713</span></a>
-</span><span id="Parser-5714"><a href="#Parser-5714"><span class="linenos">5714</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5715"><a href="#Parser-5715"><span class="linenos">5715</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5716"><a href="#Parser-5716"><span class="linenos">5716</span></a>
-</span><span id="Parser-5717"><a href="#Parser-5717"><span class="linenos">5717</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-5718"><a href="#Parser-5718"><span class="linenos">5718</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5719"><a href="#Parser-5719"><span class="linenos">5719</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5720"><a href="#Parser-5720"><span class="linenos">5720</span></a>
-</span><span id="Parser-5721"><a href="#Parser-5721"><span class="linenos">5721</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="Parser-5722"><a href="#Parser-5722"><span class="linenos">5722</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5723"><a href="#Parser-5723"><span class="linenos">5723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5724"><a href="#Parser-5724"><span class="linenos">5724</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Parser-5725"><a href="#Parser-5725"><span class="linenos">5725</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5710"><a href="#Parser-5710"><span class="linenos">5710</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5711"><a href="#Parser-5711"><span class="linenos">5711</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5712"><a href="#Parser-5712"><span class="linenos">5712</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-5713"><a href="#Parser-5713"><span class="linenos">5713</span></a> <span class="c1"># The current token might be multiple words</span>
+</span><span id="Parser-5714"><a href="#Parser-5714"><span class="linenos">5714</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-5715"><a href="#Parser-5715"><span class="linenos">5715</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Parser-5716"><a href="#Parser-5716"><span class="linenos">5716</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
+</span><span id="Parser-5717"><a href="#Parser-5717"><span class="linenos">5717</span></a>
+</span><span id="Parser-5718"><a href="#Parser-5718"><span class="linenos">5718</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5719"><a href="#Parser-5719"><span class="linenos">5719</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
+</span><span id="Parser-5720"><a href="#Parser-5720"><span class="linenos">5720</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="Parser-5721"><a href="#Parser-5721"><span class="linenos">5721</span></a> <span class="k">break</span>
+</span><span id="Parser-5722"><a href="#Parser-5722"><span class="linenos">5722</span></a>
+</span><span id="Parser-5723"><a href="#Parser-5723"><span class="linenos">5723</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="Parser-5724"><a href="#Parser-5724"><span class="linenos">5724</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
+</span><span id="Parser-5725"><a href="#Parser-5725"><span class="linenos">5725</span></a> <span class="k">return</span> <span class="n">subparser</span>
</span><span id="Parser-5726"><a href="#Parser-5726"><span class="linenos">5726</span></a>
-</span><span id="Parser-5727"><a href="#Parser-5727"><span class="linenos">5727</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5728"><a href="#Parser-5728"><span class="linenos">5728</span></a>
-</span><span id="Parser-5729"><a href="#Parser-5729"><span class="linenos">5729</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5730"><a href="#Parser-5730"><span class="linenos">5730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5731"><a href="#Parser-5731"><span class="linenos">5731</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5732"><a href="#Parser-5732"><span class="linenos">5732</span></a>
-</span><span id="Parser-5733"><a href="#Parser-5733"><span class="linenos">5733</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
-</span><span id="Parser-5734"><a href="#Parser-5734"><span class="linenos">5734</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5735"><a href="#Parser-5735"><span class="linenos">5735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5736"><a href="#Parser-5736"><span class="linenos">5736</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5737"><a href="#Parser-5737"><span class="linenos">5737</span></a>
-</span><span id="Parser-5738"><a href="#Parser-5738"><span class="linenos">5738</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5727"><a href="#Parser-5727"><span class="linenos">5727</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5728"><a href="#Parser-5728"><span class="linenos">5728</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5729"><a href="#Parser-5729"><span class="linenos">5729</span></a>
+</span><span id="Parser-5730"><a href="#Parser-5730"><span class="linenos">5730</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-5731"><a href="#Parser-5731"><span class="linenos">5731</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5732"><a href="#Parser-5732"><span class="linenos">5732</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5733"><a href="#Parser-5733"><span class="linenos">5733</span></a>
+</span><span id="Parser-5734"><a href="#Parser-5734"><span class="linenos">5734</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="Parser-5735"><a href="#Parser-5735"><span class="linenos">5735</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5736"><a href="#Parser-5736"><span class="linenos">5736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5737"><a href="#Parser-5737"><span class="linenos">5737</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-5738"><a href="#Parser-5738"><span class="linenos">5738</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-5739"><a href="#Parser-5739"><span class="linenos">5739</span></a>
-</span><span id="Parser-5740"><a href="#Parser-5740"><span class="linenos">5740</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5741"><a href="#Parser-5741"><span class="linenos">5741</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="Parser-5742"><a href="#Parser-5742"><span class="linenos">5742</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5743"><a href="#Parser-5743"><span class="linenos">5743</span></a>
-</span><span id="Parser-5744"><a href="#Parser-5744"><span class="linenos">5744</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
-</span><span id="Parser-5745"><a href="#Parser-5745"><span class="linenos">5745</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5746"><a href="#Parser-5746"><span class="linenos">5746</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-5747"><a href="#Parser-5747"><span class="linenos">5747</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5748"><a href="#Parser-5748"><span class="linenos">5748</span></a>
-</span><span id="Parser-5749"><a href="#Parser-5749"><span class="linenos">5749</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5740"><a href="#Parser-5740"><span class="linenos">5740</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5741"><a href="#Parser-5741"><span class="linenos">5741</span></a>
+</span><span id="Parser-5742"><a href="#Parser-5742"><span class="linenos">5742</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5743"><a href="#Parser-5743"><span class="linenos">5743</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5744"><a href="#Parser-5744"><span class="linenos">5744</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5745"><a href="#Parser-5745"><span class="linenos">5745</span></a>
+</span><span id="Parser-5746"><a href="#Parser-5746"><span class="linenos">5746</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
+</span><span id="Parser-5747"><a href="#Parser-5747"><span class="linenos">5747</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5748"><a href="#Parser-5748"><span class="linenos">5748</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5749"><a href="#Parser-5749"><span class="linenos">5749</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-5750"><a href="#Parser-5750"><span class="linenos">5750</span></a>
-</span><span id="Parser-5751"><a href="#Parser-5751"><span class="linenos">5751</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5752"><a href="#Parser-5752"><span class="linenos">5752</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="Parser-5753"><a href="#Parser-5753"><span class="linenos">5753</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;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="Parser-5754"><a href="#Parser-5754"><span class="linenos">5754</span></a>
-</span><span id="Parser-5755"><a href="#Parser-5755"><span class="linenos">5755</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5756"><a href="#Parser-5756"><span class="linenos">5756</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="Parser-5757"><a href="#Parser-5757"><span class="linenos">5757</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;Expecting )&quot;</span><span class="p">)</span>
-</span><span id="Parser-5758"><a href="#Parser-5758"><span class="linenos">5758</span></a>
-</span><span id="Parser-5759"><a href="#Parser-5759"><span class="linenos">5759</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5760"><a href="#Parser-5760"><span class="linenos">5760</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="Parser-5761"><a href="#Parser-5761"><span class="linenos">5761</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5762"><a href="#Parser-5762"><span class="linenos">5762</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5763"><a href="#Parser-5763"><span class="linenos">5763</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5764"><a href="#Parser-5764"><span class="linenos">5764</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5765"><a href="#Parser-5765"><span class="linenos">5765</span></a>
-</span><span id="Parser-5766"><a href="#Parser-5766"><span class="linenos">5766</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5767"><a href="#Parser-5767"><span class="linenos">5767</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5768"><a href="#Parser-5768"><span class="linenos">5768</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="Parser-5769"><a href="#Parser-5769"><span class="linenos">5769</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="Parser-5770"><a href="#Parser-5770"><span class="linenos">5770</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5771"><a href="#Parser-5771"><span class="linenos">5771</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5772"><a href="#Parser-5772"><span class="linenos">5772</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5773"><a href="#Parser-5773"><span class="linenos">5773</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5774"><a href="#Parser-5774"><span class="linenos">5774</span></a>
-</span><span id="Parser-5775"><a href="#Parser-5775"><span class="linenos">5775</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5776"><a href="#Parser-5776"><span class="linenos">5776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5777"><a href="#Parser-5777"><span class="linenos">5777</span></a>
-</span><span id="Parser-5778"><a href="#Parser-5778"><span class="linenos">5778</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5779"><a href="#Parser-5779"><span class="linenos">5779</span></a>
-</span><span id="Parser-5780"><a href="#Parser-5780"><span class="linenos">5780</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-5781"><a href="#Parser-5781"><span class="linenos">5781</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</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">Expression</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="Parser-5782"><a href="#Parser-5782"><span class="linenos">5782</span></a> <span class="o">...</span>
-</span><span id="Parser-5783"><a href="#Parser-5783"><span class="linenos">5783</span></a>
-</span><span id="Parser-5784"><a href="#Parser-5784"><span class="linenos">5784</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-5785"><a href="#Parser-5785"><span class="linenos">5785</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
-</span><span id="Parser-5786"><a href="#Parser-5786"><span class="linenos">5786</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-5787"><a href="#Parser-5787"><span class="linenos">5787</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="Parser-5788"><a href="#Parser-5788"><span class="linenos">5788</span></a> <span class="o">...</span>
-</span><span id="Parser-5789"><a href="#Parser-5789"><span class="linenos">5789</span></a>
-</span><span id="Parser-5790"><a href="#Parser-5790"><span class="linenos">5790</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
-</span><span id="Parser-5791"><a href="#Parser-5791"><span class="linenos">5791</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Parser-5792"><a href="#Parser-5792"><span class="linenos">5792</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="Parser-5793"><a href="#Parser-5793"><span class="linenos">5793</span></a> <span class="k">elif</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">Column</span><span class="p">):</span>
-</span><span id="Parser-5794"><a href="#Parser-5794"><span class="linenos">5794</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="Parser-5795"><a href="#Parser-5795"><span class="linenos">5795</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</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="Parser-5796"><a href="#Parser-5796"><span class="linenos">5796</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-5797"><a href="#Parser-5797"><span class="linenos">5797</span></a> <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">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-5798"><a href="#Parser-5798"><span class="linenos">5798</span></a> <span class="p">)</span>
-</span><span id="Parser-5799"><a href="#Parser-5799"><span class="linenos">5799</span></a>
-</span><span id="Parser-5800"><a href="#Parser-5800"><span class="linenos">5800</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5801"><a href="#Parser-5801"><span class="linenos">5801</span></a>
-</span><span id="Parser-5802"><a href="#Parser-5802"><span class="linenos">5802</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
-</span><span id="Parser-5803"><a href="#Parser-5803"><span class="linenos">5803</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
-</span><span id="Parser-5804"><a href="#Parser-5804"><span class="linenos">5804</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="Parser-5805"><a href="#Parser-5805"><span class="linenos">5805</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="Parser-5806"><a href="#Parser-5806"><span class="linenos">5806</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="Parser-5807"><a href="#Parser-5807"><span class="linenos">5807</span></a>
-</span><span id="Parser-5808"><a href="#Parser-5808"><span class="linenos">5808</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="Parser-5809"><a href="#Parser-5809"><span class="linenos">5809</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
-</span><span id="Parser-5810"><a href="#Parser-5810"><span class="linenos">5810</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-5811"><a href="#Parser-5811"><span class="linenos">5811</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Parser-5751"><a href="#Parser-5751"><span class="linenos">5751</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5752"><a href="#Parser-5752"><span class="linenos">5752</span></a>
+</span><span id="Parser-5753"><a href="#Parser-5753"><span class="linenos">5753</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5754"><a href="#Parser-5754"><span class="linenos">5754</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="Parser-5755"><a href="#Parser-5755"><span class="linenos">5755</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5756"><a href="#Parser-5756"><span class="linenos">5756</span></a>
+</span><span id="Parser-5757"><a href="#Parser-5757"><span class="linenos">5757</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
+</span><span id="Parser-5758"><a href="#Parser-5758"><span class="linenos">5758</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5759"><a href="#Parser-5759"><span class="linenos">5759</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-5760"><a href="#Parser-5760"><span class="linenos">5760</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5761"><a href="#Parser-5761"><span class="linenos">5761</span></a>
+</span><span id="Parser-5762"><a href="#Parser-5762"><span class="linenos">5762</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5763"><a href="#Parser-5763"><span class="linenos">5763</span></a>
+</span><span id="Parser-5764"><a href="#Parser-5764"><span class="linenos">5764</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5765"><a href="#Parser-5765"><span class="linenos">5765</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="Parser-5766"><a href="#Parser-5766"><span class="linenos">5766</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;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="Parser-5767"><a href="#Parser-5767"><span class="linenos">5767</span></a>
+</span><span id="Parser-5768"><a href="#Parser-5768"><span class="linenos">5768</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5769"><a href="#Parser-5769"><span class="linenos">5769</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="Parser-5770"><a href="#Parser-5770"><span class="linenos">5770</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;Expecting )&quot;</span><span class="p">)</span>
+</span><span id="Parser-5771"><a href="#Parser-5771"><span class="linenos">5771</span></a>
+</span><span id="Parser-5772"><a href="#Parser-5772"><span class="linenos">5772</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5773"><a href="#Parser-5773"><span class="linenos">5773</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="Parser-5774"><a href="#Parser-5774"><span class="linenos">5774</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5775"><a href="#Parser-5775"><span class="linenos">5775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5776"><a href="#Parser-5776"><span class="linenos">5776</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5777"><a href="#Parser-5777"><span class="linenos">5777</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5778"><a href="#Parser-5778"><span class="linenos">5778</span></a>
+</span><span id="Parser-5779"><a href="#Parser-5779"><span class="linenos">5779</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5780"><a href="#Parser-5780"><span class="linenos">5780</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5781"><a href="#Parser-5781"><span class="linenos">5781</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="Parser-5782"><a href="#Parser-5782"><span class="linenos">5782</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="Parser-5783"><a href="#Parser-5783"><span class="linenos">5783</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5784"><a href="#Parser-5784"><span class="linenos">5784</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5785"><a href="#Parser-5785"><span class="linenos">5785</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5786"><a href="#Parser-5786"><span class="linenos">5786</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5787"><a href="#Parser-5787"><span class="linenos">5787</span></a>
+</span><span id="Parser-5788"><a href="#Parser-5788"><span class="linenos">5788</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5789"><a href="#Parser-5789"><span class="linenos">5789</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5790"><a href="#Parser-5790"><span class="linenos">5790</span></a>
+</span><span id="Parser-5791"><a href="#Parser-5791"><span class="linenos">5791</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5792"><a href="#Parser-5792"><span class="linenos">5792</span></a>
+</span><span id="Parser-5793"><a href="#Parser-5793"><span class="linenos">5793</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-5794"><a href="#Parser-5794"><span class="linenos">5794</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</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">Expression</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="Parser-5795"><a href="#Parser-5795"><span class="linenos">5795</span></a> <span class="o">...</span>
+</span><span id="Parser-5796"><a href="#Parser-5796"><span class="linenos">5796</span></a>
+</span><span id="Parser-5797"><a href="#Parser-5797"><span class="linenos">5797</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-5798"><a href="#Parser-5798"><span class="linenos">5798</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
+</span><span id="Parser-5799"><a href="#Parser-5799"><span class="linenos">5799</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-5800"><a href="#Parser-5800"><span class="linenos">5800</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="Parser-5801"><a href="#Parser-5801"><span class="linenos">5801</span></a> <span class="o">...</span>
+</span><span id="Parser-5802"><a href="#Parser-5802"><span class="linenos">5802</span></a>
+</span><span id="Parser-5803"><a href="#Parser-5803"><span class="linenos">5803</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
+</span><span id="Parser-5804"><a href="#Parser-5804"><span class="linenos">5804</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Parser-5805"><a href="#Parser-5805"><span class="linenos">5805</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="Parser-5806"><a href="#Parser-5806"><span class="linenos">5806</span></a> <span class="k">elif</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">Column</span><span class="p">):</span>
+</span><span id="Parser-5807"><a href="#Parser-5807"><span class="linenos">5807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="Parser-5808"><a href="#Parser-5808"><span class="linenos">5808</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</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="Parser-5809"><a href="#Parser-5809"><span class="linenos">5809</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-5810"><a href="#Parser-5810"><span class="linenos">5810</span></a> <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">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-5811"><a href="#Parser-5811"><span class="linenos">5811</span></a> <span class="p">)</span>
</span><span id="Parser-5812"><a href="#Parser-5812"><span class="linenos">5812</span></a>
-</span><span id="Parser-5813"><a href="#Parser-5813"><span class="linenos">5813</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Parser-5814"><a href="#Parser-5814"><span class="linenos">5814</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Parser-5815"><a href="#Parser-5815"><span class="linenos">5815</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="Parser-5816"><a href="#Parser-5816"><span class="linenos">5816</span></a> <span class="k">break</span>
-</span><span id="Parser-5817"><a href="#Parser-5817"><span class="linenos">5817</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="Parser-5818"><a href="#Parser-5818"><span class="linenos">5818</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5819"><a href="#Parser-5819"><span class="linenos">5819</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="Parser-5820"><a href="#Parser-5820"><span class="linenos">5820</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="Parser-5821"><a href="#Parser-5821"><span class="linenos">5821</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5822"><a href="#Parser-5822"><span class="linenos">5822</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="Parser-5823"><a href="#Parser-5823"><span class="linenos">5823</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="Parser-5813"><a href="#Parser-5813"><span class="linenos">5813</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5814"><a href="#Parser-5814"><span class="linenos">5814</span></a>
+</span><span id="Parser-5815"><a href="#Parser-5815"><span class="linenos">5815</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
+</span><span id="Parser-5816"><a href="#Parser-5816"><span class="linenos">5816</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span><span id="Parser-5817"><a href="#Parser-5817"><span class="linenos">5817</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="Parser-5818"><a href="#Parser-5818"><span class="linenos">5818</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="Parser-5819"><a href="#Parser-5819"><span class="linenos">5819</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="Parser-5820"><a href="#Parser-5820"><span class="linenos">5820</span></a>
+</span><span id="Parser-5821"><a href="#Parser-5821"><span class="linenos">5821</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="Parser-5822"><a href="#Parser-5822"><span class="linenos">5822</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
+</span><span id="Parser-5823"><a href="#Parser-5823"><span class="linenos">5823</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-5824"><a href="#Parser-5824"><span class="linenos">5824</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Parser-5825"><a href="#Parser-5825"><span class="linenos">5825</span></a>
+</span><span id="Parser-5826"><a href="#Parser-5826"><span class="linenos">5826</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Parser-5827"><a href="#Parser-5827"><span class="linenos">5827</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Parser-5828"><a href="#Parser-5828"><span class="linenos">5828</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="Parser-5829"><a href="#Parser-5829"><span class="linenos">5829</span></a> <span class="k">break</span>
+</span><span id="Parser-5830"><a href="#Parser-5830"><span class="linenos">5830</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Parser-5831"><a href="#Parser-5831"><span class="linenos">5831</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5832"><a href="#Parser-5832"><span class="linenos">5832</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="Parser-5833"><a href="#Parser-5833"><span class="linenos">5833</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="Parser-5834"><a href="#Parser-5834"><span class="linenos">5834</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5835"><a href="#Parser-5835"><span class="linenos">5835</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="Parser-5836"><a href="#Parser-5836"><span class="linenos">5836</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -12188,7 +12214,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">NESTED_TYPE_TOKENS</span> =
<input id="Parser.NESTED_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;}</span>
</div>
@@ -12200,7 +12226,7 @@ Default: 3</li>
<div id="Parser.ENUM_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ENUM_TYPE_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;}</span>
</div>
@@ -12213,7 +12239,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">AGGREGATE_TYPE_TOKENS</span> =
<input id="Parser.AGGREGATE_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.AGGREGATE_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.AGGREGATE_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;}</span>
</div>
@@ -12226,7 +12252,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TYPE_TOKENS</span> =
<input id="Parser.TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12265,7 +12291,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RESERVED_TOKENS</span> =
<input id="Parser.RESERVED_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.RESERVED_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STAR: &#39;STAR&#39;&gt;, &lt;TokenType.L_BRACKET: &#39;L_BRACKET&#39;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;, &lt;TokenType.GT: &#39;GT&#39;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;, &lt;TokenType.R_BRACKET: &#39;R_BRACKET&#39;&gt;, &lt;TokenType.QUOTE: &#39;QUOTE&#39;&gt;, &lt;TokenType.L_BRACE: &#39;L_BRACE&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.AMP: &#39;AMP&#39;&gt;, &lt;TokenType.DOT: &#39;DOT&#39;&gt;, &lt;TokenType.BACKSLASH: &#39;BACKSLASH&#39;&gt;, &lt;TokenType.R_BRACE: &#39;R_BRACE&#39;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.SLASH: &#39;SLASH&#39;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;, &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.HASH: &#39;HASH&#39;&gt;, &lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.RESERVED_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.L_BRACE: &#39;L_BRACE&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;, &lt;TokenType.R_BRACKET: &#39;R_BRACKET&#39;&gt;, &lt;TokenType.GT: &#39;GT&#39;&gt;, &lt;TokenType.L_BRACKET: &#39;L_BRACKET&#39;&gt;, &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;, &lt;TokenType.HASH: &#39;HASH&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;, &lt;TokenType.AMP: &#39;AMP&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.DOT: &#39;DOT&#39;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;, &lt;TokenType.SLASH: &#39;SLASH&#39;&gt;, &lt;TokenType.STAR: &#39;STAR&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;, &lt;TokenType.R_BRACE: &#39;R_BRACE&#39;&gt;, &lt;TokenType.BACKSLASH: &#39;BACKSLASH&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;, &lt;TokenType.QUOTE: &#39;QUOTE&#39;&gt;}</span>
</div>
@@ -12278,7 +12304,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">DB_CREATABLES</span> =
<input id="Parser.DB_CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.DB_CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.DB_CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;}</span>
</div>
@@ -12291,7 +12317,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CREATABLES</span> =
<input id="Parser.CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;}</span>
</div>
@@ -12304,7 +12330,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ID_VAR_TOKENS</span> =
<input id="Parser.ID_VAR_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12317,7 +12343,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">INTERVAL_VARS</span> =
<input id="Parser.INTERVAL_VARS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.INTERVAL_VARS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.INTERVAL_VARS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12330,7 +12356,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12343,7 +12369,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">COMMENT_TABLE_ALIAS_TOKENS</span> =
<input id="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12356,7 +12382,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">UPDATE_ALIAS_TOKENS</span> =
<input id="Parser.UPDATE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.UPDATE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.UPDATE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12368,7 +12394,7 @@ Default: 3</li>
<div id="Parser.TRIM_TYPES" class="classattr">
<div class="attr variable">
<span class="name">TRIM_TYPES</span> =
-<span class="default_value">{&#39;TRAILING&#39;, &#39;LEADING&#39;, &#39;BOTH&#39;}</span>
+<span class="default_value">{&#39;BOTH&#39;, &#39;LEADING&#39;, &#39;TRAILING&#39;}</span>
</div>
@@ -12381,7 +12407,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12496,7 +12522,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIMESTAMPS</span> =
<input id="Parser.TIMESTAMPS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;}</span>
</div>
@@ -12508,7 +12534,7 @@ Default: 3</li>
<div id="Parser.SET_OPERATIONS" class="classattr">
<div class="attr variable">
<span class="name">SET_OPERATIONS</span> =
-<span class="default_value">{&lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;}</span>
</div>
@@ -12532,7 +12558,7 @@ Default: 3</li>
<div id="Parser.JOIN_SIDES" class="classattr">
<div class="attr variable">
<span class="name">JOIN_SIDES</span> =
-<span class="default_value">{&lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;}</span>
</div>
@@ -12545,7 +12571,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">JOIN_KINDS</span> =
<input id="Parser.JOIN_KINDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;}</span>
</div>
@@ -12712,7 +12738,7 @@ Default: 3</li>
<div id="Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="classattr">
<div class="attr variable">
<span class="name">SCHEMA_UNNAMED_CONSTRAINTS</span> =
-<span class="default_value">{&#39;FOREIGN KEY&#39;, &#39;PERIOD&#39;, &#39;PRIMARY KEY&#39;, &#39;UNIQUE&#39;, &#39;LIKE&#39;, &#39;CHECK&#39;}</span>
+<span class="default_value">{&#39;UNIQUE&#39;, &#39;LIKE&#39;, &#39;PRIMARY KEY&#39;, &#39;PERIOD&#39;, &#39;FOREIGN KEY&#39;, &#39;CHECK&#39;}</span>
</div>
@@ -12737,7 +12763,7 @@ Default: 3</li>
<div id="Parser.INVALID_FUNC_NAME_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">INVALID_FUNC_NAME_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.STRING: &#39;STRING&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.STRING: &#39;STRING&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;}</span>
</div>
@@ -12837,7 +12863,7 @@ Default: 3</li>
<div id="Parser.DDL_SELECT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">DDL_SELECT_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.WITH: &#39;WITH&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.WITH: &#39;WITH&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;}</span>
</div>
@@ -12849,7 +12875,7 @@ Default: 3</li>
<div id="Parser.PRE_VOLATILE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">PRE_VOLATILE_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;}</span>
</div>
@@ -12861,7 +12887,7 @@ Default: 3</li>
<div id="Parser.TRANSACTION_KIND" class="classattr">
<div class="attr variable">
<span class="name">TRANSACTION_KIND</span> =
-<span class="default_value">{&#39;EXCLUSIVE&#39;, &#39;DEFERRED&#39;, &#39;IMMEDIATE&#39;}</span>
+<span class="default_value">{&#39;IMMEDIATE&#39;, &#39;EXCLUSIVE&#39;, &#39;DEFERRED&#39;}</span>
</div>
@@ -12874,7 +12900,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TRANSACTION_CHARACTERISTICS</span> =
<input id="Parser.TRANSACTION_CHARACTERISTICS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TRANSACTION_CHARACTERISTICS-view-value"></label><span class="default_value">{&#39;READ WRITE&#39;, &#39;ISOLATION LEVEL REPEATABLE READ&#39;, &#39;READ ONLY&#39;, &#39;ISOLATION LEVEL READ UNCOMMITTED&#39;, &#39;ISOLATION LEVEL SERIALIZABLE&#39;, &#39;ISOLATION LEVEL READ COMMITTED&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TRANSACTION_CHARACTERISTICS-view-value"></label><span class="default_value">{&#39;ISOLATION LEVEL SERIALIZABLE&#39;, &#39;ISOLATION LEVEL READ COMMITTED&#39;, &#39;ISOLATION LEVEL REPEATABLE READ&#39;, &#39;READ ONLY&#39;, &#39;READ WRITE&#39;, &#39;ISOLATION LEVEL READ UNCOMMITTED&#39;}</span>
</div>
@@ -12886,7 +12912,7 @@ Default: 3</li>
<div id="Parser.INSERT_ALTERNATIVES" class="classattr">
<div class="attr variable">
<span class="name">INSERT_ALTERNATIVES</span> =
-<span class="default_value">{&#39;FAIL&#39;, &#39;ABORT&#39;, &#39;IGNORE&#39;, &#39;ROLLBACK&#39;, &#39;REPLACE&#39;}</span>
+<span class="default_value">{&#39;ROLLBACK&#39;, &#39;FAIL&#39;, &#39;ABORT&#39;, &#39;REPLACE&#39;, &#39;IGNORE&#39;}</span>
</div>
@@ -12898,7 +12924,7 @@ Default: 3</li>
<div id="Parser.CLONE_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">CLONE_KEYWORDS</span> =
-<span class="default_value">{&#39;CLONE&#39;, &#39;COPY&#39;}</span>
+<span class="default_value">{&#39;COPY&#39;, &#39;CLONE&#39;}</span>
</div>
@@ -12910,7 +12936,7 @@ Default: 3</li>
<div id="Parser.HISTORICAL_DATA_KIND" class="classattr">
<div class="attr variable">
<span class="name">HISTORICAL_DATA_KIND</span> =
-<span class="default_value">{&#39;OFFSET&#39;, &#39;TIMESTAMP&#39;, &#39;STREAM&#39;, &#39;STATEMENT&#39;}</span>
+<span class="default_value">{&#39;OFFSET&#39;, &#39;TIMESTAMP&#39;, &#39;STATEMENT&#39;, &#39;STREAM&#39;}</span>
</div>
@@ -12922,7 +12948,7 @@ Default: 3</li>
<div id="Parser.OPCLASS_FOLLOW_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">OPCLASS_FOLLOW_KEYWORDS</span> =
-<span class="default_value">{&#39;ASC&#39;, &#39;NULLS&#39;, &#39;DESC&#39;}</span>
+<span class="default_value">{&#39;NULLS&#39;, &#39;DESC&#39;, &#39;ASC&#39;}</span>
</div>
@@ -12934,7 +12960,7 @@ Default: 3</li>
<div id="Parser.OPTYPE_FOLLOW_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">OPTYPE_FOLLOW_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;}</span>
</div>
@@ -12946,7 +12972,7 @@ Default: 3</li>
<div id="Parser.TABLE_INDEX_HINT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">TABLE_INDEX_HINT_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.IGNORE: &#39;IGNORE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.FORCE: &#39;FORCE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.FORCE: &#39;FORCE&#39;&gt;, &lt;TokenType.IGNORE: &#39;IGNORE&#39;&gt;}</span>
</div>
@@ -12959,7 +12985,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">WINDOW_ALIAS_TOKENS</span> =
<input id="Parser.WINDOW_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.WINDOW_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.WINDOW_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -13008,7 +13034,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FETCH_TOKENS</span> =
<input id="Parser.FETCH_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.FETCH_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.FETCH_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -13021,7 +13047,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ADD_CONSTRAINT_TOKENS</span> =
<input id="Parser.ADD_CONSTRAINT_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.ADD_CONSTRAINT_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.ADD_CONSTRAINT_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;}</span>
</div>
@@ -13058,7 +13084,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">UNNEST_OFFSET_ALIAS_TOKENS</span> =
<input id="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -13190,7 +13216,7 @@ Default: 3</li>
<div id="Parser.UNION_MODIFIERS" class="classattr">
<div class="attr variable">
<span class="name">UNION_MODIFIERS</span> =
-<span class="default_value">{&#39;limit&#39;, &#39;offset&#39;, &#39;order&#39;}</span>
+<span class="default_value">{&#39;order&#39;, &#39;offset&#39;, &#39;limit&#39;}</span>
</div>
diff --git a/docs/sqlglot/schema.html b/docs/sqlglot/schema.html
index 2295b9f..7b185e3 100644
--- a/docs/sqlglot/schema.html
+++ b/docs/sqlglot/schema.html
@@ -49,9 +49,6 @@
<a class="function" href="#Schema.has_column">has_column</a>
</li>
<li>
- <a class="function" href="#Schema.find">find</a>
- </li>
- <li>
<a class="variable" href="#Schema.supported_table_args">supported_table_args</a>
</li>
<li>
@@ -281,472 +278,469 @@
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a><span class="sd"> Returns the schema of a given table.</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="sd"> Args:</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="sd"> table: the target table.</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="sd"> raise_on_missing: whether or not to raise in case the schema is not found.</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="sd"> Returns:</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a><span class="sd"> The schema of the target table.</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="nd">@property</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="sd"> Table arguments this schema support, e.g. `(&quot;this&quot;, &quot;db&quot;, &quot;catalog&quot;)`</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="nd">@property</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns whether or not the schema is empty.&quot;&quot;&quot;</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="kc">True</span>
+</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><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="nd">@property</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a><span class="sd"> Table arguments this schema support, e.g. `(&quot;this&quot;, &quot;db&quot;, &quot;catalog&quot;)`</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="sd"> &quot;&quot;&quot;</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="nd">@property</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns whether or not the schema is empty.&quot;&quot;&quot;</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a><span class="k">class</span> <span class="nc">AbstractMappingSchema</span><span class="p">:</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">())</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="p">)</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</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="nd">@property</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="n">dict_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">)</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="nd">@property</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">:</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">depth</span><span class="p">:</span> <span class="c1"># None</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">elif</span> <span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">depth</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">[:</span><span class="n">depth</span><span class="p">]</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping shape. Depth: </span><span class="si">{</span><span class="n">depth</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="k">class</span> <span class="nc">AbstractMappingSchema</span><span class="p">:</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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 class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">())</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="p">)</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</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="nd">@property</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</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="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="n">dict_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</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="nd">@property</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</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="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">:</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">depth</span><span class="p">:</span> <span class="c1"># None</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">elif</span> <span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">depth</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">[:</span><span class="n">depth</span><span class="p">]</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping shape. Depth: </span><span class="si">{</span><span class="n">depth</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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">ReadCSV</span><span class="p">):</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)]</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> Returns the schema of a given table.</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="sd"> Args:</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="sd"> table: the target table.</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="sd"> raise_on_missing: whether or not to raise in case the schema is not found.</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="nf">table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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">ReadCSV</span><span class="p">):</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)]</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">table</span><span class="p">)[</span><span class="mi">0</span> <span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">)]</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">value</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">,</span> <span class="n">parts</span><span class="p">)</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="sd"> Returns:</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a><span class="sd"> The schema of the target table.</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">table</span><span class="p">)[</span><span class="mi">0</span> <span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">)]</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">value</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">,</span> <span class="n">parts</span><span class="p">)</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span><span class="p">:</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">possibilities</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">trie</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span><span class="p">:</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">possibilities</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">trie</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">possibilities</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">possibilities</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="k">for</span> <span class="n">parts</span> <span class="ow">in</span> <span class="n">possibilities</span><span class="p">)</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous mapping for </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">)</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="n">nested_get</span><span class="p">(</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">d</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">,</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="p">)</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a><span class="k">class</span> <span class="nc">MappingSchema</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a><span class="sd"> Schema based on a nested mapping.</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a><span class="sd"> Args:</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a><span class="sd"> schema: Mapping in one of the following forms:</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a><span class="sd"> 1. {table: {col: type}}</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a><span class="sd"> 4. None - Tables will be added later</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a><span class="sd"> visible: Optional mapping of which columns in the schema are visible. If not provided, all columns</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a><span class="sd"> are assumed to be visible. The nesting should mirror that of the schema:</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a><span class="sd"> 1. {table: set(*cols)}}</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="sd"> 2. {db: {table: set(*cols)}}}</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a><span class="sd"> 3. {catalog: {db: {table: set(*cols)}}}}</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a><span class="sd"> dialect: The dialect to be used for custom type mappings &amp; parsing string arguments.</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="sd"> normalize: Whether to normalize identifier names according to the given dialect or not.</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">visible</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">visible</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">schema</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">else</span> <span class="n">schema</span><span class="p">)</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">def</span> <span class="nf">from_mapping_schema</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">mapping_schema</span><span class="p">:</span> <span class="n">MappingSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">visible</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">visible</span><span class="p">,</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">normalize</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <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="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="p">}</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="p">)</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="k">def</span> <span class="nf">add_table</span><span class="p">(</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">column_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="sd"> Register or update a table. Updates are only performed if a new column mapping is provided.</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="sd"> The added table must have the necessary number of qualifiers in its path to match the schema&#39;s nesting level.</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="sd"> Args:</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> table: the `Table` expression instance or string representing the table.</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd"> column_mapping: a column mapping that describes the structure of the table.</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `table` if it&#39;s a string.</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="sd"> normalize: whether to normalize identifiers according to the dialect of interest.</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="sd"> match_depth: whether to enforce that the table must match the schema&#39;s depth or not.</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="k">if</span> <span class="n">match_depth</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">():</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2"> must match the &quot;</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="sa">f</span><span class="s2">&quot;schema&#39;s nesting level: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span><span class="si">}</span><span class="s2">.&quot;</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><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">normalized_column_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">):</span> <span class="n">value</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ensure_column_mapping</span><span class="p">(</span><span class="n">column_mapping</span><span class="p">)</span><span class="o">.</span><span class="n">items</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="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">normalized_column_mapping</span><span class="p">:</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="k">return</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="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">possibilities</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">possibilities</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="k">for</span> <span class="n">parts</span> <span class="ow">in</span> <span class="n">possibilities</span><span class="p">)</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous mapping for </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">message</span><span class="si">}</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="k">return</span> <span class="kc">None</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">)</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="n">nested_get</span><span class="p">(</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">d</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</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><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a><span class="k">class</span> <span class="nc">MappingSchema</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="sd"> Schema based on a nested mapping.</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="sd"> Args:</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a><span class="sd"> schema: Mapping in one of the following forms:</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a><span class="sd"> 1. {table: {col: type}}</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a><span class="sd"> 4. None - Tables will be added later</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a><span class="sd"> visible: Optional mapping of which columns in the schema are visible. If not provided, all columns</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a><span class="sd"> are assumed to be visible. The nesting should mirror that of the schema:</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a><span class="sd"> 1. {table: set(*cols)}}</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a><span class="sd"> 2. {db: {table: set(*cols)}}}</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a><span class="sd"> 3. {catalog: {db: {table: set(*cols)}}}}</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a><span class="sd"> dialect: The dialect to be used for custom type mappings &amp; parsing string arguments.</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="sd"> normalize: Whether to normalize identifier names according to the given dialect or not.</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">visible</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">visible</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">schema</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">else</span> <span class="n">schema</span><span class="p">)</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">def</span> <span class="nf">from_mapping_schema</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">mapping_schema</span><span class="p">:</span> <span class="n">MappingSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">visible</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">visible</span><span class="p">,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">normalize</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">normalize</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">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="p">}</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="p">)</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">add_table</span><span class="p">(</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">column_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="sd"> Register or update a table. Updates are only performed if a new column mapping is provided.</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a><span class="sd"> The added table must have the necessary number of qualifiers in its path to match the schema&#39;s nesting level.</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="sd"> Args:</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="sd"> table: the `Table` expression instance or string representing the table.</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="sd"> column_mapping: a column mapping that describes the structure of the table.</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `table` if it&#39;s a string.</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> normalize: whether to normalize identifiers according to the dialect of interest.</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd"> match_depth: whether to enforce that the table must match the schema&#39;s depth or not.</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</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">if</span> <span class="n">match_depth</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">():</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2"> must match the &quot;</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="sa">f</span><span class="s2">&quot;schema&#39;s nesting level: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="p">)</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">normalized_column_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">):</span> <span class="n">value</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ensure_column_mapping</span><span class="p">(</span><span class="n">column_mapping</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="p">}</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">normalized_column_mapping</span><span class="p">:</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="k">return</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span> <span class="n">normalized_column_mapping</span><span class="p">)</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">new_trie</span><span class="p">([</span><span class="n">parts</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">)</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span> <span class="n">normalized_column_mapping</span><span class="p">)</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">new_trie</span><span class="p">([</span><span class="n">parts</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">)</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="k">def</span> <span class="nf">column_names</span><span class="p">(</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</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 class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="k">def</span> <span class="nf">column_names</span><span class="p">(</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">only_visible</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">:</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema</span><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="k">if</span> <span class="ow">not</span> <span class="n">only_visible</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">:</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span> <span class="k">if</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">visible</span><span class="p">]</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span> <span class="k">if</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">visible</span><span class="p">]</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="k">def</span> <span class="nf">get_column_type</span><span class="p">(</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="p">)</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="k">if</span> <span class="n">table_schema</span><span class="p">:</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">column_type</span> <span class="o">=</span> <span class="n">table_schema</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">normalized_column_name</span><span class="p">)</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">return</span> <span class="n">column_type</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_data_type</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="k">return</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="s2">&quot;unknown&quot;</span><span class="p">)</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="k">def</span> <span class="nf">has_column</span><span class="p">(</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="p">)</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="k">def</span> <span class="nf">get_column_type</span><span class="p">(</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</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="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="p">)</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="k">if</span> <span class="n">table_schema</span><span class="p">:</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">column_type</span> <span class="o">=</span> <span class="n">table_schema</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">normalized_column_name</span><span class="p">)</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="n">column_type</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_data_type</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="k">return</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="s2">&quot;unknown&quot;</span><span class="p">)</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="k">def</span> <span class="nf">has_column</span><span class="p">(</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="p">)</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="n">normalized_column_name</span> <span class="ow">in</span> <span class="n">table_schema</span> <span class="k">if</span> <span class="n">table_schema</span> <span class="k">else</span> <span class="kc">False</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="n">normalized_column_name</span> <span class="ow">in</span> <span class="n">table_schema</span> <span class="k">if</span> <span class="n">table_schema</span> <span class="k">else</span> <span class="kc">False</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">_normalize</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a><span class="sd"> Normalizes all identifiers in the schema.</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="k">def</span> <span class="nf">_normalize</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a><span class="sd"> Normalizes all identifiers in the schema.</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="sd"> Args:</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a><span class="sd"> schema: the schema to normalize.</span>
</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a><span class="sd"> Args:</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a><span class="sd"> schema: the schema to normalize.</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a><span class="sd"> Returns:</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a><span class="sd"> The normalized schema mapping.</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">normalized_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">flattened_schema</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a><span class="sd"> Returns:</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a><span class="sd"> The normalized schema mapping.</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">normalized_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">flattened_schema</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</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">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_schema</span><span class="p">:</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_schema</span><span class="p">:</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2"> must match the schema&#39;s nesting level: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">flattened_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <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="n">normalized_keys</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">]</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="k">for</span> <span class="n">column_name</span><span class="p">,</span> <span class="n">column_type</span> <span class="ow">in</span> <span class="n">columns</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">nested_set</span><span class="p">(</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">normalized_mapping</span><span class="p">,</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">normalized_keys</span> <span class="o">+</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">column_name</span><span class="p">)],</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">column_type</span><span class="p">,</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <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="k">return</span> <span class="n">normalized_mapping</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">_normalize_table</span><span class="p">(</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">normalize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">normalize</span><span class="p">:</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">:</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">normalized_table</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="n">normalized_table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">normalize_name</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">),</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="p">)</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">return</span> <span class="n">normalized_table</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">def</span> <span class="nf">_normalize_name</span><span class="p">(</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="n">normalize_name</span><span class="p">(</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">name</span><span class="p">,</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">normalize</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span><span class="p">,</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="p">)</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="k">def</span> <span class="nf">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</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="sd"> Args:</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a><span class="sd"> schema_type: the type we want to convert.</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a><span class="sd"> Returns:</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a><span class="sd"> The resulting expression type.</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="n">udt</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">expression</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">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="n">udt</span><span class="p">)</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2"> must match the schema&#39;s nesting level: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">flattened_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="p">)</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">normalized_keys</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">]</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">for</span> <span class="n">column_name</span><span class="p">,</span> <span class="n">column_type</span> <span class="ow">in</span> <span class="n">columns</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">nested_set</span><span class="p">(</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">normalized_mapping</span><span class="p">,</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">normalized_keys</span> <span class="o">+</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">column_name</span><span class="p">)],</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">column_type</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="p">)</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">return</span> <span class="n">normalized_mapping</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">_normalize_table</span><span class="p">(</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">normalize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">normalize</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="n">normalize</span><span class="p">:</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">:</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">normalized_table</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">normalized_table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">normalize_name</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">),</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="p">)</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">return</span> <span class="n">normalized_table</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">def</span> <span class="nf">_normalize_name</span><span class="p">(</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">normalize_name</span><span class="p">(</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="n">name</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">normalize</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span><span class="p">,</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="p">)</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="k">def</span> <span class="nf">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</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="sd"> Args:</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a><span class="sd"> schema_type: the type we want to convert.</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a><span class="sd"> Returns:</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a><span class="sd"> The resulting expression type.</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">udt</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="n">expression</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">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="n">udt</span><span class="p">)</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a><span class="k">def</span> <span class="nf">normalize_name</span><span class="p">(</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">parse_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a><span class="k">def</span> <span class="nf">normalize_name</span><span class="p">(</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</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="nb">isinstance</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">parse_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="n">normalize</span><span class="p">:</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="n">identifier</span>
</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">normalize</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="n">identifier</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="c1"># this is used for normalize_identifier, bigquery has special rules pertaining tables</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a><span class="k">def</span> <span class="nf">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="n">schema</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="c1"># this is used for normalize_identifier, bigquery has special rules pertaining tables</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a><span class="k">def</span> <span class="nf">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="n">schema</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>
</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a>
-</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="k">def</span> <span class="nf">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="n">mapping</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="p">}</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</span><span class="p">):</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</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="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a><span class="k">def</span> <span class="nf">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="n">mapping</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="p">}</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</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="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a><span class="k">def</span> <span class="nf">flatten_schema</span><span class="p">(</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a><span class="k">def</span> <span class="nf">flatten_schema</span><span class="p">(</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</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">return</span> <span class="n">tables</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a>
</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="n">tables</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a><span class="sd"> Get a value for a nested dictionary.</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a><span class="sd"> Args:</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a><span class="sd"> d: the dictionary to search.</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a><span class="sd"> Returns:</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a><span class="sd"> Get a value for a nested dictionary.</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a><span class="sd"> Args:</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a><span class="sd"> d: the dictionary to search.</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a><span class="sd"> Returns:</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a>
</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="k">return</span> <span class="n">d</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a>
-</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a>
-</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a><span class="sd"> In-place set a value for a nested dictionary</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a><span class="sd"> Example:</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a><span class="sd"> In-place set a value for a nested dictionary</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a><span class="sd"> Example:</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a>
+</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a><span class="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
</span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a><span class="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a><span class="sd"> Args:</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a><span class="sd"> d: dictionary to update.</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a><span class="sd"> Returns:</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a><span class="sd"> The (possibly) updated dictionary.</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="k">return</span> <span class="n">d</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a>
-</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="k">return</span> <span class="n">d</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a>
-</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">d</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos">572</span></a>
-</span><span id="L-573"><a href="#L-573"><span class="linenos">573</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos">574</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a><span class="sd"> Args:</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a><span class="sd"> d: dictionary to update.</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a><span class="sd"> Returns:</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a><span class="sd"> The (possibly) updated dictionary.</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a>
+</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">d</span>
+</span><span id="L-564"><a href="#L-564"><span class="linenos">564</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="L-565"><a href="#L-565"><span class="linenos">565</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos">566</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos">567</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos">568</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos">569</span></a>
+</span><span id="L-570"><a href="#L-570"><span class="linenos">570</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos">571</span></a> <span class="k">return</span> <span class="n">d</span>
</span></pre></div>
@@ -852,30 +846,17 @@
</span><span id="Schema-107"><a href="#Schema-107"><span class="linenos">107</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span>
</span><span id="Schema-108"><a href="#Schema-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
</span><span id="Schema-109"><a href="#Schema-109"><span class="linenos">109</span></a>
-</span><span id="Schema-110"><a href="#Schema-110"><span class="linenos">110</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-</span><span id="Schema-111"><a href="#Schema-111"><span class="linenos">111</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="Schema-112"><a href="#Schema-112"><span class="linenos">112</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Schema-113"><a href="#Schema-113"><span class="linenos">113</span></a><span class="sd"> Returns the schema of a given table.</span>
-</span><span id="Schema-114"><a href="#Schema-114"><span class="linenos">114</span></a>
-</span><span id="Schema-115"><a href="#Schema-115"><span class="linenos">115</span></a><span class="sd"> Args:</span>
-</span><span id="Schema-116"><a href="#Schema-116"><span class="linenos">116</span></a><span class="sd"> table: the target table.</span>
-</span><span id="Schema-117"><a href="#Schema-117"><span class="linenos">117</span></a><span class="sd"> raise_on_missing: whether or not to raise in case the schema is not found.</span>
-</span><span id="Schema-118"><a href="#Schema-118"><span class="linenos">118</span></a>
-</span><span id="Schema-119"><a href="#Schema-119"><span class="linenos">119</span></a><span class="sd"> Returns:</span>
-</span><span id="Schema-120"><a href="#Schema-120"><span class="linenos">120</span></a><span class="sd"> The schema of the target table.</span>
-</span><span id="Schema-121"><a href="#Schema-121"><span class="linenos">121</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Schema-122"><a href="#Schema-122"><span class="linenos">122</span></a>
-</span><span id="Schema-123"><a href="#Schema-123"><span class="linenos">123</span></a> <span class="nd">@property</span>
-</span><span id="Schema-124"><a href="#Schema-124"><span class="linenos">124</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-</span><span id="Schema-125"><a href="#Schema-125"><span class="linenos">125</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
-</span><span id="Schema-126"><a href="#Schema-126"><span class="linenos">126</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Schema-127"><a href="#Schema-127"><span class="linenos">127</span></a><span class="sd"> Table arguments this schema support, e.g. `(&quot;this&quot;, &quot;db&quot;, &quot;catalog&quot;)`</span>
-</span><span id="Schema-128"><a href="#Schema-128"><span class="linenos">128</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Schema-129"><a href="#Schema-129"><span class="linenos">129</span></a>
-</span><span id="Schema-130"><a href="#Schema-130"><span class="linenos">130</span></a> <span class="nd">@property</span>
-</span><span id="Schema-131"><a href="#Schema-131"><span class="linenos">131</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Schema-132"><a href="#Schema-132"><span class="linenos">132</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns whether or not the schema is empty.&quot;&quot;&quot;</span>
-</span><span id="Schema-133"><a href="#Schema-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Schema-110"><a href="#Schema-110"><span class="linenos">110</span></a> <span class="nd">@property</span>
+</span><span id="Schema-111"><a href="#Schema-111"><span class="linenos">111</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+</span><span id="Schema-112"><a href="#Schema-112"><span class="linenos">112</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
+</span><span id="Schema-113"><a href="#Schema-113"><span class="linenos">113</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Schema-114"><a href="#Schema-114"><span class="linenos">114</span></a><span class="sd"> Table arguments this schema support, e.g. `(&quot;this&quot;, &quot;db&quot;, &quot;catalog&quot;)`</span>
+</span><span id="Schema-115"><a href="#Schema-115"><span class="linenos">115</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Schema-116"><a href="#Schema-116"><span class="linenos">116</span></a>
+</span><span id="Schema-117"><a href="#Schema-117"><span class="linenos">117</span></a> <span class="nd">@property</span>
+</span><span id="Schema-118"><a href="#Schema-118"><span class="linenos">118</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Schema-119"><a href="#Schema-119"><span class="linenos">119</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns whether or not the schema is empty.&quot;&quot;&quot;</span>
+</span><span id="Schema-120"><a href="#Schema-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="kc">True</span>
</span></pre></div>
@@ -1110,51 +1091,6 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
- <div id="Schema.find" class="classattr">
- <input id="Schema.find-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
- <div class="decorator">@abc.abstractmethod</div>
-
- <span class="def">def</span>
- <span class="name">find</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span>,</span><span class="param"> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="n">Optional</span><span class="p">[</span><span class="n">Any</span><span class="p">]</span>:</span></span>
-
- <label class="view-source-button" for="Schema.find-view-source"><span>View Source</span></label>
-
- </div>
- <a class="headerlink" href="#Schema.find"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Schema.find-110"><a href="#Schema.find-110"><span class="linenos">110</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-</span><span id="Schema.find-111"><a href="#Schema.find-111"><span class="linenos">111</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="Schema.find-112"><a href="#Schema.find-112"><span class="linenos">112</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Schema.find-113"><a href="#Schema.find-113"><span class="linenos">113</span></a><span class="sd"> Returns the schema of a given table.</span>
-</span><span id="Schema.find-114"><a href="#Schema.find-114"><span class="linenos">114</span></a>
-</span><span id="Schema.find-115"><a href="#Schema.find-115"><span class="linenos">115</span></a><span class="sd"> Args:</span>
-</span><span id="Schema.find-116"><a href="#Schema.find-116"><span class="linenos">116</span></a><span class="sd"> table: the target table.</span>
-</span><span id="Schema.find-117"><a href="#Schema.find-117"><span class="linenos">117</span></a><span class="sd"> raise_on_missing: whether or not to raise in case the schema is not found.</span>
-</span><span id="Schema.find-118"><a href="#Schema.find-118"><span class="linenos">118</span></a>
-</span><span id="Schema.find-119"><a href="#Schema.find-119"><span class="linenos">119</span></a><span class="sd"> Returns:</span>
-</span><span id="Schema.find-120"><a href="#Schema.find-120"><span class="linenos">120</span></a><span class="sd"> The schema of the target table.</span>
-</span><span id="Schema.find-121"><a href="#Schema.find-121"><span class="linenos">121</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span></pre></div>
-
-
- <div class="docstring"><p>Returns the schema of a given table.</p>
-
-<h6 id="arguments">Arguments:</h6>
-
-<ul>
-<li><strong>table:</strong> the target table.</li>
-<li><strong>raise_on_missing:</strong> whether or not to raise in case the schema is not found.</li>
-</ul>
-
-<h6 id="returns">Returns:</h6>
-
-<blockquote>
- <p>The schema of the target table.</p>
-</blockquote>
-</div>
-
-
- </div>
<div id="Schema.supported_table_args" class="classattr">
<input id="Schema.supported_table_args-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr variable">
@@ -1164,12 +1100,12 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#Schema.supported_table_args"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Schema.supported_table_args-123"><a href="#Schema.supported_table_args-123"><span class="linenos">123</span></a> <span class="nd">@property</span>
-</span><span id="Schema.supported_table_args-124"><a href="#Schema.supported_table_args-124"><span class="linenos">124</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-</span><span id="Schema.supported_table_args-125"><a href="#Schema.supported_table_args-125"><span class="linenos">125</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
-</span><span id="Schema.supported_table_args-126"><a href="#Schema.supported_table_args-126"><span class="linenos">126</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Schema.supported_table_args-127"><a href="#Schema.supported_table_args-127"><span class="linenos">127</span></a><span class="sd"> Table arguments this schema support, e.g. `(&quot;this&quot;, &quot;db&quot;, &quot;catalog&quot;)`</span>
-</span><span id="Schema.supported_table_args-128"><a href="#Schema.supported_table_args-128"><span class="linenos">128</span></a><span class="sd"> &quot;&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Schema.supported_table_args-110"><a href="#Schema.supported_table_args-110"><span class="linenos">110</span></a> <span class="nd">@property</span>
+</span><span id="Schema.supported_table_args-111"><a href="#Schema.supported_table_args-111"><span class="linenos">111</span></a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+</span><span id="Schema.supported_table_args-112"><a href="#Schema.supported_table_args-112"><span class="linenos">112</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
+</span><span id="Schema.supported_table_args-113"><a href="#Schema.supported_table_args-113"><span class="linenos">113</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Schema.supported_table_args-114"><a href="#Schema.supported_table_args-114"><span class="linenos">114</span></a><span class="sd"> Table arguments this schema support, e.g. `(&quot;this&quot;, &quot;db&quot;, &quot;catalog&quot;)`</span>
+</span><span id="Schema.supported_table_args-115"><a href="#Schema.supported_table_args-115"><span class="linenos">115</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>
@@ -1187,10 +1123,10 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#Schema.empty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Schema.empty-130"><a href="#Schema.empty-130"><span class="linenos">130</span></a> <span class="nd">@property</span>
-</span><span id="Schema.empty-131"><a href="#Schema.empty-131"><span class="linenos">131</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Schema.empty-132"><a href="#Schema.empty-132"><span class="linenos">132</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns whether or not the schema is empty.&quot;&quot;&quot;</span>
-</span><span id="Schema.empty-133"><a href="#Schema.empty-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Schema.empty-117"><a href="#Schema.empty-117"><span class="linenos">117</span></a> <span class="nd">@property</span>
+</span><span id="Schema.empty-118"><a href="#Schema.empty-118"><span class="linenos">118</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Schema.empty-119"><a href="#Schema.empty-119"><span class="linenos">119</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns whether or not the schema is empty.&quot;&quot;&quot;</span>
+</span><span id="Schema.empty-120"><a href="#Schema.empty-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="kc">True</span>
</span></pre></div>
@@ -1211,71 +1147,81 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema-136"><a href="#AbstractMappingSchema-136"><span class="linenos">136</span></a><span class="k">class</span> <span class="nc">AbstractMappingSchema</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-137"><a href="#AbstractMappingSchema-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema-138"><a href="#AbstractMappingSchema-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema-139"><a href="#AbstractMappingSchema-139"><span class="linenos">139</span></a> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema-140"><a href="#AbstractMappingSchema-140"><span class="linenos">140</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-141"><a href="#AbstractMappingSchema-141"><span class="linenos">141</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
-</span><span id="AbstractMappingSchema-142"><a href="#AbstractMappingSchema-142"><span class="linenos">142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema-143"><a href="#AbstractMappingSchema-143"><span class="linenos">143</span></a> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">())</span>
-</span><span id="AbstractMappingSchema-144"><a href="#AbstractMappingSchema-144"><span class="linenos">144</span></a> <span class="p">)</span>
-</span><span id="AbstractMappingSchema-145"><a href="#AbstractMappingSchema-145"><span class="linenos">145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
-</span><span id="AbstractMappingSchema-146"><a href="#AbstractMappingSchema-146"><span class="linenos">146</span></a>
-</span><span id="AbstractMappingSchema-147"><a href="#AbstractMappingSchema-147"><span class="linenos">147</span></a> <span class="nd">@property</span>
-</span><span id="AbstractMappingSchema-148"><a href="#AbstractMappingSchema-148"><span class="linenos">148</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-149"><a href="#AbstractMappingSchema-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span>
-</span><span id="AbstractMappingSchema-150"><a href="#AbstractMappingSchema-150"><span class="linenos">150</span></a>
-</span><span id="AbstractMappingSchema-151"><a href="#AbstractMappingSchema-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-152"><a href="#AbstractMappingSchema-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="n">dict_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema-153"><a href="#AbstractMappingSchema-153"><span class="linenos">153</span></a>
-</span><span id="AbstractMappingSchema-154"><a href="#AbstractMappingSchema-154"><span class="linenos">154</span></a> <span class="nd">@property</span>
-</span><span id="AbstractMappingSchema-155"><a href="#AbstractMappingSchema-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema-156"><a href="#AbstractMappingSchema-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-157"><a href="#AbstractMappingSchema-157"><span class="linenos">157</span></a> <span class="n">depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span>
-</span><span id="AbstractMappingSchema-158"><a href="#AbstractMappingSchema-158"><span class="linenos">158</span></a>
-</span><span id="AbstractMappingSchema-159"><a href="#AbstractMappingSchema-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">depth</span><span class="p">:</span> <span class="c1"># None</span>
-</span><span id="AbstractMappingSchema-160"><a href="#AbstractMappingSchema-160"><span class="linenos">160</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
-</span><span id="AbstractMappingSchema-161"><a href="#AbstractMappingSchema-161"><span class="linenos">161</span></a> <span class="k">elif</span> <span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">depth</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-162"><a href="#AbstractMappingSchema-162"><span class="linenos">162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">[:</span><span class="n">depth</span><span class="p">]</span>
-</span><span id="AbstractMappingSchema-163"><a href="#AbstractMappingSchema-163"><span class="linenos">163</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-164"><a href="#AbstractMappingSchema-164"><span class="linenos">164</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping shape. Depth: </span><span class="si">{</span><span class="n">depth</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema-165"><a href="#AbstractMappingSchema-165"><span class="linenos">165</span></a>
-</span><span id="AbstractMappingSchema-166"><a href="#AbstractMappingSchema-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema-123"><a href="#AbstractMappingSchema-123"><span class="linenos">123</span></a><span class="k">class</span> <span class="nc">AbstractMappingSchema</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-124"><a href="#AbstractMappingSchema-124"><span class="linenos">124</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema-125"><a href="#AbstractMappingSchema-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema-126"><a href="#AbstractMappingSchema-126"><span class="linenos">126</span></a> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema-127"><a href="#AbstractMappingSchema-127"><span class="linenos">127</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-128"><a href="#AbstractMappingSchema-128"><span class="linenos">128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
+</span><span id="AbstractMappingSchema-129"><a href="#AbstractMappingSchema-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema-130"><a href="#AbstractMappingSchema-130"><span class="linenos">130</span></a> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">())</span>
+</span><span id="AbstractMappingSchema-131"><a href="#AbstractMappingSchema-131"><span class="linenos">131</span></a> <span class="p">)</span>
+</span><span id="AbstractMappingSchema-132"><a href="#AbstractMappingSchema-132"><span class="linenos">132</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
+</span><span id="AbstractMappingSchema-133"><a href="#AbstractMappingSchema-133"><span class="linenos">133</span></a>
+</span><span id="AbstractMappingSchema-134"><a href="#AbstractMappingSchema-134"><span class="linenos">134</span></a> <span class="nd">@property</span>
+</span><span id="AbstractMappingSchema-135"><a href="#AbstractMappingSchema-135"><span class="linenos">135</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-136"><a href="#AbstractMappingSchema-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span>
+</span><span id="AbstractMappingSchema-137"><a href="#AbstractMappingSchema-137"><span class="linenos">137</span></a>
+</span><span id="AbstractMappingSchema-138"><a href="#AbstractMappingSchema-138"><span class="linenos">138</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-139"><a href="#AbstractMappingSchema-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">dict_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema-140"><a href="#AbstractMappingSchema-140"><span class="linenos">140</span></a>
+</span><span id="AbstractMappingSchema-141"><a href="#AbstractMappingSchema-141"><span class="linenos">141</span></a> <span class="nd">@property</span>
+</span><span id="AbstractMappingSchema-142"><a href="#AbstractMappingSchema-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema-143"><a href="#AbstractMappingSchema-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-144"><a href="#AbstractMappingSchema-144"><span class="linenos">144</span></a> <span class="n">depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span>
+</span><span id="AbstractMappingSchema-145"><a href="#AbstractMappingSchema-145"><span class="linenos">145</span></a>
+</span><span id="AbstractMappingSchema-146"><a href="#AbstractMappingSchema-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">depth</span><span class="p">:</span> <span class="c1"># None</span>
+</span><span id="AbstractMappingSchema-147"><a href="#AbstractMappingSchema-147"><span class="linenos">147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
+</span><span id="AbstractMappingSchema-148"><a href="#AbstractMappingSchema-148"><span class="linenos">148</span></a> <span class="k">elif</span> <span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">depth</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-149"><a href="#AbstractMappingSchema-149"><span class="linenos">149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">[:</span><span class="n">depth</span><span class="p">]</span>
+</span><span id="AbstractMappingSchema-150"><a href="#AbstractMappingSchema-150"><span class="linenos">150</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-151"><a href="#AbstractMappingSchema-151"><span class="linenos">151</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping shape. Depth: </span><span class="si">{</span><span class="n">depth</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema-152"><a href="#AbstractMappingSchema-152"><span class="linenos">152</span></a>
+</span><span id="AbstractMappingSchema-153"><a href="#AbstractMappingSchema-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span>
+</span><span id="AbstractMappingSchema-154"><a href="#AbstractMappingSchema-154"><span class="linenos">154</span></a>
+</span><span id="AbstractMappingSchema-155"><a href="#AbstractMappingSchema-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema-156"><a href="#AbstractMappingSchema-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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">ReadCSV</span><span class="p">):</span>
+</span><span id="AbstractMappingSchema-157"><a href="#AbstractMappingSchema-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
+</span><span id="AbstractMappingSchema-158"><a href="#AbstractMappingSchema-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)]</span>
+</span><span id="AbstractMappingSchema-159"><a href="#AbstractMappingSchema-159"><span class="linenos">159</span></a>
+</span><span id="AbstractMappingSchema-160"><a href="#AbstractMappingSchema-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema-161"><a href="#AbstractMappingSchema-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="AbstractMappingSchema-162"><a href="#AbstractMappingSchema-162"><span class="linenos">162</span></a><span class="sd"> Returns the schema of a given table.</span>
+</span><span id="AbstractMappingSchema-163"><a href="#AbstractMappingSchema-163"><span class="linenos">163</span></a>
+</span><span id="AbstractMappingSchema-164"><a href="#AbstractMappingSchema-164"><span class="linenos">164</span></a><span class="sd"> Args:</span>
+</span><span id="AbstractMappingSchema-165"><a href="#AbstractMappingSchema-165"><span class="linenos">165</span></a><span class="sd"> table: the target table.</span>
+</span><span id="AbstractMappingSchema-166"><a href="#AbstractMappingSchema-166"><span class="linenos">166</span></a><span class="sd"> raise_on_missing: whether or not to raise in case the schema is not found.</span>
</span><span id="AbstractMappingSchema-167"><a href="#AbstractMappingSchema-167"><span class="linenos">167</span></a>
-</span><span id="AbstractMappingSchema-168"><a href="#AbstractMappingSchema-168"><span class="linenos">168</span></a> <span class="k">def</span> <span class="nf">table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema-169"><a href="#AbstractMappingSchema-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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">ReadCSV</span><span class="p">):</span>
-</span><span id="AbstractMappingSchema-170"><a href="#AbstractMappingSchema-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
-</span><span id="AbstractMappingSchema-171"><a href="#AbstractMappingSchema-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)]</span>
-</span><span id="AbstractMappingSchema-172"><a href="#AbstractMappingSchema-172"><span class="linenos">172</span></a>
-</span><span id="AbstractMappingSchema-173"><a href="#AbstractMappingSchema-173"><span class="linenos">173</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema-174"><a href="#AbstractMappingSchema-174"><span class="linenos">174</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">table</span><span class="p">)[</span><span class="mi">0</span> <span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">)]</span>
-</span><span id="AbstractMappingSchema-175"><a href="#AbstractMappingSchema-175"><span class="linenos">175</span></a> <span class="n">value</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">,</span> <span class="n">parts</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema-168"><a href="#AbstractMappingSchema-168"><span class="linenos">168</span></a><span class="sd"> Returns:</span>
+</span><span id="AbstractMappingSchema-169"><a href="#AbstractMappingSchema-169"><span class="linenos">169</span></a><span class="sd"> The schema of the target table.</span>
+</span><span id="AbstractMappingSchema-170"><a href="#AbstractMappingSchema-170"><span class="linenos">170</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="AbstractMappingSchema-171"><a href="#AbstractMappingSchema-171"><span class="linenos">171</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">table</span><span class="p">)[</span><span class="mi">0</span> <span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">)]</span>
+</span><span id="AbstractMappingSchema-172"><a href="#AbstractMappingSchema-172"><span class="linenos">172</span></a> <span class="n">value</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">,</span> <span class="n">parts</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema-173"><a href="#AbstractMappingSchema-173"><span class="linenos">173</span></a>
+</span><span id="AbstractMappingSchema-174"><a href="#AbstractMappingSchema-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-175"><a href="#AbstractMappingSchema-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="AbstractMappingSchema-176"><a href="#AbstractMappingSchema-176"><span class="linenos">176</span></a>
-</span><span id="AbstractMappingSchema-177"><a href="#AbstractMappingSchema-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-178"><a href="#AbstractMappingSchema-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="AbstractMappingSchema-177"><a href="#AbstractMappingSchema-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-178"><a href="#AbstractMappingSchema-178"><span class="linenos">178</span></a> <span class="n">possibilities</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">trie</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="AbstractMappingSchema-179"><a href="#AbstractMappingSchema-179"><span class="linenos">179</span></a>
-</span><span id="AbstractMappingSchema-180"><a href="#AbstractMappingSchema-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-181"><a href="#AbstractMappingSchema-181"><span class="linenos">181</span></a> <span class="n">possibilities</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">trie</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema-182"><a href="#AbstractMappingSchema-182"><span class="linenos">182</span></a>
-</span><span id="AbstractMappingSchema-183"><a href="#AbstractMappingSchema-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">possibilities</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-184"><a href="#AbstractMappingSchema-184"><span class="linenos">184</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">possibilities</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="AbstractMappingSchema-185"><a href="#AbstractMappingSchema-185"><span class="linenos">185</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-186"><a href="#AbstractMappingSchema-186"><span class="linenos">186</span></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="k">for</span> <span class="n">parts</span> <span class="ow">in</span> <span class="n">possibilities</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema-187"><a href="#AbstractMappingSchema-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema-188"><a href="#AbstractMappingSchema-188"><span class="linenos">188</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous mapping for </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema-189"><a href="#AbstractMappingSchema-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="AbstractMappingSchema-190"><a href="#AbstractMappingSchema-190"><span class="linenos">190</span></a>
-</span><span id="AbstractMappingSchema-191"><a href="#AbstractMappingSchema-191"><span class="linenos">191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema-192"><a href="#AbstractMappingSchema-192"><span class="linenos">192</span></a>
-</span><span id="AbstractMappingSchema-193"><a href="#AbstractMappingSchema-193"><span class="linenos">193</span></a> <span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema-194"><a href="#AbstractMappingSchema-194"><span class="linenos">194</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="AbstractMappingSchema-195"><a href="#AbstractMappingSchema-195"><span class="linenos">195</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema-196"><a href="#AbstractMappingSchema-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="n">nested_get</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema-197"><a href="#AbstractMappingSchema-197"><span class="linenos">197</span></a> <span class="n">d</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema-198"><a href="#AbstractMappingSchema-198"><span class="linenos">198</span></a> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span>
-</span><span id="AbstractMappingSchema-199"><a href="#AbstractMappingSchema-199"><span class="linenos">199</span></a> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema-200"><a href="#AbstractMappingSchema-200"><span class="linenos">200</span></a> <span class="p">)</span>
+</span><span id="AbstractMappingSchema-180"><a href="#AbstractMappingSchema-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">possibilities</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-181"><a href="#AbstractMappingSchema-181"><span class="linenos">181</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">possibilities</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="AbstractMappingSchema-182"><a href="#AbstractMappingSchema-182"><span class="linenos">182</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-183"><a href="#AbstractMappingSchema-183"><span class="linenos">183</span></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="k">for</span> <span class="n">parts</span> <span class="ow">in</span> <span class="n">possibilities</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema-184"><a href="#AbstractMappingSchema-184"><span class="linenos">184</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema-185"><a href="#AbstractMappingSchema-185"><span class="linenos">185</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous mapping for </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema-186"><a href="#AbstractMappingSchema-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="AbstractMappingSchema-187"><a href="#AbstractMappingSchema-187"><span class="linenos">187</span></a>
+</span><span id="AbstractMappingSchema-188"><a href="#AbstractMappingSchema-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema-189"><a href="#AbstractMappingSchema-189"><span class="linenos">189</span></a>
+</span><span id="AbstractMappingSchema-190"><a href="#AbstractMappingSchema-190"><span class="linenos">190</span></a> <span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema-191"><a href="#AbstractMappingSchema-191"><span class="linenos">191</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="AbstractMappingSchema-192"><a href="#AbstractMappingSchema-192"><span class="linenos">192</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema-193"><a href="#AbstractMappingSchema-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="n">nested_get</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema-194"><a href="#AbstractMappingSchema-194"><span class="linenos">194</span></a> <span class="n">d</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema-195"><a href="#AbstractMappingSchema-195"><span class="linenos">195</span></a> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span>
+</span><span id="AbstractMappingSchema-196"><a href="#AbstractMappingSchema-196"><span class="linenos">196</span></a> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema-197"><a href="#AbstractMappingSchema-197"><span class="linenos">197</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1291,15 +1237,15 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.__init__-137"><a href="#AbstractMappingSchema.__init__-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema.__init__-138"><a href="#AbstractMappingSchema.__init__-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema.__init__-139"><a href="#AbstractMappingSchema.__init__-139"><span class="linenos">139</span></a> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema.__init__-140"><a href="#AbstractMappingSchema.__init__-140"><span class="linenos">140</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.__init__-141"><a href="#AbstractMappingSchema.__init__-141"><span class="linenos">141</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
-</span><span id="AbstractMappingSchema.__init__-142"><a href="#AbstractMappingSchema.__init__-142"><span class="linenos">142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema.__init__-143"><a href="#AbstractMappingSchema.__init__-143"><span class="linenos">143</span></a> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">())</span>
-</span><span id="AbstractMappingSchema.__init__-144"><a href="#AbstractMappingSchema.__init__-144"><span class="linenos">144</span></a> <span class="p">)</span>
-</span><span id="AbstractMappingSchema.__init__-145"><a href="#AbstractMappingSchema.__init__-145"><span class="linenos">145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.__init__-124"><a href="#AbstractMappingSchema.__init__-124"><span class="linenos">124</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema.__init__-125"><a href="#AbstractMappingSchema.__init__-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema.__init__-126"><a href="#AbstractMappingSchema.__init__-126"><span class="linenos">126</span></a> <span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema.__init__-127"><a href="#AbstractMappingSchema.__init__-127"><span class="linenos">127</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.__init__-128"><a href="#AbstractMappingSchema.__init__-128"><span class="linenos">128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
+</span><span id="AbstractMappingSchema.__init__-129"><a href="#AbstractMappingSchema.__init__-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema.__init__-130"><a href="#AbstractMappingSchema.__init__-130"><span class="linenos">130</span></a> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">())</span>
+</span><span id="AbstractMappingSchema.__init__-131"><a href="#AbstractMappingSchema.__init__-131"><span class="linenos">131</span></a> <span class="p">)</span>
+</span><span id="AbstractMappingSchema.__init__-132"><a href="#AbstractMappingSchema.__init__-132"><span class="linenos">132</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
</span></pre></div>
@@ -1337,9 +1283,9 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema.empty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.empty-147"><a href="#AbstractMappingSchema.empty-147"><span class="linenos">147</span></a> <span class="nd">@property</span>
-</span><span id="AbstractMappingSchema.empty-148"><a href="#AbstractMappingSchema.empty-148"><span class="linenos">148</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.empty-149"><a href="#AbstractMappingSchema.empty-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.empty-134"><a href="#AbstractMappingSchema.empty-134"><span class="linenos">134</span></a> <span class="nd">@property</span>
+</span><span id="AbstractMappingSchema.empty-135"><a href="#AbstractMappingSchema.empty-135"><span class="linenos">135</span></a> <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.empty-136"><a href="#AbstractMappingSchema.empty-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span>
</span></pre></div>
@@ -1357,8 +1303,8 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema.depth"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.depth-151"><a href="#AbstractMappingSchema.depth-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.depth-152"><a href="#AbstractMappingSchema.depth-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="n">dict_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.depth-138"><a href="#AbstractMappingSchema.depth-138"><span class="linenos">138</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.depth-139"><a href="#AbstractMappingSchema.depth-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">dict_depth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">)</span>
</span></pre></div>
@@ -1374,19 +1320,19 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema.supported_table_args"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.supported_table_args-154"><a href="#AbstractMappingSchema.supported_table_args-154"><span class="linenos">154</span></a> <span class="nd">@property</span>
-</span><span id="AbstractMappingSchema.supported_table_args-155"><a href="#AbstractMappingSchema.supported_table_args-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema.supported_table_args-156"><a href="#AbstractMappingSchema.supported_table_args-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.supported_table_args-157"><a href="#AbstractMappingSchema.supported_table_args-157"><span class="linenos">157</span></a> <span class="n">depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span>
-</span><span id="AbstractMappingSchema.supported_table_args-158"><a href="#AbstractMappingSchema.supported_table_args-158"><span class="linenos">158</span></a>
-</span><span id="AbstractMappingSchema.supported_table_args-159"><a href="#AbstractMappingSchema.supported_table_args-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">depth</span><span class="p">:</span> <span class="c1"># None</span>
-</span><span id="AbstractMappingSchema.supported_table_args-160"><a href="#AbstractMappingSchema.supported_table_args-160"><span class="linenos">160</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
-</span><span id="AbstractMappingSchema.supported_table_args-161"><a href="#AbstractMappingSchema.supported_table_args-161"><span class="linenos">161</span></a> <span class="k">elif</span> <span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">depth</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.supported_table_args-162"><a href="#AbstractMappingSchema.supported_table_args-162"><span class="linenos">162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">[:</span><span class="n">depth</span><span class="p">]</span>
-</span><span id="AbstractMappingSchema.supported_table_args-163"><a href="#AbstractMappingSchema.supported_table_args-163"><span class="linenos">163</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.supported_table_args-164"><a href="#AbstractMappingSchema.supported_table_args-164"><span class="linenos">164</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping shape. Depth: </span><span class="si">{</span><span class="n">depth</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema.supported_table_args-165"><a href="#AbstractMappingSchema.supported_table_args-165"><span class="linenos">165</span></a>
-</span><span id="AbstractMappingSchema.supported_table_args-166"><a href="#AbstractMappingSchema.supported_table_args-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.supported_table_args-141"><a href="#AbstractMappingSchema.supported_table_args-141"><span class="linenos">141</span></a> <span class="nd">@property</span>
+</span><span id="AbstractMappingSchema.supported_table_args-142"><a href="#AbstractMappingSchema.supported_table_args-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">supported_table_args</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">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema.supported_table_args-143"><a href="#AbstractMappingSchema.supported_table_args-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.supported_table_args-144"><a href="#AbstractMappingSchema.supported_table_args-144"><span class="linenos">144</span></a> <span class="n">depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span>
+</span><span id="AbstractMappingSchema.supported_table_args-145"><a href="#AbstractMappingSchema.supported_table_args-145"><span class="linenos">145</span></a>
+</span><span id="AbstractMappingSchema.supported_table_args-146"><a href="#AbstractMappingSchema.supported_table_args-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">depth</span><span class="p">:</span> <span class="c1"># None</span>
+</span><span id="AbstractMappingSchema.supported_table_args-147"><a href="#AbstractMappingSchema.supported_table_args-147"><span class="linenos">147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
+</span><span id="AbstractMappingSchema.supported_table_args-148"><a href="#AbstractMappingSchema.supported_table_args-148"><span class="linenos">148</span></a> <span class="k">elif</span> <span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">depth</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.supported_table_args-149"><a href="#AbstractMappingSchema.supported_table_args-149"><span class="linenos">149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">[:</span><span class="n">depth</span><span class="p">]</span>
+</span><span id="AbstractMappingSchema.supported_table_args-150"><a href="#AbstractMappingSchema.supported_table_args-150"><span class="linenos">150</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.supported_table_args-151"><a href="#AbstractMappingSchema.supported_table_args-151"><span class="linenos">151</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping shape. Depth: </span><span class="si">{</span><span class="n">depth</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema.supported_table_args-152"><a href="#AbstractMappingSchema.supported_table_args-152"><span class="linenos">152</span></a>
+</span><span id="AbstractMappingSchema.supported_table_args-153"><a href="#AbstractMappingSchema.supported_table_args-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_supported_table_args</span>
</span></pre></div>
@@ -1404,10 +1350,10 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema.table_parts"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.table_parts-168"><a href="#AbstractMappingSchema.table_parts-168"><span class="linenos">168</span></a> <span class="k">def</span> <span class="nf">table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema.table_parts-169"><a href="#AbstractMappingSchema.table_parts-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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">ReadCSV</span><span class="p">):</span>
-</span><span id="AbstractMappingSchema.table_parts-170"><a href="#AbstractMappingSchema.table_parts-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
-</span><span id="AbstractMappingSchema.table_parts-171"><a href="#AbstractMappingSchema.table_parts-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.table_parts-155"><a href="#AbstractMappingSchema.table_parts-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema.table_parts-156"><a href="#AbstractMappingSchema.table_parts-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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">ReadCSV</span><span class="p">):</span>
+</span><span id="AbstractMappingSchema.table_parts-157"><a href="#AbstractMappingSchema.table_parts-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
+</span><span id="AbstractMappingSchema.table_parts-158"><a href="#AbstractMappingSchema.table_parts-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span> <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">part</span><span class="p">)]</span>
</span></pre></div>
@@ -1425,29 +1371,54 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema.find"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.find-173"><a href="#AbstractMappingSchema.find-173"><span class="linenos">173</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema.find-174"><a href="#AbstractMappingSchema.find-174"><span class="linenos">174</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">table</span><span class="p">)[</span><span class="mi">0</span> <span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">)]</span>
-</span><span id="AbstractMappingSchema.find-175"><a href="#AbstractMappingSchema.find-175"><span class="linenos">175</span></a> <span class="n">value</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">,</span> <span class="n">parts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.find-160"><a href="#AbstractMappingSchema.find-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema.find-161"><a href="#AbstractMappingSchema.find-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="AbstractMappingSchema.find-162"><a href="#AbstractMappingSchema.find-162"><span class="linenos">162</span></a><span class="sd"> Returns the schema of a given table.</span>
+</span><span id="AbstractMappingSchema.find-163"><a href="#AbstractMappingSchema.find-163"><span class="linenos">163</span></a>
+</span><span id="AbstractMappingSchema.find-164"><a href="#AbstractMappingSchema.find-164"><span class="linenos">164</span></a><span class="sd"> Args:</span>
+</span><span id="AbstractMappingSchema.find-165"><a href="#AbstractMappingSchema.find-165"><span class="linenos">165</span></a><span class="sd"> table: the target table.</span>
+</span><span id="AbstractMappingSchema.find-166"><a href="#AbstractMappingSchema.find-166"><span class="linenos">166</span></a><span class="sd"> raise_on_missing: whether or not to raise in case the schema is not found.</span>
+</span><span id="AbstractMappingSchema.find-167"><a href="#AbstractMappingSchema.find-167"><span class="linenos">167</span></a>
+</span><span id="AbstractMappingSchema.find-168"><a href="#AbstractMappingSchema.find-168"><span class="linenos">168</span></a><span class="sd"> Returns:</span>
+</span><span id="AbstractMappingSchema.find-169"><a href="#AbstractMappingSchema.find-169"><span class="linenos">169</span></a><span class="sd"> The schema of the target table.</span>
+</span><span id="AbstractMappingSchema.find-170"><a href="#AbstractMappingSchema.find-170"><span class="linenos">170</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="AbstractMappingSchema.find-171"><a href="#AbstractMappingSchema.find-171"><span class="linenos">171</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">table</span><span class="p">)[</span><span class="mi">0</span> <span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">)]</span>
+</span><span id="AbstractMappingSchema.find-172"><a href="#AbstractMappingSchema.find-172"><span class="linenos">172</span></a> <span class="n">value</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">,</span> <span class="n">parts</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema.find-173"><a href="#AbstractMappingSchema.find-173"><span class="linenos">173</span></a>
+</span><span id="AbstractMappingSchema.find-174"><a href="#AbstractMappingSchema.find-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.find-175"><a href="#AbstractMappingSchema.find-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="AbstractMappingSchema.find-176"><a href="#AbstractMappingSchema.find-176"><span class="linenos">176</span></a>
-</span><span id="AbstractMappingSchema.find-177"><a href="#AbstractMappingSchema.find-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.find-178"><a href="#AbstractMappingSchema.find-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="AbstractMappingSchema.find-177"><a href="#AbstractMappingSchema.find-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.find-178"><a href="#AbstractMappingSchema.find-178"><span class="linenos">178</span></a> <span class="n">possibilities</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">trie</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="AbstractMappingSchema.find-179"><a href="#AbstractMappingSchema.find-179"><span class="linenos">179</span></a>
-</span><span id="AbstractMappingSchema.find-180"><a href="#AbstractMappingSchema.find-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.find-181"><a href="#AbstractMappingSchema.find-181"><span class="linenos">181</span></a> <span class="n">possibilities</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">trie</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema.find-182"><a href="#AbstractMappingSchema.find-182"><span class="linenos">182</span></a>
-</span><span id="AbstractMappingSchema.find-183"><a href="#AbstractMappingSchema.find-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">possibilities</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.find-184"><a href="#AbstractMappingSchema.find-184"><span class="linenos">184</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">possibilities</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="AbstractMappingSchema.find-185"><a href="#AbstractMappingSchema.find-185"><span class="linenos">185</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.find-186"><a href="#AbstractMappingSchema.find-186"><span class="linenos">186</span></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="k">for</span> <span class="n">parts</span> <span class="ow">in</span> <span class="n">possibilities</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema.find-187"><a href="#AbstractMappingSchema.find-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
-</span><span id="AbstractMappingSchema.find-188"><a href="#AbstractMappingSchema.find-188"><span class="linenos">188</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous mapping for </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="AbstractMappingSchema.find-189"><a href="#AbstractMappingSchema.find-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="AbstractMappingSchema.find-190"><a href="#AbstractMappingSchema.find-190"><span class="linenos">190</span></a>
-</span><span id="AbstractMappingSchema.find-191"><a href="#AbstractMappingSchema.find-191"><span class="linenos">191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema.find-180"><a href="#AbstractMappingSchema.find-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">possibilities</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.find-181"><a href="#AbstractMappingSchema.find-181"><span class="linenos">181</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">possibilities</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="AbstractMappingSchema.find-182"><a href="#AbstractMappingSchema.find-182"><span class="linenos">182</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.find-183"><a href="#AbstractMappingSchema.find-183"><span class="linenos">183</span></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="k">for</span> <span class="n">parts</span> <span class="ow">in</span> <span class="n">possibilities</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema.find-184"><a href="#AbstractMappingSchema.find-184"><span class="linenos">184</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
+</span><span id="AbstractMappingSchema.find-185"><a href="#AbstractMappingSchema.find-185"><span class="linenos">185</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous mapping for </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="AbstractMappingSchema.find-186"><a href="#AbstractMappingSchema.find-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="AbstractMappingSchema.find-187"><a href="#AbstractMappingSchema.find-187"><span class="linenos">187</span></a>
+</span><span id="AbstractMappingSchema.find-188"><a href="#AbstractMappingSchema.find-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">)</span>
</span></pre></div>
-
+ <div class="docstring"><p>Returns the schema of a given table.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>table:</strong> the target table.</li>
+<li><strong>raise_on_missing:</strong> whether or not to raise in case the schema is not found.</li>
+</ul>
+
+<h6 id="returns">Returns:</h6>
+
+<blockquote>
+ <p>The schema of the target table.</p>
+</blockquote>
+</div>
+
</div>
<div id="AbstractMappingSchema.nested_get" class="classattr">
@@ -1461,14 +1432,14 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#AbstractMappingSchema.nested_get"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.nested_get-193"><a href="#AbstractMappingSchema.nested_get-193"><span class="linenos">193</span></a> <span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema.nested_get-194"><a href="#AbstractMappingSchema.nested_get-194"><span class="linenos">194</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="AbstractMappingSchema.nested_get-195"><a href="#AbstractMappingSchema.nested_get-195"><span class="linenos">195</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="AbstractMappingSchema.nested_get-196"><a href="#AbstractMappingSchema.nested_get-196"><span class="linenos">196</span></a> <span class="k">return</span> <span class="n">nested_get</span><span class="p">(</span>
-</span><span id="AbstractMappingSchema.nested_get-197"><a href="#AbstractMappingSchema.nested_get-197"><span class="linenos">197</span></a> <span class="n">d</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema.nested_get-198"><a href="#AbstractMappingSchema.nested_get-198"><span class="linenos">198</span></a> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span>
-</span><span id="AbstractMappingSchema.nested_get-199"><a href="#AbstractMappingSchema.nested_get-199"><span class="linenos">199</span></a> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">,</span>
-</span><span id="AbstractMappingSchema.nested_get-200"><a href="#AbstractMappingSchema.nested_get-200"><span class="linenos">200</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AbstractMappingSchema.nested_get-190"><a href="#AbstractMappingSchema.nested_get-190"><span class="linenos">190</span></a> <span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema.nested_get-191"><a href="#AbstractMappingSchema.nested_get-191"><span class="linenos">191</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="AbstractMappingSchema.nested_get-192"><a href="#AbstractMappingSchema.nested_get-192"><span class="linenos">192</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="AbstractMappingSchema.nested_get-193"><a href="#AbstractMappingSchema.nested_get-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="n">nested_get</span><span class="p">(</span>
+</span><span id="AbstractMappingSchema.nested_get-194"><a href="#AbstractMappingSchema.nested_get-194"><span class="linenos">194</span></a> <span class="n">d</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema.nested_get-195"><a href="#AbstractMappingSchema.nested_get-195"><span class="linenos">195</span></a> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">supported_table_args</span><span class="p">,</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span>
+</span><span id="AbstractMappingSchema.nested_get-196"><a href="#AbstractMappingSchema.nested_get-196"><span class="linenos">196</span></a> <span class="n">raise_on_missing</span><span class="o">=</span><span class="n">raise_on_missing</span><span class="p">,</span>
+</span><span id="AbstractMappingSchema.nested_get-197"><a href="#AbstractMappingSchema.nested_get-197"><span class="linenos">197</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1487,257 +1458,257 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#MappingSchema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema-203"><a href="#MappingSchema-203"><span class="linenos">203</span></a><span class="k">class</span> <span class="nc">MappingSchema</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
-</span><span id="MappingSchema-204"><a href="#MappingSchema-204"><span class="linenos">204</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="MappingSchema-205"><a href="#MappingSchema-205"><span class="linenos">205</span></a><span class="sd"> Schema based on a nested mapping.</span>
-</span><span id="MappingSchema-206"><a href="#MappingSchema-206"><span class="linenos">206</span></a>
-</span><span id="MappingSchema-207"><a href="#MappingSchema-207"><span class="linenos">207</span></a><span class="sd"> Args:</span>
-</span><span id="MappingSchema-208"><a href="#MappingSchema-208"><span class="linenos">208</span></a><span class="sd"> schema: Mapping in one of the following forms:</span>
-</span><span id="MappingSchema-209"><a href="#MappingSchema-209"><span class="linenos">209</span></a><span class="sd"> 1. {table: {col: type}}</span>
-</span><span id="MappingSchema-210"><a href="#MappingSchema-210"><span class="linenos">210</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
-</span><span id="MappingSchema-211"><a href="#MappingSchema-211"><span class="linenos">211</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
-</span><span id="MappingSchema-212"><a href="#MappingSchema-212"><span class="linenos">212</span></a><span class="sd"> 4. None - Tables will be added later</span>
-</span><span id="MappingSchema-213"><a href="#MappingSchema-213"><span class="linenos">213</span></a><span class="sd"> visible: Optional mapping of which columns in the schema are visible. If not provided, all columns</span>
-</span><span id="MappingSchema-214"><a href="#MappingSchema-214"><span class="linenos">214</span></a><span class="sd"> are assumed to be visible. The nesting should mirror that of the schema:</span>
-</span><span id="MappingSchema-215"><a href="#MappingSchema-215"><span class="linenos">215</span></a><span class="sd"> 1. {table: set(*cols)}}</span>
-</span><span id="MappingSchema-216"><a href="#MappingSchema-216"><span class="linenos">216</span></a><span class="sd"> 2. {db: {table: set(*cols)}}}</span>
-</span><span id="MappingSchema-217"><a href="#MappingSchema-217"><span class="linenos">217</span></a><span class="sd"> 3. {catalog: {db: {table: set(*cols)}}}}</span>
-</span><span id="MappingSchema-218"><a href="#MappingSchema-218"><span class="linenos">218</span></a><span class="sd"> dialect: The dialect to be used for custom type mappings &amp; parsing string arguments.</span>
-</span><span id="MappingSchema-219"><a href="#MappingSchema-219"><span class="linenos">219</span></a><span class="sd"> normalize: Whether to normalize identifier names according to the given dialect or not.</span>
-</span><span id="MappingSchema-220"><a href="#MappingSchema-220"><span class="linenos">220</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="MappingSchema-221"><a href="#MappingSchema-221"><span class="linenos">221</span></a>
-</span><span id="MappingSchema-222"><a href="#MappingSchema-222"><span class="linenos">222</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="MappingSchema-223"><a href="#MappingSchema-223"><span class="linenos">223</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema-224"><a href="#MappingSchema-224"><span class="linenos">224</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-225"><a href="#MappingSchema-225"><span class="linenos">225</span></a> <span class="n">visible</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-226"><a href="#MappingSchema-226"><span class="linenos">226</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-227"><a href="#MappingSchema-227"><span class="linenos">227</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="MappingSchema-228"><a href="#MappingSchema-228"><span class="linenos">228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="MappingSchema-229"><a href="#MappingSchema-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span>
-</span><span id="MappingSchema-230"><a href="#MappingSchema-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">visible</span>
-</span><span id="MappingSchema-231"><a href="#MappingSchema-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="MappingSchema-232"><a href="#MappingSchema-232"><span class="linenos">232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="MappingSchema-233"><a href="#MappingSchema-233"><span class="linenos">233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="MappingSchema-234"><a href="#MappingSchema-234"><span class="linenos">234</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">schema</span>
-</span><span id="MappingSchema-235"><a href="#MappingSchema-235"><span class="linenos">235</span></a>
-</span><span id="MappingSchema-236"><a href="#MappingSchema-236"><span class="linenos">236</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">else</span> <span class="n">schema</span><span class="p">)</span>
-</span><span id="MappingSchema-237"><a href="#MappingSchema-237"><span class="linenos">237</span></a>
-</span><span id="MappingSchema-238"><a href="#MappingSchema-238"><span class="linenos">238</span></a> <span class="nd">@classmethod</span>
-</span><span id="MappingSchema-239"><a href="#MappingSchema-239"><span class="linenos">239</span></a> <span class="k">def</span> <span class="nf">from_mapping_schema</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">mapping_schema</span><span class="p">:</span> <span class="n">MappingSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
-</span><span id="MappingSchema-240"><a href="#MappingSchema-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
-</span><span id="MappingSchema-241"><a href="#MappingSchema-241"><span class="linenos">241</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
-</span><span id="MappingSchema-242"><a href="#MappingSchema-242"><span class="linenos">242</span></a> <span class="n">visible</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">visible</span><span class="p">,</span>
-</span><span id="MappingSchema-243"><a href="#MappingSchema-243"><span class="linenos">243</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="MappingSchema-244"><a href="#MappingSchema-244"><span class="linenos">244</span></a> <span class="n">normalize</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
-</span><span id="MappingSchema-245"><a href="#MappingSchema-245"><span class="linenos">245</span></a> <span class="p">)</span>
-</span><span id="MappingSchema-246"><a href="#MappingSchema-246"><span class="linenos">246</span></a>
-</span><span id="MappingSchema-247"><a href="#MappingSchema-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
-</span><span id="MappingSchema-248"><a href="#MappingSchema-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
-</span><span id="MappingSchema-249"><a href="#MappingSchema-249"><span class="linenos">249</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="MappingSchema-250"><a href="#MappingSchema-250"><span class="linenos">250</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
-</span><span id="MappingSchema-251"><a href="#MappingSchema-251"><span class="linenos">251</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
-</span><span id="MappingSchema-252"><a href="#MappingSchema-252"><span class="linenos">252</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="MappingSchema-253"><a href="#MappingSchema-253"><span class="linenos">253</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
-</span><span id="MappingSchema-254"><a href="#MappingSchema-254"><span class="linenos">254</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="MappingSchema-255"><a href="#MappingSchema-255"><span class="linenos">255</span></a> <span class="p">}</span>
-</span><span id="MappingSchema-256"><a href="#MappingSchema-256"><span class="linenos">256</span></a> <span class="p">)</span>
-</span><span id="MappingSchema-257"><a href="#MappingSchema-257"><span class="linenos">257</span></a>
-</span><span id="MappingSchema-258"><a href="#MappingSchema-258"><span class="linenos">258</span></a> <span class="k">def</span> <span class="nf">add_table</span><span class="p">(</span>
-</span><span id="MappingSchema-259"><a href="#MappingSchema-259"><span class="linenos">259</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema-260"><a href="#MappingSchema-260"><span class="linenos">260</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema-261"><a href="#MappingSchema-261"><span class="linenos">261</span></a> <span class="n">column_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-262"><a href="#MappingSchema-262"><span class="linenos">262</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-263"><a href="#MappingSchema-263"><span class="linenos">263</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-264"><a href="#MappingSchema-264"><span class="linenos">264</span></a> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="MappingSchema-265"><a href="#MappingSchema-265"><span class="linenos">265</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="MappingSchema-266"><a href="#MappingSchema-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="MappingSchema-267"><a href="#MappingSchema-267"><span class="linenos">267</span></a><span class="sd"> Register or update a table. Updates are only performed if a new column mapping is provided.</span>
-</span><span id="MappingSchema-268"><a href="#MappingSchema-268"><span class="linenos">268</span></a><span class="sd"> The added table must have the necessary number of qualifiers in its path to match the schema&#39;s nesting level.</span>
-</span><span id="MappingSchema-269"><a href="#MappingSchema-269"><span class="linenos">269</span></a>
-</span><span id="MappingSchema-270"><a href="#MappingSchema-270"><span class="linenos">270</span></a><span class="sd"> Args:</span>
-</span><span id="MappingSchema-271"><a href="#MappingSchema-271"><span class="linenos">271</span></a><span class="sd"> table: the `Table` expression instance or string representing the table.</span>
-</span><span id="MappingSchema-272"><a href="#MappingSchema-272"><span class="linenos">272</span></a><span class="sd"> column_mapping: a column mapping that describes the structure of the table.</span>
-</span><span id="MappingSchema-273"><a href="#MappingSchema-273"><span class="linenos">273</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `table` if it&#39;s a string.</span>
-</span><span id="MappingSchema-274"><a href="#MappingSchema-274"><span class="linenos">274</span></a><span class="sd"> normalize: whether to normalize identifiers according to the dialect of interest.</span>
-</span><span id="MappingSchema-275"><a href="#MappingSchema-275"><span class="linenos">275</span></a><span class="sd"> match_depth: whether to enforce that the table must match the schema&#39;s depth or not.</span>
-</span><span id="MappingSchema-276"><a href="#MappingSchema-276"><span class="linenos">276</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="MappingSchema-277"><a href="#MappingSchema-277"><span class="linenos">277</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema-278"><a href="#MappingSchema-278"><span class="linenos">278</span></a>
-</span><span id="MappingSchema-279"><a href="#MappingSchema-279"><span class="linenos">279</span></a> <span class="k">if</span> <span class="n">match_depth</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">():</span>
-</span><span id="MappingSchema-280"><a href="#MappingSchema-280"><span class="linenos">280</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
-</span><span id="MappingSchema-281"><a href="#MappingSchema-281"><span class="linenos">281</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2"> must match the &quot;</span>
-</span><span id="MappingSchema-282"><a href="#MappingSchema-282"><span class="linenos">282</span></a> <span class="sa">f</span><span class="s2">&quot;schema&#39;s nesting level: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="MappingSchema-283"><a href="#MappingSchema-283"><span class="linenos">283</span></a> <span class="p">)</span>
-</span><span id="MappingSchema-284"><a href="#MappingSchema-284"><span class="linenos">284</span></a>
-</span><span id="MappingSchema-285"><a href="#MappingSchema-285"><span class="linenos">285</span></a> <span class="n">normalized_column_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MappingSchema-286"><a href="#MappingSchema-286"><span class="linenos">286</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">):</span> <span class="n">value</span>
-</span><span id="MappingSchema-287"><a href="#MappingSchema-287"><span class="linenos">287</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ensure_column_mapping</span><span class="p">(</span><span class="n">column_mapping</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="MappingSchema-288"><a href="#MappingSchema-288"><span class="linenos">288</span></a> <span class="p">}</span>
-</span><span id="MappingSchema-289"><a href="#MappingSchema-289"><span class="linenos">289</span></a>
-</span><span id="MappingSchema-290"><a href="#MappingSchema-290"><span class="linenos">290</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MappingSchema-291"><a href="#MappingSchema-291"><span class="linenos">291</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">normalized_column_mapping</span><span class="p">:</span>
-</span><span id="MappingSchema-292"><a href="#MappingSchema-292"><span class="linenos">292</span></a> <span class="k">return</span>
-</span><span id="MappingSchema-293"><a href="#MappingSchema-293"><span class="linenos">293</span></a>
-</span><span id="MappingSchema-294"><a href="#MappingSchema-294"><span class="linenos">294</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema-200"><a href="#MappingSchema-200"><span class="linenos">200</span></a><span class="k">class</span> <span class="nc">MappingSchema</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
+</span><span id="MappingSchema-201"><a href="#MappingSchema-201"><span class="linenos">201</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="MappingSchema-202"><a href="#MappingSchema-202"><span class="linenos">202</span></a><span class="sd"> Schema based on a nested mapping.</span>
+</span><span id="MappingSchema-203"><a href="#MappingSchema-203"><span class="linenos">203</span></a>
+</span><span id="MappingSchema-204"><a href="#MappingSchema-204"><span class="linenos">204</span></a><span class="sd"> Args:</span>
+</span><span id="MappingSchema-205"><a href="#MappingSchema-205"><span class="linenos">205</span></a><span class="sd"> schema: Mapping in one of the following forms:</span>
+</span><span id="MappingSchema-206"><a href="#MappingSchema-206"><span class="linenos">206</span></a><span class="sd"> 1. {table: {col: type}}</span>
+</span><span id="MappingSchema-207"><a href="#MappingSchema-207"><span class="linenos">207</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
+</span><span id="MappingSchema-208"><a href="#MappingSchema-208"><span class="linenos">208</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
+</span><span id="MappingSchema-209"><a href="#MappingSchema-209"><span class="linenos">209</span></a><span class="sd"> 4. None - Tables will be added later</span>
+</span><span id="MappingSchema-210"><a href="#MappingSchema-210"><span class="linenos">210</span></a><span class="sd"> visible: Optional mapping of which columns in the schema are visible. If not provided, all columns</span>
+</span><span id="MappingSchema-211"><a href="#MappingSchema-211"><span class="linenos">211</span></a><span class="sd"> are assumed to be visible. The nesting should mirror that of the schema:</span>
+</span><span id="MappingSchema-212"><a href="#MappingSchema-212"><span class="linenos">212</span></a><span class="sd"> 1. {table: set(*cols)}}</span>
+</span><span id="MappingSchema-213"><a href="#MappingSchema-213"><span class="linenos">213</span></a><span class="sd"> 2. {db: {table: set(*cols)}}}</span>
+</span><span id="MappingSchema-214"><a href="#MappingSchema-214"><span class="linenos">214</span></a><span class="sd"> 3. {catalog: {db: {table: set(*cols)}}}}</span>
+</span><span id="MappingSchema-215"><a href="#MappingSchema-215"><span class="linenos">215</span></a><span class="sd"> dialect: The dialect to be used for custom type mappings &amp; parsing string arguments.</span>
+</span><span id="MappingSchema-216"><a href="#MappingSchema-216"><span class="linenos">216</span></a><span class="sd"> normalize: Whether to normalize identifier names according to the given dialect or not.</span>
+</span><span id="MappingSchema-217"><a href="#MappingSchema-217"><span class="linenos">217</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="MappingSchema-218"><a href="#MappingSchema-218"><span class="linenos">218</span></a>
+</span><span id="MappingSchema-219"><a href="#MappingSchema-219"><span class="linenos">219</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="MappingSchema-220"><a href="#MappingSchema-220"><span class="linenos">220</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema-221"><a href="#MappingSchema-221"><span class="linenos">221</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-222"><a href="#MappingSchema-222"><span class="linenos">222</span></a> <span class="n">visible</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-223"><a href="#MappingSchema-223"><span class="linenos">223</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-224"><a href="#MappingSchema-224"><span class="linenos">224</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="MappingSchema-225"><a href="#MappingSchema-225"><span class="linenos">225</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="MappingSchema-226"><a href="#MappingSchema-226"><span class="linenos">226</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span>
+</span><span id="MappingSchema-227"><a href="#MappingSchema-227"><span class="linenos">227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">visible</span>
+</span><span id="MappingSchema-228"><a href="#MappingSchema-228"><span class="linenos">228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="MappingSchema-229"><a href="#MappingSchema-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="MappingSchema-230"><a href="#MappingSchema-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="MappingSchema-231"><a href="#MappingSchema-231"><span class="linenos">231</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">schema</span>
+</span><span id="MappingSchema-232"><a href="#MappingSchema-232"><span class="linenos">232</span></a>
+</span><span id="MappingSchema-233"><a href="#MappingSchema-233"><span class="linenos">233</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">else</span> <span class="n">schema</span><span class="p">)</span>
+</span><span id="MappingSchema-234"><a href="#MappingSchema-234"><span class="linenos">234</span></a>
+</span><span id="MappingSchema-235"><a href="#MappingSchema-235"><span class="linenos">235</span></a> <span class="nd">@classmethod</span>
+</span><span id="MappingSchema-236"><a href="#MappingSchema-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">from_mapping_schema</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">mapping_schema</span><span class="p">:</span> <span class="n">MappingSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
+</span><span id="MappingSchema-237"><a href="#MappingSchema-237"><span class="linenos">237</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
+</span><span id="MappingSchema-238"><a href="#MappingSchema-238"><span class="linenos">238</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
+</span><span id="MappingSchema-239"><a href="#MappingSchema-239"><span class="linenos">239</span></a> <span class="n">visible</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">visible</span><span class="p">,</span>
+</span><span id="MappingSchema-240"><a href="#MappingSchema-240"><span class="linenos">240</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="MappingSchema-241"><a href="#MappingSchema-241"><span class="linenos">241</span></a> <span class="n">normalize</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
+</span><span id="MappingSchema-242"><a href="#MappingSchema-242"><span class="linenos">242</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-243"><a href="#MappingSchema-243"><span class="linenos">243</span></a>
+</span><span id="MappingSchema-244"><a href="#MappingSchema-244"><span class="linenos">244</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
+</span><span id="MappingSchema-245"><a href="#MappingSchema-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
+</span><span id="MappingSchema-246"><a href="#MappingSchema-246"><span class="linenos">246</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="MappingSchema-247"><a href="#MappingSchema-247"><span class="linenos">247</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="MappingSchema-248"><a href="#MappingSchema-248"><span class="linenos">248</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="MappingSchema-249"><a href="#MappingSchema-249"><span class="linenos">249</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="MappingSchema-250"><a href="#MappingSchema-250"><span class="linenos">250</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
+</span><span id="MappingSchema-251"><a href="#MappingSchema-251"><span class="linenos">251</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="MappingSchema-252"><a href="#MappingSchema-252"><span class="linenos">252</span></a> <span class="p">}</span>
+</span><span id="MappingSchema-253"><a href="#MappingSchema-253"><span class="linenos">253</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-254"><a href="#MappingSchema-254"><span class="linenos">254</span></a>
+</span><span id="MappingSchema-255"><a href="#MappingSchema-255"><span class="linenos">255</span></a> <span class="k">def</span> <span class="nf">add_table</span><span class="p">(</span>
+</span><span id="MappingSchema-256"><a href="#MappingSchema-256"><span class="linenos">256</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema-257"><a href="#MappingSchema-257"><span class="linenos">257</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema-258"><a href="#MappingSchema-258"><span class="linenos">258</span></a> <span class="n">column_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-259"><a href="#MappingSchema-259"><span class="linenos">259</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-260"><a href="#MappingSchema-260"><span class="linenos">260</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-261"><a href="#MappingSchema-261"><span class="linenos">261</span></a> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="MappingSchema-262"><a href="#MappingSchema-262"><span class="linenos">262</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="MappingSchema-263"><a href="#MappingSchema-263"><span class="linenos">263</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="MappingSchema-264"><a href="#MappingSchema-264"><span class="linenos">264</span></a><span class="sd"> Register or update a table. Updates are only performed if a new column mapping is provided.</span>
+</span><span id="MappingSchema-265"><a href="#MappingSchema-265"><span class="linenos">265</span></a><span class="sd"> The added table must have the necessary number of qualifiers in its path to match the schema&#39;s nesting level.</span>
+</span><span id="MappingSchema-266"><a href="#MappingSchema-266"><span class="linenos">266</span></a>
+</span><span id="MappingSchema-267"><a href="#MappingSchema-267"><span class="linenos">267</span></a><span class="sd"> Args:</span>
+</span><span id="MappingSchema-268"><a href="#MappingSchema-268"><span class="linenos">268</span></a><span class="sd"> table: the `Table` expression instance or string representing the table.</span>
+</span><span id="MappingSchema-269"><a href="#MappingSchema-269"><span class="linenos">269</span></a><span class="sd"> column_mapping: a column mapping that describes the structure of the table.</span>
+</span><span id="MappingSchema-270"><a href="#MappingSchema-270"><span class="linenos">270</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `table` if it&#39;s a string.</span>
+</span><span id="MappingSchema-271"><a href="#MappingSchema-271"><span class="linenos">271</span></a><span class="sd"> normalize: whether to normalize identifiers according to the dialect of interest.</span>
+</span><span id="MappingSchema-272"><a href="#MappingSchema-272"><span class="linenos">272</span></a><span class="sd"> match_depth: whether to enforce that the table must match the schema&#39;s depth or not.</span>
+</span><span id="MappingSchema-273"><a href="#MappingSchema-273"><span class="linenos">273</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="MappingSchema-274"><a href="#MappingSchema-274"><span class="linenos">274</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema-275"><a href="#MappingSchema-275"><span class="linenos">275</span></a>
+</span><span id="MappingSchema-276"><a href="#MappingSchema-276"><span class="linenos">276</span></a> <span class="k">if</span> <span class="n">match_depth</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">():</span>
+</span><span id="MappingSchema-277"><a href="#MappingSchema-277"><span class="linenos">277</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
+</span><span id="MappingSchema-278"><a href="#MappingSchema-278"><span class="linenos">278</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2"> must match the &quot;</span>
+</span><span id="MappingSchema-279"><a href="#MappingSchema-279"><span class="linenos">279</span></a> <span class="sa">f</span><span class="s2">&quot;schema&#39;s nesting level: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="MappingSchema-280"><a href="#MappingSchema-280"><span class="linenos">280</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-281"><a href="#MappingSchema-281"><span class="linenos">281</span></a>
+</span><span id="MappingSchema-282"><a href="#MappingSchema-282"><span class="linenos">282</span></a> <span class="n">normalized_column_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MappingSchema-283"><a href="#MappingSchema-283"><span class="linenos">283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">):</span> <span class="n">value</span>
+</span><span id="MappingSchema-284"><a href="#MappingSchema-284"><span class="linenos">284</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ensure_column_mapping</span><span class="p">(</span><span class="n">column_mapping</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="MappingSchema-285"><a href="#MappingSchema-285"><span class="linenos">285</span></a> <span class="p">}</span>
+</span><span id="MappingSchema-286"><a href="#MappingSchema-286"><span class="linenos">286</span></a>
+</span><span id="MappingSchema-287"><a href="#MappingSchema-287"><span class="linenos">287</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MappingSchema-288"><a href="#MappingSchema-288"><span class="linenos">288</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">normalized_column_mapping</span><span class="p">:</span>
+</span><span id="MappingSchema-289"><a href="#MappingSchema-289"><span class="linenos">289</span></a> <span class="k">return</span>
+</span><span id="MappingSchema-290"><a href="#MappingSchema-290"><span class="linenos">290</span></a>
+</span><span id="MappingSchema-291"><a href="#MappingSchema-291"><span class="linenos">291</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+</span><span id="MappingSchema-292"><a href="#MappingSchema-292"><span class="linenos">292</span></a>
+</span><span id="MappingSchema-293"><a href="#MappingSchema-293"><span class="linenos">293</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span> <span class="n">normalized_column_mapping</span><span class="p">)</span>
+</span><span id="MappingSchema-294"><a href="#MappingSchema-294"><span class="linenos">294</span></a> <span class="n">new_trie</span><span class="p">([</span><span class="n">parts</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">)</span>
</span><span id="MappingSchema-295"><a href="#MappingSchema-295"><span class="linenos">295</span></a>
-</span><span id="MappingSchema-296"><a href="#MappingSchema-296"><span class="linenos">296</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span> <span class="n">normalized_column_mapping</span><span class="p">)</span>
-</span><span id="MappingSchema-297"><a href="#MappingSchema-297"><span class="linenos">297</span></a> <span class="n">new_trie</span><span class="p">([</span><span class="n">parts</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">)</span>
-</span><span id="MappingSchema-298"><a href="#MappingSchema-298"><span class="linenos">298</span></a>
-</span><span id="MappingSchema-299"><a href="#MappingSchema-299"><span class="linenos">299</span></a> <span class="k">def</span> <span class="nf">column_names</span><span class="p">(</span>
-</span><span id="MappingSchema-300"><a href="#MappingSchema-300"><span class="linenos">300</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema-301"><a href="#MappingSchema-301"><span class="linenos">301</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema-302"><a href="#MappingSchema-302"><span class="linenos">302</span></a> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MappingSchema-303"><a href="#MappingSchema-303"><span class="linenos">303</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-304"><a href="#MappingSchema-304"><span class="linenos">304</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-305"><a href="#MappingSchema-305"><span class="linenos">305</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="MappingSchema-306"><a href="#MappingSchema-306"><span class="linenos">306</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema-307"><a href="#MappingSchema-307"><span class="linenos">307</span></a>
-</span><span id="MappingSchema-308"><a href="#MappingSchema-308"><span class="linenos">308</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
-</span><span id="MappingSchema-309"><a href="#MappingSchema-309"><span class="linenos">309</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="MappingSchema-310"><a href="#MappingSchema-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="MappingSchema-296"><a href="#MappingSchema-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">column_names</span><span class="p">(</span>
+</span><span id="MappingSchema-297"><a href="#MappingSchema-297"><span class="linenos">297</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema-298"><a href="#MappingSchema-298"><span class="linenos">298</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema-299"><a href="#MappingSchema-299"><span class="linenos">299</span></a> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MappingSchema-300"><a href="#MappingSchema-300"><span class="linenos">300</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-301"><a href="#MappingSchema-301"><span class="linenos">301</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-302"><a href="#MappingSchema-302"><span class="linenos">302</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="MappingSchema-303"><a href="#MappingSchema-303"><span class="linenos">303</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema-304"><a href="#MappingSchema-304"><span class="linenos">304</span></a>
+</span><span id="MappingSchema-305"><a href="#MappingSchema-305"><span class="linenos">305</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+</span><span id="MappingSchema-306"><a href="#MappingSchema-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="MappingSchema-307"><a href="#MappingSchema-307"><span class="linenos">307</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="MappingSchema-308"><a href="#MappingSchema-308"><span class="linenos">308</span></a>
+</span><span id="MappingSchema-309"><a href="#MappingSchema-309"><span class="linenos">309</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">only_visible</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">:</span>
+</span><span id="MappingSchema-310"><a href="#MappingSchema-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
</span><span id="MappingSchema-311"><a href="#MappingSchema-311"><span class="linenos">311</span></a>
-</span><span id="MappingSchema-312"><a href="#MappingSchema-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">only_visible</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">:</span>
-</span><span id="MappingSchema-313"><a href="#MappingSchema-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="MappingSchema-312"><a href="#MappingSchema-312"><span class="linenos">312</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="MappingSchema-313"><a href="#MappingSchema-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span> <span class="k">if</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">visible</span><span class="p">]</span>
</span><span id="MappingSchema-314"><a href="#MappingSchema-314"><span class="linenos">314</span></a>
-</span><span id="MappingSchema-315"><a href="#MappingSchema-315"><span class="linenos">315</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="MappingSchema-316"><a href="#MappingSchema-316"><span class="linenos">316</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span> <span class="k">if</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">visible</span><span class="p">]</span>
-</span><span id="MappingSchema-317"><a href="#MappingSchema-317"><span class="linenos">317</span></a>
-</span><span id="MappingSchema-318"><a href="#MappingSchema-318"><span class="linenos">318</span></a> <span class="k">def</span> <span class="nf">get_column_type</span><span class="p">(</span>
-</span><span id="MappingSchema-319"><a href="#MappingSchema-319"><span class="linenos">319</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema-320"><a href="#MappingSchema-320"><span class="linenos">320</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema-321"><a href="#MappingSchema-321"><span class="linenos">321</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema-322"><a href="#MappingSchema-322"><span class="linenos">322</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-323"><a href="#MappingSchema-323"><span class="linenos">323</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-324"><a href="#MappingSchema-324"><span class="linenos">324</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
-</span><span id="MappingSchema-325"><a href="#MappingSchema-325"><span class="linenos">325</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema-326"><a href="#MappingSchema-326"><span class="linenos">326</span></a>
-</span><span id="MappingSchema-327"><a href="#MappingSchema-327"><span class="linenos">327</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
-</span><span id="MappingSchema-328"><a href="#MappingSchema-328"><span class="linenos">328</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
-</span><span id="MappingSchema-329"><a href="#MappingSchema-329"><span class="linenos">329</span></a> <span class="p">)</span>
-</span><span id="MappingSchema-330"><a href="#MappingSchema-330"><span class="linenos">330</span></a>
-</span><span id="MappingSchema-331"><a href="#MappingSchema-331"><span class="linenos">331</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MappingSchema-332"><a href="#MappingSchema-332"><span class="linenos">332</span></a> <span class="k">if</span> <span class="n">table_schema</span><span class="p">:</span>
-</span><span id="MappingSchema-333"><a href="#MappingSchema-333"><span class="linenos">333</span></a> <span class="n">column_type</span> <span class="o">=</span> <span class="n">table_schema</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">normalized_column_name</span><span class="p">)</span>
-</span><span id="MappingSchema-334"><a href="#MappingSchema-334"><span class="linenos">334</span></a>
-</span><span id="MappingSchema-335"><a href="#MappingSchema-335"><span class="linenos">335</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
-</span><span id="MappingSchema-336"><a href="#MappingSchema-336"><span class="linenos">336</span></a> <span class="k">return</span> <span class="n">column_type</span>
-</span><span id="MappingSchema-337"><a href="#MappingSchema-337"><span class="linenos">337</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="MappingSchema-338"><a href="#MappingSchema-338"><span class="linenos">338</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_data_type</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="MappingSchema-339"><a href="#MappingSchema-339"><span class="linenos">339</span></a>
-</span><span id="MappingSchema-340"><a href="#MappingSchema-340"><span class="linenos">340</span></a> <span class="k">return</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="s2">&quot;unknown&quot;</span><span class="p">)</span>
-</span><span id="MappingSchema-341"><a href="#MappingSchema-341"><span class="linenos">341</span></a>
-</span><span id="MappingSchema-342"><a href="#MappingSchema-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">has_column</span><span class="p">(</span>
-</span><span id="MappingSchema-343"><a href="#MappingSchema-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema-344"><a href="#MappingSchema-344"><span class="linenos">344</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema-345"><a href="#MappingSchema-345"><span class="linenos">345</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema-346"><a href="#MappingSchema-346"><span class="linenos">346</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-347"><a href="#MappingSchema-347"><span class="linenos">347</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-348"><a href="#MappingSchema-348"><span class="linenos">348</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="MappingSchema-349"><a href="#MappingSchema-349"><span class="linenos">349</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema-350"><a href="#MappingSchema-350"><span class="linenos">350</span></a>
-</span><span id="MappingSchema-351"><a href="#MappingSchema-351"><span class="linenos">351</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
-</span><span id="MappingSchema-352"><a href="#MappingSchema-352"><span class="linenos">352</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
-</span><span id="MappingSchema-353"><a href="#MappingSchema-353"><span class="linenos">353</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-315"><a href="#MappingSchema-315"><span class="linenos">315</span></a> <span class="k">def</span> <span class="nf">get_column_type</span><span class="p">(</span>
+</span><span id="MappingSchema-316"><a href="#MappingSchema-316"><span class="linenos">316</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema-317"><a href="#MappingSchema-317"><span class="linenos">317</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema-318"><a href="#MappingSchema-318"><span class="linenos">318</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema-319"><a href="#MappingSchema-319"><span class="linenos">319</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-320"><a href="#MappingSchema-320"><span class="linenos">320</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-321"><a href="#MappingSchema-321"><span class="linenos">321</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
+</span><span id="MappingSchema-322"><a href="#MappingSchema-322"><span class="linenos">322</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema-323"><a href="#MappingSchema-323"><span class="linenos">323</span></a>
+</span><span id="MappingSchema-324"><a href="#MappingSchema-324"><span class="linenos">324</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
+</span><span id="MappingSchema-325"><a href="#MappingSchema-325"><span class="linenos">325</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
+</span><span id="MappingSchema-326"><a href="#MappingSchema-326"><span class="linenos">326</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-327"><a href="#MappingSchema-327"><span class="linenos">327</span></a>
+</span><span id="MappingSchema-328"><a href="#MappingSchema-328"><span class="linenos">328</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MappingSchema-329"><a href="#MappingSchema-329"><span class="linenos">329</span></a> <span class="k">if</span> <span class="n">table_schema</span><span class="p">:</span>
+</span><span id="MappingSchema-330"><a href="#MappingSchema-330"><span class="linenos">330</span></a> <span class="n">column_type</span> <span class="o">=</span> <span class="n">table_schema</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">normalized_column_name</span><span class="p">)</span>
+</span><span id="MappingSchema-331"><a href="#MappingSchema-331"><span class="linenos">331</span></a>
+</span><span id="MappingSchema-332"><a href="#MappingSchema-332"><span class="linenos">332</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
+</span><span id="MappingSchema-333"><a href="#MappingSchema-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="n">column_type</span>
+</span><span id="MappingSchema-334"><a href="#MappingSchema-334"><span class="linenos">334</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="MappingSchema-335"><a href="#MappingSchema-335"><span class="linenos">335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_data_type</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="MappingSchema-336"><a href="#MappingSchema-336"><span class="linenos">336</span></a>
+</span><span id="MappingSchema-337"><a href="#MappingSchema-337"><span class="linenos">337</span></a> <span class="k">return</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="s2">&quot;unknown&quot;</span><span class="p">)</span>
+</span><span id="MappingSchema-338"><a href="#MappingSchema-338"><span class="linenos">338</span></a>
+</span><span id="MappingSchema-339"><a href="#MappingSchema-339"><span class="linenos">339</span></a> <span class="k">def</span> <span class="nf">has_column</span><span class="p">(</span>
+</span><span id="MappingSchema-340"><a href="#MappingSchema-340"><span class="linenos">340</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema-341"><a href="#MappingSchema-341"><span class="linenos">341</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema-342"><a href="#MappingSchema-342"><span class="linenos">342</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema-343"><a href="#MappingSchema-343"><span class="linenos">343</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-344"><a href="#MappingSchema-344"><span class="linenos">344</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-345"><a href="#MappingSchema-345"><span class="linenos">345</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="MappingSchema-346"><a href="#MappingSchema-346"><span class="linenos">346</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema-347"><a href="#MappingSchema-347"><span class="linenos">347</span></a>
+</span><span id="MappingSchema-348"><a href="#MappingSchema-348"><span class="linenos">348</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
+</span><span id="MappingSchema-349"><a href="#MappingSchema-349"><span class="linenos">349</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
+</span><span id="MappingSchema-350"><a href="#MappingSchema-350"><span class="linenos">350</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-351"><a href="#MappingSchema-351"><span class="linenos">351</span></a>
+</span><span id="MappingSchema-352"><a href="#MappingSchema-352"><span class="linenos">352</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MappingSchema-353"><a href="#MappingSchema-353"><span class="linenos">353</span></a> <span class="k">return</span> <span class="n">normalized_column_name</span> <span class="ow">in</span> <span class="n">table_schema</span> <span class="k">if</span> <span class="n">table_schema</span> <span class="k">else</span> <span class="kc">False</span>
</span><span id="MappingSchema-354"><a href="#MappingSchema-354"><span class="linenos">354</span></a>
-</span><span id="MappingSchema-355"><a href="#MappingSchema-355"><span class="linenos">355</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MappingSchema-356"><a href="#MappingSchema-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="n">normalized_column_name</span> <span class="ow">in</span> <span class="n">table_schema</span> <span class="k">if</span> <span class="n">table_schema</span> <span class="k">else</span> <span class="kc">False</span>
-</span><span id="MappingSchema-357"><a href="#MappingSchema-357"><span class="linenos">357</span></a>
-</span><span id="MappingSchema-358"><a href="#MappingSchema-358"><span class="linenos">358</span></a> <span class="k">def</span> <span class="nf">_normalize</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="MappingSchema-359"><a href="#MappingSchema-359"><span class="linenos">359</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="MappingSchema-360"><a href="#MappingSchema-360"><span class="linenos">360</span></a><span class="sd"> Normalizes all identifiers in the schema.</span>
+</span><span id="MappingSchema-355"><a href="#MappingSchema-355"><span class="linenos">355</span></a> <span class="k">def</span> <span class="nf">_normalize</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="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="MappingSchema-356"><a href="#MappingSchema-356"><span class="linenos">356</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="MappingSchema-357"><a href="#MappingSchema-357"><span class="linenos">357</span></a><span class="sd"> Normalizes all identifiers in the schema.</span>
+</span><span id="MappingSchema-358"><a href="#MappingSchema-358"><span class="linenos">358</span></a>
+</span><span id="MappingSchema-359"><a href="#MappingSchema-359"><span class="linenos">359</span></a><span class="sd"> Args:</span>
+</span><span id="MappingSchema-360"><a href="#MappingSchema-360"><span class="linenos">360</span></a><span class="sd"> schema: the schema to normalize.</span>
</span><span id="MappingSchema-361"><a href="#MappingSchema-361"><span class="linenos">361</span></a>
-</span><span id="MappingSchema-362"><a href="#MappingSchema-362"><span class="linenos">362</span></a><span class="sd"> Args:</span>
-</span><span id="MappingSchema-363"><a href="#MappingSchema-363"><span class="linenos">363</span></a><span class="sd"> schema: the schema to normalize.</span>
-</span><span id="MappingSchema-364"><a href="#MappingSchema-364"><span class="linenos">364</span></a>
-</span><span id="MappingSchema-365"><a href="#MappingSchema-365"><span class="linenos">365</span></a><span class="sd"> Returns:</span>
-</span><span id="MappingSchema-366"><a href="#MappingSchema-366"><span class="linenos">366</span></a><span class="sd"> The normalized schema mapping.</span>
-</span><span id="MappingSchema-367"><a href="#MappingSchema-367"><span class="linenos">367</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="MappingSchema-368"><a href="#MappingSchema-368"><span class="linenos">368</span></a> <span class="n">normalized_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="MappingSchema-369"><a href="#MappingSchema-369"><span class="linenos">369</span></a> <span class="n">flattened_schema</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="MappingSchema-362"><a href="#MappingSchema-362"><span class="linenos">362</span></a><span class="sd"> Returns:</span>
+</span><span id="MappingSchema-363"><a href="#MappingSchema-363"><span class="linenos">363</span></a><span class="sd"> The normalized schema mapping.</span>
+</span><span id="MappingSchema-364"><a href="#MappingSchema-364"><span class="linenos">364</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="MappingSchema-365"><a href="#MappingSchema-365"><span class="linenos">365</span></a> <span class="n">normalized_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="MappingSchema-366"><a href="#MappingSchema-366"><span class="linenos">366</span></a> <span class="n">flattened_schema</span> <span class="o">=</span> <span class="n">flatten_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">dict_depth</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="MappingSchema-367"><a href="#MappingSchema-367"><span class="linenos">367</span></a>
+</span><span id="MappingSchema-368"><a href="#MappingSchema-368"><span class="linenos">368</span></a> <span class="k">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_schema</span><span class="p">:</span>
+</span><span id="MappingSchema-369"><a href="#MappingSchema-369"><span class="linenos">369</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
</span><span id="MappingSchema-370"><a href="#MappingSchema-370"><span class="linenos">370</span></a>
-</span><span id="MappingSchema-371"><a href="#MappingSchema-371"><span class="linenos">371</span></a> <span class="k">for</span> <span class="n">keys</span> <span class="ow">in</span> <span class="n">flattened_schema</span><span class="p">:</span>
-</span><span id="MappingSchema-372"><a href="#MappingSchema-372"><span class="linenos">372</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">nested_get</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">keys</span><span class="p">))</span>
-</span><span id="MappingSchema-373"><a href="#MappingSchema-373"><span class="linenos">373</span></a>
-</span><span id="MappingSchema-374"><a href="#MappingSchema-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="MappingSchema-375"><a href="#MappingSchema-375"><span class="linenos">375</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
-</span><span id="MappingSchema-376"><a href="#MappingSchema-376"><span class="linenos">376</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2"> must match the schema&#39;s nesting level: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">flattened_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="MappingSchema-377"><a href="#MappingSchema-377"><span class="linenos">377</span></a> <span class="p">)</span>
-</span><span id="MappingSchema-378"><a href="#MappingSchema-378"><span class="linenos">378</span></a>
-</span><span id="MappingSchema-379"><a href="#MappingSchema-379"><span class="linenos">379</span></a> <span class="n">normalized_keys</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">]</span>
-</span><span id="MappingSchema-380"><a href="#MappingSchema-380"><span class="linenos">380</span></a> <span class="k">for</span> <span class="n">column_name</span><span class="p">,</span> <span class="n">column_type</span> <span class="ow">in</span> <span class="n">columns</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="MappingSchema-381"><a href="#MappingSchema-381"><span class="linenos">381</span></a> <span class="n">nested_set</span><span class="p">(</span>
-</span><span id="MappingSchema-382"><a href="#MappingSchema-382"><span class="linenos">382</span></a> <span class="n">normalized_mapping</span><span class="p">,</span>
-</span><span id="MappingSchema-383"><a href="#MappingSchema-383"><span class="linenos">383</span></a> <span class="n">normalized_keys</span> <span class="o">+</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">column_name</span><span class="p">)],</span>
-</span><span id="MappingSchema-384"><a href="#MappingSchema-384"><span class="linenos">384</span></a> <span class="n">column_type</span><span class="p">,</span>
-</span><span id="MappingSchema-385"><a href="#MappingSchema-385"><span class="linenos">385</span></a> <span class="p">)</span>
-</span><span id="MappingSchema-386"><a href="#MappingSchema-386"><span class="linenos">386</span></a>
-</span><span id="MappingSchema-387"><a href="#MappingSchema-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="n">normalized_mapping</span>
-</span><span id="MappingSchema-388"><a href="#MappingSchema-388"><span class="linenos">388</span></a>
-</span><span id="MappingSchema-389"><a href="#MappingSchema-389"><span class="linenos">389</span></a> <span class="k">def</span> <span class="nf">_normalize_table</span><span class="p">(</span>
-</span><span id="MappingSchema-390"><a href="#MappingSchema-390"><span class="linenos">390</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema-391"><a href="#MappingSchema-391"><span class="linenos">391</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema-392"><a href="#MappingSchema-392"><span class="linenos">392</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-393"><a href="#MappingSchema-393"><span class="linenos">393</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-394"><a href="#MappingSchema-394"><span class="linenos">394</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
-</span><span id="MappingSchema-395"><a href="#MappingSchema-395"><span class="linenos">395</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
-</span><span id="MappingSchema-396"><a href="#MappingSchema-396"><span class="linenos">396</span></a> <span class="n">normalize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span>
-</span><span id="MappingSchema-397"><a href="#MappingSchema-397"><span class="linenos">397</span></a>
-</span><span id="MappingSchema-398"><a href="#MappingSchema-398"><span class="linenos">398</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema-399"><a href="#MappingSchema-399"><span class="linenos">399</span></a>
-</span><span id="MappingSchema-400"><a href="#MappingSchema-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="n">normalize</span><span class="p">:</span>
-</span><span id="MappingSchema-401"><a href="#MappingSchema-401"><span class="linenos">401</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">:</span>
-</span><span id="MappingSchema-402"><a href="#MappingSchema-402"><span class="linenos">402</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">normalized_table</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="MappingSchema-403"><a href="#MappingSchema-403"><span class="linenos">403</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="MappingSchema-404"><a href="#MappingSchema-404"><span class="linenos">404</span></a> <span class="n">normalized_table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="MappingSchema-405"><a href="#MappingSchema-405"><span class="linenos">405</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="MappingSchema-406"><a href="#MappingSchema-406"><span class="linenos">406</span></a> <span class="n">normalize_name</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">),</span>
-</span><span id="MappingSchema-407"><a href="#MappingSchema-407"><span class="linenos">407</span></a> <span class="p">)</span>
-</span><span id="MappingSchema-408"><a href="#MappingSchema-408"><span class="linenos">408</span></a>
-</span><span id="MappingSchema-409"><a href="#MappingSchema-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="n">normalized_table</span>
-</span><span id="MappingSchema-410"><a href="#MappingSchema-410"><span class="linenos">410</span></a>
-</span><span id="MappingSchema-411"><a href="#MappingSchema-411"><span class="linenos">411</span></a> <span class="k">def</span> <span class="nf">_normalize_name</span><span class="p">(</span>
-</span><span id="MappingSchema-412"><a href="#MappingSchema-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema-413"><a href="#MappingSchema-413"><span class="linenos">413</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="MappingSchema-414"><a href="#MappingSchema-414"><span class="linenos">414</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-415"><a href="#MappingSchema-415"><span class="linenos">415</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MappingSchema-416"><a href="#MappingSchema-416"><span class="linenos">416</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema-417"><a href="#MappingSchema-417"><span class="linenos">417</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MappingSchema-418"><a href="#MappingSchema-418"><span class="linenos">418</span></a> <span class="k">return</span> <span class="n">normalize_name</span><span class="p">(</span>
-</span><span id="MappingSchema-419"><a href="#MappingSchema-419"><span class="linenos">419</span></a> <span class="n">name</span><span class="p">,</span>
-</span><span id="MappingSchema-420"><a href="#MappingSchema-420"><span class="linenos">420</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="MappingSchema-421"><a href="#MappingSchema-421"><span class="linenos">421</span></a> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span>
-</span><span id="MappingSchema-422"><a href="#MappingSchema-422"><span class="linenos">422</span></a> <span class="n">normalize</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span><span class="p">,</span>
-</span><span id="MappingSchema-423"><a href="#MappingSchema-423"><span class="linenos">423</span></a> <span class="p">)</span><span class="o">.</span><span class="n">name</span>
-</span><span id="MappingSchema-424"><a href="#MappingSchema-424"><span class="linenos">424</span></a>
-</span><span id="MappingSchema-425"><a href="#MappingSchema-425"><span class="linenos">425</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="MappingSchema-426"><a href="#MappingSchema-426"><span class="linenos">426</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
-</span><span id="MappingSchema-427"><a href="#MappingSchema-427"><span class="linenos">427</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
-</span><span id="MappingSchema-428"><a href="#MappingSchema-428"><span class="linenos">428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="MappingSchema-429"><a href="#MappingSchema-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
-</span><span id="MappingSchema-430"><a href="#MappingSchema-430"><span class="linenos">430</span></a>
-</span><span id="MappingSchema-431"><a href="#MappingSchema-431"><span class="linenos">431</span></a> <span class="k">def</span> <span class="nf">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
-</span><span id="MappingSchema-432"><a href="#MappingSchema-432"><span class="linenos">432</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="MappingSchema-433"><a href="#MappingSchema-433"><span class="linenos">433</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</span>
-</span><span id="MappingSchema-434"><a href="#MappingSchema-434"><span class="linenos">434</span></a>
-</span><span id="MappingSchema-435"><a href="#MappingSchema-435"><span class="linenos">435</span></a><span class="sd"> Args:</span>
-</span><span id="MappingSchema-436"><a href="#MappingSchema-436"><span class="linenos">436</span></a><span class="sd"> schema_type: the type we want to convert.</span>
-</span><span id="MappingSchema-437"><a href="#MappingSchema-437"><span class="linenos">437</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</span>
-</span><span id="MappingSchema-438"><a href="#MappingSchema-438"><span class="linenos">438</span></a>
-</span><span id="MappingSchema-439"><a href="#MappingSchema-439"><span class="linenos">439</span></a><span class="sd"> Returns:</span>
-</span><span id="MappingSchema-440"><a href="#MappingSchema-440"><span class="linenos">440</span></a><span class="sd"> The resulting expression type.</span>
-</span><span id="MappingSchema-441"><a href="#MappingSchema-441"><span class="linenos">441</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="MappingSchema-442"><a href="#MappingSchema-442"><span class="linenos">442</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
-</span><span id="MappingSchema-443"><a href="#MappingSchema-443"><span class="linenos">443</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
-</span><span id="MappingSchema-444"><a href="#MappingSchema-444"><span class="linenos">444</span></a> <span class="n">udt</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span>
-</span><span id="MappingSchema-445"><a href="#MappingSchema-445"><span class="linenos">445</span></a>
-</span><span id="MappingSchema-446"><a href="#MappingSchema-446"><span class="linenos">446</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="MappingSchema-447"><a href="#MappingSchema-447"><span class="linenos">447</span></a> <span class="n">expression</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">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="n">udt</span><span class="p">)</span>
-</span><span id="MappingSchema-448"><a href="#MappingSchema-448"><span class="linenos">448</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="MappingSchema-449"><a href="#MappingSchema-449"><span class="linenos">449</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
-</span><span id="MappingSchema-450"><a href="#MappingSchema-450"><span class="linenos">450</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MappingSchema-451"><a href="#MappingSchema-451"><span class="linenos">451</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="MappingSchema-452"><a href="#MappingSchema-452"><span class="linenos">452</span></a>
-</span><span id="MappingSchema-453"><a href="#MappingSchema-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
+</span><span id="MappingSchema-371"><a href="#MappingSchema-371"><span class="linenos">371</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">columns</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="MappingSchema-372"><a href="#MappingSchema-372"><span class="linenos">372</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
+</span><span id="MappingSchema-373"><a href="#MappingSchema-373"><span class="linenos">373</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s2"> must match the schema&#39;s nesting level: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">flattened_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="MappingSchema-374"><a href="#MappingSchema-374"><span class="linenos">374</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-375"><a href="#MappingSchema-375"><span class="linenos">375</span></a>
+</span><span id="MappingSchema-376"><a href="#MappingSchema-376"><span class="linenos">376</span></a> <span class="n">normalized_keys</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">]</span>
+</span><span id="MappingSchema-377"><a href="#MappingSchema-377"><span class="linenos">377</span></a> <span class="k">for</span> <span class="n">column_name</span><span class="p">,</span> <span class="n">column_type</span> <span class="ow">in</span> <span class="n">columns</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="MappingSchema-378"><a href="#MappingSchema-378"><span class="linenos">378</span></a> <span class="n">nested_set</span><span class="p">(</span>
+</span><span id="MappingSchema-379"><a href="#MappingSchema-379"><span class="linenos">379</span></a> <span class="n">normalized_mapping</span><span class="p">,</span>
+</span><span id="MappingSchema-380"><a href="#MappingSchema-380"><span class="linenos">380</span></a> <span class="n">normalized_keys</span> <span class="o">+</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">column_name</span><span class="p">)],</span>
+</span><span id="MappingSchema-381"><a href="#MappingSchema-381"><span class="linenos">381</span></a> <span class="n">column_type</span><span class="p">,</span>
+</span><span id="MappingSchema-382"><a href="#MappingSchema-382"><span class="linenos">382</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-383"><a href="#MappingSchema-383"><span class="linenos">383</span></a>
+</span><span id="MappingSchema-384"><a href="#MappingSchema-384"><span class="linenos">384</span></a> <span class="k">return</span> <span class="n">normalized_mapping</span>
+</span><span id="MappingSchema-385"><a href="#MappingSchema-385"><span class="linenos">385</span></a>
+</span><span id="MappingSchema-386"><a href="#MappingSchema-386"><span class="linenos">386</span></a> <span class="k">def</span> <span class="nf">_normalize_table</span><span class="p">(</span>
+</span><span id="MappingSchema-387"><a href="#MappingSchema-387"><span class="linenos">387</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema-388"><a href="#MappingSchema-388"><span class="linenos">388</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema-389"><a href="#MappingSchema-389"><span class="linenos">389</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-390"><a href="#MappingSchema-390"><span class="linenos">390</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-391"><a href="#MappingSchema-391"><span class="linenos">391</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
+</span><span id="MappingSchema-392"><a href="#MappingSchema-392"><span class="linenos">392</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="MappingSchema-393"><a href="#MappingSchema-393"><span class="linenos">393</span></a> <span class="n">normalize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span>
+</span><span id="MappingSchema-394"><a href="#MappingSchema-394"><span class="linenos">394</span></a>
+</span><span id="MappingSchema-395"><a href="#MappingSchema-395"><span class="linenos">395</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema-396"><a href="#MappingSchema-396"><span class="linenos">396</span></a>
+</span><span id="MappingSchema-397"><a href="#MappingSchema-397"><span class="linenos">397</span></a> <span class="k">if</span> <span class="n">normalize</span><span class="p">:</span>
+</span><span id="MappingSchema-398"><a href="#MappingSchema-398"><span class="linenos">398</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">TABLE_PARTS</span><span class="p">:</span>
+</span><span id="MappingSchema-399"><a href="#MappingSchema-399"><span class="linenos">399</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">normalized_table</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="MappingSchema-400"><a href="#MappingSchema-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="MappingSchema-401"><a href="#MappingSchema-401"><span class="linenos">401</span></a> <span class="n">normalized_table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="MappingSchema-402"><a href="#MappingSchema-402"><span class="linenos">402</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="MappingSchema-403"><a href="#MappingSchema-403"><span class="linenos">403</span></a> <span class="n">normalize_name</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">),</span>
+</span><span id="MappingSchema-404"><a href="#MappingSchema-404"><span class="linenos">404</span></a> <span class="p">)</span>
+</span><span id="MappingSchema-405"><a href="#MappingSchema-405"><span class="linenos">405</span></a>
+</span><span id="MappingSchema-406"><a href="#MappingSchema-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="n">normalized_table</span>
+</span><span id="MappingSchema-407"><a href="#MappingSchema-407"><span class="linenos">407</span></a>
+</span><span id="MappingSchema-408"><a href="#MappingSchema-408"><span class="linenos">408</span></a> <span class="k">def</span> <span class="nf">_normalize_name</span><span class="p">(</span>
+</span><span id="MappingSchema-409"><a href="#MappingSchema-409"><span class="linenos">409</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema-410"><a href="#MappingSchema-410"><span class="linenos">410</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="MappingSchema-411"><a href="#MappingSchema-411"><span class="linenos">411</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-412"><a href="#MappingSchema-412"><span class="linenos">412</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MappingSchema-413"><a href="#MappingSchema-413"><span class="linenos">413</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema-414"><a href="#MappingSchema-414"><span class="linenos">414</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MappingSchema-415"><a href="#MappingSchema-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="n">normalize_name</span><span class="p">(</span>
+</span><span id="MappingSchema-416"><a href="#MappingSchema-416"><span class="linenos">416</span></a> <span class="n">name</span><span class="p">,</span>
+</span><span id="MappingSchema-417"><a href="#MappingSchema-417"><span class="linenos">417</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="MappingSchema-418"><a href="#MappingSchema-418"><span class="linenos">418</span></a> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span>
+</span><span id="MappingSchema-419"><a href="#MappingSchema-419"><span class="linenos">419</span></a> <span class="n">normalize</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">if</span> <span class="n">normalize</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">normalize</span><span class="p">,</span>
+</span><span id="MappingSchema-420"><a href="#MappingSchema-420"><span class="linenos">420</span></a> <span class="p">)</span><span class="o">.</span><span class="n">name</span>
+</span><span id="MappingSchema-421"><a href="#MappingSchema-421"><span class="linenos">421</span></a>
+</span><span id="MappingSchema-422"><a href="#MappingSchema-422"><span class="linenos">422</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="MappingSchema-423"><a href="#MappingSchema-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
+</span><span id="MappingSchema-424"><a href="#MappingSchema-424"><span class="linenos">424</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
+</span><span id="MappingSchema-425"><a href="#MappingSchema-425"><span class="linenos">425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="MappingSchema-426"><a href="#MappingSchema-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
+</span><span id="MappingSchema-427"><a href="#MappingSchema-427"><span class="linenos">427</span></a>
+</span><span id="MappingSchema-428"><a href="#MappingSchema-428"><span class="linenos">428</span></a> <span class="k">def</span> <span class="nf">_to_data_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
+</span><span id="MappingSchema-429"><a href="#MappingSchema-429"><span class="linenos">429</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="MappingSchema-430"><a href="#MappingSchema-430"><span class="linenos">430</span></a><span class="sd"> Convert a type represented as a string to the corresponding `sqlglot.exp.DataType` object.</span>
+</span><span id="MappingSchema-431"><a href="#MappingSchema-431"><span class="linenos">431</span></a>
+</span><span id="MappingSchema-432"><a href="#MappingSchema-432"><span class="linenos">432</span></a><span class="sd"> Args:</span>
+</span><span id="MappingSchema-433"><a href="#MappingSchema-433"><span class="linenos">433</span></a><span class="sd"> schema_type: the type we want to convert.</span>
+</span><span id="MappingSchema-434"><a href="#MappingSchema-434"><span class="linenos">434</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `schema_type`, if needed.</span>
+</span><span id="MappingSchema-435"><a href="#MappingSchema-435"><span class="linenos">435</span></a>
+</span><span id="MappingSchema-436"><a href="#MappingSchema-436"><span class="linenos">436</span></a><span class="sd"> Returns:</span>
+</span><span id="MappingSchema-437"><a href="#MappingSchema-437"><span class="linenos">437</span></a><span class="sd"> The resulting expression type.</span>
+</span><span id="MappingSchema-438"><a href="#MappingSchema-438"><span class="linenos">438</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="MappingSchema-439"><a href="#MappingSchema-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">schema_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span>
+</span><span id="MappingSchema-440"><a href="#MappingSchema-440"><span class="linenos">440</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
+</span><span id="MappingSchema-441"><a href="#MappingSchema-441"><span class="linenos">441</span></a> <span class="n">udt</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span>
+</span><span id="MappingSchema-442"><a href="#MappingSchema-442"><span class="linenos">442</span></a>
+</span><span id="MappingSchema-443"><a href="#MappingSchema-443"><span class="linenos">443</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="MappingSchema-444"><a href="#MappingSchema-444"><span class="linenos">444</span></a> <span class="n">expression</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">schema_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="n">udt</span><span class="p">)</span>
+</span><span id="MappingSchema-445"><a href="#MappingSchema-445"><span class="linenos">445</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="MappingSchema-446"><a href="#MappingSchema-446"><span class="linenos">446</span></a> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+</span><span id="MappingSchema-447"><a href="#MappingSchema-447"><span class="linenos">447</span></a> <span class="n">in_dialect</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; in dialect </span><span class="si">{</span><span class="n">dialect</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">dialect</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MappingSchema-448"><a href="#MappingSchema-448"><span class="linenos">448</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to build type &#39;</span><span class="si">{</span><span class="n">schema_type</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">in_dialect</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="MappingSchema-449"><a href="#MappingSchema-449"><span class="linenos">449</span></a>
+</span><span id="MappingSchema-450"><a href="#MappingSchema-450"><span class="linenos">450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">[</span><span class="n">schema_type</span><span class="p">]</span>
</span></pre></div>
@@ -1776,21 +1747,21 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#MappingSchema.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.__init__-222"><a href="#MappingSchema.__init__-222"><span class="linenos">222</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="MappingSchema.__init__-223"><a href="#MappingSchema.__init__-223"><span class="linenos">223</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema.__init__-224"><a href="#MappingSchema.__init__-224"><span class="linenos">224</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.__init__-225"><a href="#MappingSchema.__init__-225"><span class="linenos">225</span></a> <span class="n">visible</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.__init__-226"><a href="#MappingSchema.__init__-226"><span class="linenos">226</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.__init__-227"><a href="#MappingSchema.__init__-227"><span class="linenos">227</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="MappingSchema.__init__-228"><a href="#MappingSchema.__init__-228"><span class="linenos">228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="MappingSchema.__init__-229"><a href="#MappingSchema.__init__-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span>
-</span><span id="MappingSchema.__init__-230"><a href="#MappingSchema.__init__-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">visible</span>
-</span><span id="MappingSchema.__init__-231"><a href="#MappingSchema.__init__-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
-</span><span id="MappingSchema.__init__-232"><a href="#MappingSchema.__init__-232"><span class="linenos">232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="MappingSchema.__init__-233"><a href="#MappingSchema.__init__-233"><span class="linenos">233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="MappingSchema.__init__-234"><a href="#MappingSchema.__init__-234"><span class="linenos">234</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">schema</span>
-</span><span id="MappingSchema.__init__-235"><a href="#MappingSchema.__init__-235"><span class="linenos">235</span></a>
-</span><span id="MappingSchema.__init__-236"><a href="#MappingSchema.__init__-236"><span class="linenos">236</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">else</span> <span class="n">schema</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.__init__-219"><a href="#MappingSchema.__init__-219"><span class="linenos">219</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="MappingSchema.__init__-220"><a href="#MappingSchema.__init__-220"><span class="linenos">220</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema.__init__-221"><a href="#MappingSchema.__init__-221"><span class="linenos">221</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.__init__-222"><a href="#MappingSchema.__init__-222"><span class="linenos">222</span></a> <span class="n">visible</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.__init__-223"><a href="#MappingSchema.__init__-223"><span class="linenos">223</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.__init__-224"><a href="#MappingSchema.__init__-224"><span class="linenos">224</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="MappingSchema.__init__-225"><a href="#MappingSchema.__init__-225"><span class="linenos">225</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="MappingSchema.__init__-226"><a href="#MappingSchema.__init__-226"><span class="linenos">226</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span>
+</span><span id="MappingSchema.__init__-227"><a href="#MappingSchema.__init__-227"><span class="linenos">227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">visible</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">visible</span>
+</span><span id="MappingSchema.__init__-228"><a href="#MappingSchema.__init__-228"><span class="linenos">228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="o">=</span> <span class="n">normalize</span>
+</span><span id="MappingSchema.__init__-229"><a href="#MappingSchema.__init__-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_type_mapping_cache</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="MappingSchema.__init__-230"><a href="#MappingSchema.__init__-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="MappingSchema.__init__-231"><a href="#MappingSchema.__init__-231"><span class="linenos">231</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">schema</span>
+</span><span id="MappingSchema.__init__-232"><a href="#MappingSchema.__init__-232"><span class="linenos">232</span></a>
+</span><span id="MappingSchema.__init__-233"><a href="#MappingSchema.__init__-233"><span class="linenos">233</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_normalize</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span> <span class="k">else</span> <span class="n">schema</span><span class="p">)</span>
</span></pre></div>
@@ -1842,14 +1813,14 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#MappingSchema.from_mapping_schema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.from_mapping_schema-238"><a href="#MappingSchema.from_mapping_schema-238"><span class="linenos">238</span></a> <span class="nd">@classmethod</span>
-</span><span id="MappingSchema.from_mapping_schema-239"><a href="#MappingSchema.from_mapping_schema-239"><span class="linenos">239</span></a> <span class="k">def</span> <span class="nf">from_mapping_schema</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">mapping_schema</span><span class="p">:</span> <span class="n">MappingSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
-</span><span id="MappingSchema.from_mapping_schema-240"><a href="#MappingSchema.from_mapping_schema-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
-</span><span id="MappingSchema.from_mapping_schema-241"><a href="#MappingSchema.from_mapping_schema-241"><span class="linenos">241</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
-</span><span id="MappingSchema.from_mapping_schema-242"><a href="#MappingSchema.from_mapping_schema-242"><span class="linenos">242</span></a> <span class="n">visible</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">visible</span><span class="p">,</span>
-</span><span id="MappingSchema.from_mapping_schema-243"><a href="#MappingSchema.from_mapping_schema-243"><span class="linenos">243</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="MappingSchema.from_mapping_schema-244"><a href="#MappingSchema.from_mapping_schema-244"><span class="linenos">244</span></a> <span class="n">normalize</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
-</span><span id="MappingSchema.from_mapping_schema-245"><a href="#MappingSchema.from_mapping_schema-245"><span class="linenos">245</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.from_mapping_schema-235"><a href="#MappingSchema.from_mapping_schema-235"><span class="linenos">235</span></a> <span class="nd">@classmethod</span>
+</span><span id="MappingSchema.from_mapping_schema-236"><a href="#MappingSchema.from_mapping_schema-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">from_mapping_schema</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">mapping_schema</span><span class="p">:</span> <span class="n">MappingSchema</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
+</span><span id="MappingSchema.from_mapping_schema-237"><a href="#MappingSchema.from_mapping_schema-237"><span class="linenos">237</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
+</span><span id="MappingSchema.from_mapping_schema-238"><a href="#MappingSchema.from_mapping_schema-238"><span class="linenos">238</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span>
+</span><span id="MappingSchema.from_mapping_schema-239"><a href="#MappingSchema.from_mapping_schema-239"><span class="linenos">239</span></a> <span class="n">visible</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">visible</span><span class="p">,</span>
+</span><span id="MappingSchema.from_mapping_schema-240"><a href="#MappingSchema.from_mapping_schema-240"><span class="linenos">240</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="MappingSchema.from_mapping_schema-241"><a href="#MappingSchema.from_mapping_schema-241"><span class="linenos">241</span></a> <span class="n">normalize</span><span class="o">=</span><span class="n">mapping_schema</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
+</span><span id="MappingSchema.from_mapping_schema-242"><a href="#MappingSchema.from_mapping_schema-242"><span class="linenos">242</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1867,16 +1838,16 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#MappingSchema.copy"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.copy-247"><a href="#MappingSchema.copy-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
-</span><span id="MappingSchema.copy-248"><a href="#MappingSchema.copy-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
-</span><span id="MappingSchema.copy-249"><a href="#MappingSchema.copy-249"><span class="linenos">249</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="MappingSchema.copy-250"><a href="#MappingSchema.copy-250"><span class="linenos">250</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
-</span><span id="MappingSchema.copy-251"><a href="#MappingSchema.copy-251"><span class="linenos">251</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
-</span><span id="MappingSchema.copy-252"><a href="#MappingSchema.copy-252"><span class="linenos">252</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="MappingSchema.copy-253"><a href="#MappingSchema.copy-253"><span class="linenos">253</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
-</span><span id="MappingSchema.copy-254"><a href="#MappingSchema.copy-254"><span class="linenos">254</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="MappingSchema.copy-255"><a href="#MappingSchema.copy-255"><span class="linenos">255</span></a> <span class="p">}</span>
-</span><span id="MappingSchema.copy-256"><a href="#MappingSchema.copy-256"><span class="linenos">256</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.copy-244"><a href="#MappingSchema.copy-244"><span class="linenos">244</span></a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MappingSchema</span><span class="p">:</span>
+</span><span id="MappingSchema.copy-245"><a href="#MappingSchema.copy-245"><span class="linenos">245</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span>
+</span><span id="MappingSchema.copy-246"><a href="#MappingSchema.copy-246"><span class="linenos">246</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="MappingSchema.copy-247"><a href="#MappingSchema.copy-247"><span class="linenos">247</span></a> <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="MappingSchema.copy-248"><a href="#MappingSchema.copy-248"><span class="linenos">248</span></a> <span class="s2">&quot;visible&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span>
+</span><span id="MappingSchema.copy-249"><a href="#MappingSchema.copy-249"><span class="linenos">249</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="MappingSchema.copy-250"><a href="#MappingSchema.copy-250"><span class="linenos">250</span></a> <span class="s2">&quot;normalize&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize</span><span class="p">,</span>
+</span><span id="MappingSchema.copy-251"><a href="#MappingSchema.copy-251"><span class="linenos">251</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="MappingSchema.copy-252"><a href="#MappingSchema.copy-252"><span class="linenos">252</span></a> <span class="p">}</span>
+</span><span id="MappingSchema.copy-253"><a href="#MappingSchema.copy-253"><span class="linenos">253</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1894,46 +1865,46 @@ are assumed to be visible. The nesting should mirror that of the schema:
</div>
<a class="headerlink" href="#MappingSchema.add_table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.add_table-258"><a href="#MappingSchema.add_table-258"><span class="linenos">258</span></a> <span class="k">def</span> <span class="nf">add_table</span><span class="p">(</span>
-</span><span id="MappingSchema.add_table-259"><a href="#MappingSchema.add_table-259"><span class="linenos">259</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema.add_table-260"><a href="#MappingSchema.add_table-260"><span class="linenos">260</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema.add_table-261"><a href="#MappingSchema.add_table-261"><span class="linenos">261</span></a> <span class="n">column_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.add_table-262"><a href="#MappingSchema.add_table-262"><span class="linenos">262</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.add_table-263"><a href="#MappingSchema.add_table-263"><span class="linenos">263</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.add_table-264"><a href="#MappingSchema.add_table-264"><span class="linenos">264</span></a> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="MappingSchema.add_table-265"><a href="#MappingSchema.add_table-265"><span class="linenos">265</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="MappingSchema.add_table-266"><a href="#MappingSchema.add_table-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="MappingSchema.add_table-267"><a href="#MappingSchema.add_table-267"><span class="linenos">267</span></a><span class="sd"> Register or update a table. Updates are only performed if a new column mapping is provided.</span>
-</span><span id="MappingSchema.add_table-268"><a href="#MappingSchema.add_table-268"><span class="linenos">268</span></a><span class="sd"> The added table must have the necessary number of qualifiers in its path to match the schema&#39;s nesting level.</span>
-</span><span id="MappingSchema.add_table-269"><a href="#MappingSchema.add_table-269"><span class="linenos">269</span></a>
-</span><span id="MappingSchema.add_table-270"><a href="#MappingSchema.add_table-270"><span class="linenos">270</span></a><span class="sd"> Args:</span>
-</span><span id="MappingSchema.add_table-271"><a href="#MappingSchema.add_table-271"><span class="linenos">271</span></a><span class="sd"> table: the `Table` expression instance or string representing the table.</span>
-</span><span id="MappingSchema.add_table-272"><a href="#MappingSchema.add_table-272"><span class="linenos">272</span></a><span class="sd"> column_mapping: a column mapping that describes the structure of the table.</span>
-</span><span id="MappingSchema.add_table-273"><a href="#MappingSchema.add_table-273"><span class="linenos">273</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `table` if it&#39;s a string.</span>
-</span><span id="MappingSchema.add_table-274"><a href="#MappingSchema.add_table-274"><span class="linenos">274</span></a><span class="sd"> normalize: whether to normalize identifiers according to the dialect of interest.</span>
-</span><span id="MappingSchema.add_table-275"><a href="#MappingSchema.add_table-275"><span class="linenos">275</span></a><span class="sd"> match_depth: whether to enforce that the table must match the schema&#39;s depth or not.</span>
-</span><span id="MappingSchema.add_table-276"><a href="#MappingSchema.add_table-276"><span class="linenos">276</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="MappingSchema.add_table-277"><a href="#MappingSchema.add_table-277"><span class="linenos">277</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema.add_table-278"><a href="#MappingSchema.add_table-278"><span class="linenos">278</span></a>
-</span><span id="MappingSchema.add_table-279"><a href="#MappingSchema.add_table-279"><span class="linenos">279</span></a> <span class="k">if</span> <span class="n">match_depth</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">():</span>
-</span><span id="MappingSchema.add_table-280"><a href="#MappingSchema.add_table-280"><span class="linenos">280</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
-</span><span id="MappingSchema.add_table-281"><a href="#MappingSchema.add_table-281"><span class="linenos">281</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2"> must match the &quot;</span>
-</span><span id="MappingSchema.add_table-282"><a href="#MappingSchema.add_table-282"><span class="linenos">282</span></a> <span class="sa">f</span><span class="s2">&quot;schema&#39;s nesting level: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="MappingSchema.add_table-283"><a href="#MappingSchema.add_table-283"><span class="linenos">283</span></a> <span class="p">)</span>
-</span><span id="MappingSchema.add_table-284"><a href="#MappingSchema.add_table-284"><span class="linenos">284</span></a>
-</span><span id="MappingSchema.add_table-285"><a href="#MappingSchema.add_table-285"><span class="linenos">285</span></a> <span class="n">normalized_column_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MappingSchema.add_table-286"><a href="#MappingSchema.add_table-286"><span class="linenos">286</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">):</span> <span class="n">value</span>
-</span><span id="MappingSchema.add_table-287"><a href="#MappingSchema.add_table-287"><span class="linenos">287</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ensure_column_mapping</span><span class="p">(</span><span class="n">column_mapping</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="MappingSchema.add_table-288"><a href="#MappingSchema.add_table-288"><span class="linenos">288</span></a> <span class="p">}</span>
-</span><span id="MappingSchema.add_table-289"><a href="#MappingSchema.add_table-289"><span class="linenos">289</span></a>
-</span><span id="MappingSchema.add_table-290"><a href="#MappingSchema.add_table-290"><span class="linenos">290</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MappingSchema.add_table-291"><a href="#MappingSchema.add_table-291"><span class="linenos">291</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">normalized_column_mapping</span><span class="p">:</span>
-</span><span id="MappingSchema.add_table-292"><a href="#MappingSchema.add_table-292"><span class="linenos">292</span></a> <span class="k">return</span>
-</span><span id="MappingSchema.add_table-293"><a href="#MappingSchema.add_table-293"><span class="linenos">293</span></a>
-</span><span id="MappingSchema.add_table-294"><a href="#MappingSchema.add_table-294"><span class="linenos">294</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
-</span><span id="MappingSchema.add_table-295"><a href="#MappingSchema.add_table-295"><span class="linenos">295</span></a>
-</span><span id="MappingSchema.add_table-296"><a href="#MappingSchema.add_table-296"><span class="linenos">296</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span> <span class="n">normalized_column_mapping</span><span class="p">)</span>
-</span><span id="MappingSchema.add_table-297"><a href="#MappingSchema.add_table-297"><span class="linenos">297</span></a> <span class="n">new_trie</span><span class="p">([</span><span class="n">parts</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.add_table-255"><a href="#MappingSchema.add_table-255"><span class="linenos">255</span></a> <span class="k">def</span> <span class="nf">add_table</span><span class="p">(</span>
+</span><span id="MappingSchema.add_table-256"><a href="#MappingSchema.add_table-256"><span class="linenos">256</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema.add_table-257"><a href="#MappingSchema.add_table-257"><span class="linenos">257</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema.add_table-258"><a href="#MappingSchema.add_table-258"><span class="linenos">258</span></a> <span class="n">column_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.add_table-259"><a href="#MappingSchema.add_table-259"><span class="linenos">259</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.add_table-260"><a href="#MappingSchema.add_table-260"><span class="linenos">260</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.add_table-261"><a href="#MappingSchema.add_table-261"><span class="linenos">261</span></a> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="MappingSchema.add_table-262"><a href="#MappingSchema.add_table-262"><span class="linenos">262</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="MappingSchema.add_table-263"><a href="#MappingSchema.add_table-263"><span class="linenos">263</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="MappingSchema.add_table-264"><a href="#MappingSchema.add_table-264"><span class="linenos">264</span></a><span class="sd"> Register or update a table. Updates are only performed if a new column mapping is provided.</span>
+</span><span id="MappingSchema.add_table-265"><a href="#MappingSchema.add_table-265"><span class="linenos">265</span></a><span class="sd"> The added table must have the necessary number of qualifiers in its path to match the schema&#39;s nesting level.</span>
+</span><span id="MappingSchema.add_table-266"><a href="#MappingSchema.add_table-266"><span class="linenos">266</span></a>
+</span><span id="MappingSchema.add_table-267"><a href="#MappingSchema.add_table-267"><span class="linenos">267</span></a><span class="sd"> Args:</span>
+</span><span id="MappingSchema.add_table-268"><a href="#MappingSchema.add_table-268"><span class="linenos">268</span></a><span class="sd"> table: the `Table` expression instance or string representing the table.</span>
+</span><span id="MappingSchema.add_table-269"><a href="#MappingSchema.add_table-269"><span class="linenos">269</span></a><span class="sd"> column_mapping: a column mapping that describes the structure of the table.</span>
+</span><span id="MappingSchema.add_table-270"><a href="#MappingSchema.add_table-270"><span class="linenos">270</span></a><span class="sd"> dialect: the SQL dialect that will be used to parse `table` if it&#39;s a string.</span>
+</span><span id="MappingSchema.add_table-271"><a href="#MappingSchema.add_table-271"><span class="linenos">271</span></a><span class="sd"> normalize: whether to normalize identifiers according to the dialect of interest.</span>
+</span><span id="MappingSchema.add_table-272"><a href="#MappingSchema.add_table-272"><span class="linenos">272</span></a><span class="sd"> match_depth: whether to enforce that the table must match the schema&#39;s depth or not.</span>
+</span><span id="MappingSchema.add_table-273"><a href="#MappingSchema.add_table-273"><span class="linenos">273</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="MappingSchema.add_table-274"><a href="#MappingSchema.add_table-274"><span class="linenos">274</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema.add_table-275"><a href="#MappingSchema.add_table-275"><span class="linenos">275</span></a>
+</span><span id="MappingSchema.add_table-276"><a href="#MappingSchema.add_table-276"><span class="linenos">276</span></a> <span class="k">if</span> <span class="n">match_depth</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">():</span>
+</span><span id="MappingSchema.add_table-277"><a href="#MappingSchema.add_table-277"><span class="linenos">277</span></a> <span class="k">raise</span> <span class="n">SchemaError</span><span class="p">(</span>
+</span><span id="MappingSchema.add_table-278"><a href="#MappingSchema.add_table-278"><span class="linenos">278</span></a> <span class="sa">f</span><span class="s2">&quot;Table </span><span class="si">{</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="si">}</span><span class="s2"> must match the &quot;</span>
+</span><span id="MappingSchema.add_table-279"><a href="#MappingSchema.add_table-279"><span class="linenos">279</span></a> <span class="sa">f</span><span class="s2">&quot;schema&#39;s nesting level: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="MappingSchema.add_table-280"><a href="#MappingSchema.add_table-280"><span class="linenos">280</span></a> <span class="p">)</span>
+</span><span id="MappingSchema.add_table-281"><a href="#MappingSchema.add_table-281"><span class="linenos">281</span></a>
+</span><span id="MappingSchema.add_table-282"><a href="#MappingSchema.add_table-282"><span class="linenos">282</span></a> <span class="n">normalized_column_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MappingSchema.add_table-283"><a href="#MappingSchema.add_table-283"><span class="linenos">283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">):</span> <span class="n">value</span>
+</span><span id="MappingSchema.add_table-284"><a href="#MappingSchema.add_table-284"><span class="linenos">284</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ensure_column_mapping</span><span class="p">(</span><span class="n">column_mapping</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="MappingSchema.add_table-285"><a href="#MappingSchema.add_table-285"><span class="linenos">285</span></a> <span class="p">}</span>
+</span><span id="MappingSchema.add_table-286"><a href="#MappingSchema.add_table-286"><span class="linenos">286</span></a>
+</span><span id="MappingSchema.add_table-287"><a href="#MappingSchema.add_table-287"><span class="linenos">287</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MappingSchema.add_table-288"><a href="#MappingSchema.add_table-288"><span class="linenos">288</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">normalized_column_mapping</span><span class="p">:</span>
+</span><span id="MappingSchema.add_table-289"><a href="#MappingSchema.add_table-289"><span class="linenos">289</span></a> <span class="k">return</span>
+</span><span id="MappingSchema.add_table-290"><a href="#MappingSchema.add_table-290"><span class="linenos">290</span></a>
+</span><span id="MappingSchema.add_table-291"><a href="#MappingSchema.add_table-291"><span class="linenos">291</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+</span><span id="MappingSchema.add_table-292"><a href="#MappingSchema.add_table-292"><span class="linenos">292</span></a>
+</span><span id="MappingSchema.add_table-293"><a href="#MappingSchema.add_table-293"><span class="linenos">293</span></a> <span class="n">nested_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">parts</span><span class="p">)),</span> <span class="n">normalized_column_mapping</span><span class="p">)</span>
+</span><span id="MappingSchema.add_table-294"><a href="#MappingSchema.add_table-294"><span class="linenos">294</span></a> <span class="n">new_trie</span><span class="p">([</span><span class="n">parts</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapping_trie</span><span class="p">)</span>
</span></pre></div>
@@ -1964,24 +1935,24 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#MappingSchema.column_names"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.column_names-299"><a href="#MappingSchema.column_names-299"><span class="linenos">299</span></a> <span class="k">def</span> <span class="nf">column_names</span><span class="p">(</span>
-</span><span id="MappingSchema.column_names-300"><a href="#MappingSchema.column_names-300"><span class="linenos">300</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema.column_names-301"><a href="#MappingSchema.column_names-301"><span class="linenos">301</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema.column_names-302"><a href="#MappingSchema.column_names-302"><span class="linenos">302</span></a> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MappingSchema.column_names-303"><a href="#MappingSchema.column_names-303"><span class="linenos">303</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.column_names-304"><a href="#MappingSchema.column_names-304"><span class="linenos">304</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.column_names-305"><a href="#MappingSchema.column_names-305"><span class="linenos">305</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="MappingSchema.column_names-306"><a href="#MappingSchema.column_names-306"><span class="linenos">306</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema.column_names-307"><a href="#MappingSchema.column_names-307"><span class="linenos">307</span></a>
-</span><span id="MappingSchema.column_names-308"><a href="#MappingSchema.column_names-308"><span class="linenos">308</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
-</span><span id="MappingSchema.column_names-309"><a href="#MappingSchema.column_names-309"><span class="linenos">309</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="MappingSchema.column_names-310"><a href="#MappingSchema.column_names-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="p">[]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.column_names-296"><a href="#MappingSchema.column_names-296"><span class="linenos">296</span></a> <span class="k">def</span> <span class="nf">column_names</span><span class="p">(</span>
+</span><span id="MappingSchema.column_names-297"><a href="#MappingSchema.column_names-297"><span class="linenos">297</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema.column_names-298"><a href="#MappingSchema.column_names-298"><span class="linenos">298</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema.column_names-299"><a href="#MappingSchema.column_names-299"><span class="linenos">299</span></a> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MappingSchema.column_names-300"><a href="#MappingSchema.column_names-300"><span class="linenos">300</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.column_names-301"><a href="#MappingSchema.column_names-301"><span class="linenos">301</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.column_names-302"><a href="#MappingSchema.column_names-302"><span class="linenos">302</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="MappingSchema.column_names-303"><a href="#MappingSchema.column_names-303"><span class="linenos">303</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema.column_names-304"><a href="#MappingSchema.column_names-304"><span class="linenos">304</span></a>
+</span><span id="MappingSchema.column_names-305"><a href="#MappingSchema.column_names-305"><span class="linenos">305</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">)</span>
+</span><span id="MappingSchema.column_names-306"><a href="#MappingSchema.column_names-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="MappingSchema.column_names-307"><a href="#MappingSchema.column_names-307"><span class="linenos">307</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="MappingSchema.column_names-308"><a href="#MappingSchema.column_names-308"><span class="linenos">308</span></a>
+</span><span id="MappingSchema.column_names-309"><a href="#MappingSchema.column_names-309"><span class="linenos">309</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">only_visible</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">:</span>
+</span><span id="MappingSchema.column_names-310"><a href="#MappingSchema.column_names-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
</span><span id="MappingSchema.column_names-311"><a href="#MappingSchema.column_names-311"><span class="linenos">311</span></a>
-</span><span id="MappingSchema.column_names-312"><a href="#MappingSchema.column_names-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">only_visible</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">:</span>
-</span><span id="MappingSchema.column_names-313"><a href="#MappingSchema.column_names-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="MappingSchema.column_names-314"><a href="#MappingSchema.column_names-314"><span class="linenos">314</span></a>
-</span><span id="MappingSchema.column_names-315"><a href="#MappingSchema.column_names-315"><span class="linenos">315</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="MappingSchema.column_names-316"><a href="#MappingSchema.column_names-316"><span class="linenos">316</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span> <span class="k">if</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">visible</span><span class="p">]</span>
+</span><span id="MappingSchema.column_names-312"><a href="#MappingSchema.column_names-312"><span class="linenos">312</span></a> <span class="n">visible</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table_parts</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="MappingSchema.column_names-313"><a href="#MappingSchema.column_names-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span> <span class="k">if</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">visible</span><span class="p">]</span>
</span></pre></div>
@@ -2016,29 +1987,29 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#MappingSchema.get_column_type"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.get_column_type-318"><a href="#MappingSchema.get_column_type-318"><span class="linenos">318</span></a> <span class="k">def</span> <span class="nf">get_column_type</span><span class="p">(</span>
-</span><span id="MappingSchema.get_column_type-319"><a href="#MappingSchema.get_column_type-319"><span class="linenos">319</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema.get_column_type-320"><a href="#MappingSchema.get_column_type-320"><span class="linenos">320</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema.get_column_type-321"><a href="#MappingSchema.get_column_type-321"><span class="linenos">321</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema.get_column_type-322"><a href="#MappingSchema.get_column_type-322"><span class="linenos">322</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.get_column_type-323"><a href="#MappingSchema.get_column_type-323"><span class="linenos">323</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.get_column_type-324"><a href="#MappingSchema.get_column_type-324"><span class="linenos">324</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
-</span><span id="MappingSchema.get_column_type-325"><a href="#MappingSchema.get_column_type-325"><span class="linenos">325</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema.get_column_type-326"><a href="#MappingSchema.get_column_type-326"><span class="linenos">326</span></a>
-</span><span id="MappingSchema.get_column_type-327"><a href="#MappingSchema.get_column_type-327"><span class="linenos">327</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
-</span><span id="MappingSchema.get_column_type-328"><a href="#MappingSchema.get_column_type-328"><span class="linenos">328</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
-</span><span id="MappingSchema.get_column_type-329"><a href="#MappingSchema.get_column_type-329"><span class="linenos">329</span></a> <span class="p">)</span>
-</span><span id="MappingSchema.get_column_type-330"><a href="#MappingSchema.get_column_type-330"><span class="linenos">330</span></a>
-</span><span id="MappingSchema.get_column_type-331"><a href="#MappingSchema.get_column_type-331"><span class="linenos">331</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MappingSchema.get_column_type-332"><a href="#MappingSchema.get_column_type-332"><span class="linenos">332</span></a> <span class="k">if</span> <span class="n">table_schema</span><span class="p">:</span>
-</span><span id="MappingSchema.get_column_type-333"><a href="#MappingSchema.get_column_type-333"><span class="linenos">333</span></a> <span class="n">column_type</span> <span class="o">=</span> <span class="n">table_schema</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">normalized_column_name</span><span class="p">)</span>
-</span><span id="MappingSchema.get_column_type-334"><a href="#MappingSchema.get_column_type-334"><span class="linenos">334</span></a>
-</span><span id="MappingSchema.get_column_type-335"><a href="#MappingSchema.get_column_type-335"><span class="linenos">335</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
-</span><span id="MappingSchema.get_column_type-336"><a href="#MappingSchema.get_column_type-336"><span class="linenos">336</span></a> <span class="k">return</span> <span class="n">column_type</span>
-</span><span id="MappingSchema.get_column_type-337"><a href="#MappingSchema.get_column_type-337"><span class="linenos">337</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="MappingSchema.get_column_type-338"><a href="#MappingSchema.get_column_type-338"><span class="linenos">338</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_data_type</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="MappingSchema.get_column_type-339"><a href="#MappingSchema.get_column_type-339"><span class="linenos">339</span></a>
-</span><span id="MappingSchema.get_column_type-340"><a href="#MappingSchema.get_column_type-340"><span class="linenos">340</span></a> <span class="k">return</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="s2">&quot;unknown&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.get_column_type-315"><a href="#MappingSchema.get_column_type-315"><span class="linenos">315</span></a> <span class="k">def</span> <span class="nf">get_column_type</span><span class="p">(</span>
+</span><span id="MappingSchema.get_column_type-316"><a href="#MappingSchema.get_column_type-316"><span class="linenos">316</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema.get_column_type-317"><a href="#MappingSchema.get_column_type-317"><span class="linenos">317</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema.get_column_type-318"><a href="#MappingSchema.get_column_type-318"><span class="linenos">318</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema.get_column_type-319"><a href="#MappingSchema.get_column_type-319"><span class="linenos">319</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.get_column_type-320"><a href="#MappingSchema.get_column_type-320"><span class="linenos">320</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.get_column_type-321"><a href="#MappingSchema.get_column_type-321"><span class="linenos">321</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span>
+</span><span id="MappingSchema.get_column_type-322"><a href="#MappingSchema.get_column_type-322"><span class="linenos">322</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema.get_column_type-323"><a href="#MappingSchema.get_column_type-323"><span class="linenos">323</span></a>
+</span><span id="MappingSchema.get_column_type-324"><a href="#MappingSchema.get_column_type-324"><span class="linenos">324</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
+</span><span id="MappingSchema.get_column_type-325"><a href="#MappingSchema.get_column_type-325"><span class="linenos">325</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
+</span><span id="MappingSchema.get_column_type-326"><a href="#MappingSchema.get_column_type-326"><span class="linenos">326</span></a> <span class="p">)</span>
+</span><span id="MappingSchema.get_column_type-327"><a href="#MappingSchema.get_column_type-327"><span class="linenos">327</span></a>
+</span><span id="MappingSchema.get_column_type-328"><a href="#MappingSchema.get_column_type-328"><span class="linenos">328</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MappingSchema.get_column_type-329"><a href="#MappingSchema.get_column_type-329"><span class="linenos">329</span></a> <span class="k">if</span> <span class="n">table_schema</span><span class="p">:</span>
+</span><span id="MappingSchema.get_column_type-330"><a href="#MappingSchema.get_column_type-330"><span class="linenos">330</span></a> <span class="n">column_type</span> <span class="o">=</span> <span class="n">table_schema</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">normalized_column_name</span><span class="p">)</span>
+</span><span id="MappingSchema.get_column_type-331"><a href="#MappingSchema.get_column_type-331"><span class="linenos">331</span></a>
+</span><span id="MappingSchema.get_column_type-332"><a href="#MappingSchema.get_column_type-332"><span class="linenos">332</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">):</span>
+</span><span id="MappingSchema.get_column_type-333"><a href="#MappingSchema.get_column_type-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="n">column_type</span>
+</span><span id="MappingSchema.get_column_type-334"><a href="#MappingSchema.get_column_type-334"><span class="linenos">334</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="MappingSchema.get_column_type-335"><a href="#MappingSchema.get_column_type-335"><span class="linenos">335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_data_type</span><span class="p">(</span><span class="n">column_type</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="MappingSchema.get_column_type-336"><a href="#MappingSchema.get_column_type-336"><span class="linenos">336</span></a>
+</span><span id="MappingSchema.get_column_type-337"><a href="#MappingSchema.get_column_type-337"><span class="linenos">337</span></a> <span class="k">return</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="s2">&quot;unknown&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -2073,21 +2044,21 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#MappingSchema.has_column"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.has_column-342"><a href="#MappingSchema.has_column-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">has_column</span><span class="p">(</span>
-</span><span id="MappingSchema.has_column-343"><a href="#MappingSchema.has_column-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="MappingSchema.has_column-344"><a href="#MappingSchema.has_column-344"><span class="linenos">344</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema.has_column-345"><a href="#MappingSchema.has_column-345"><span class="linenos">345</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="MappingSchema.has_column-346"><a href="#MappingSchema.has_column-346"><span class="linenos">346</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.has_column-347"><a href="#MappingSchema.has_column-347"><span class="linenos">347</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="MappingSchema.has_column-348"><a href="#MappingSchema.has_column-348"><span class="linenos">348</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="MappingSchema.has_column-349"><a href="#MappingSchema.has_column-349"><span class="linenos">349</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
-</span><span id="MappingSchema.has_column-350"><a href="#MappingSchema.has_column-350"><span class="linenos">350</span></a>
-</span><span id="MappingSchema.has_column-351"><a href="#MappingSchema.has_column-351"><span class="linenos">351</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
-</span><span id="MappingSchema.has_column-352"><a href="#MappingSchema.has_column-352"><span class="linenos">352</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
-</span><span id="MappingSchema.has_column-353"><a href="#MappingSchema.has_column-353"><span class="linenos">353</span></a> <span class="p">)</span>
-</span><span id="MappingSchema.has_column-354"><a href="#MappingSchema.has_column-354"><span class="linenos">354</span></a>
-</span><span id="MappingSchema.has_column-355"><a href="#MappingSchema.has_column-355"><span class="linenos">355</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="MappingSchema.has_column-356"><a href="#MappingSchema.has_column-356"><span class="linenos">356</span></a> <span class="k">return</span> <span class="n">normalized_column_name</span> <span class="ow">in</span> <span class="n">table_schema</span> <span class="k">if</span> <span class="n">table_schema</span> <span class="k">else</span> <span class="kc">False</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.has_column-339"><a href="#MappingSchema.has_column-339"><span class="linenos">339</span></a> <span class="k">def</span> <span class="nf">has_column</span><span class="p">(</span>
+</span><span id="MappingSchema.has_column-340"><a href="#MappingSchema.has_column-340"><span class="linenos">340</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="MappingSchema.has_column-341"><a href="#MappingSchema.has_column-341"><span class="linenos">341</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema.has_column-342"><a href="#MappingSchema.has_column-342"><span class="linenos">342</span></a> <span class="n">column</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span> <span class="o">|</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="MappingSchema.has_column-343"><a href="#MappingSchema.has_column-343"><span class="linenos">343</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.has_column-344"><a href="#MappingSchema.has_column-344"><span class="linenos">344</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="MappingSchema.has_column-345"><a href="#MappingSchema.has_column-345"><span class="linenos">345</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="MappingSchema.has_column-346"><a href="#MappingSchema.has_column-346"><span class="linenos">346</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_table</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span><span class="p">)</span>
+</span><span id="MappingSchema.has_column-347"><a href="#MappingSchema.has_column-347"><span class="linenos">347</span></a>
+</span><span id="MappingSchema.has_column-348"><a href="#MappingSchema.has_column-348"><span class="linenos">348</span></a> <span class="n">normalized_column_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span>
+</span><span id="MappingSchema.has_column-349"><a href="#MappingSchema.has_column-349"><span class="linenos">349</span></a> <span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="n">normalize</span>
+</span><span id="MappingSchema.has_column-350"><a href="#MappingSchema.has_column-350"><span class="linenos">350</span></a> <span class="p">)</span>
+</span><span id="MappingSchema.has_column-351"><a href="#MappingSchema.has_column-351"><span class="linenos">351</span></a>
+</span><span id="MappingSchema.has_column-352"><a href="#MappingSchema.has_column-352"><span class="linenos">352</span></a> <span class="n">table_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">raise_on_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="MappingSchema.has_column-353"><a href="#MappingSchema.has_column-353"><span class="linenos">353</span></a> <span class="k">return</span> <span class="n">normalized_column_name</span> <span class="ow">in</span> <span class="n">table_schema</span> <span class="k">if</span> <span class="n">table_schema</span> <span class="k">else</span> <span class="kc">False</span>
</span></pre></div>
@@ -2122,11 +2093,11 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#MappingSchema.depth"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.depth-425"><a href="#MappingSchema.depth-425"><span class="linenos">425</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
-</span><span id="MappingSchema.depth-426"><a href="#MappingSchema.depth-426"><span class="linenos">426</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
-</span><span id="MappingSchema.depth-427"><a href="#MappingSchema.depth-427"><span class="linenos">427</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
-</span><span id="MappingSchema.depth-428"><a href="#MappingSchema.depth-428"><span class="linenos">428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="MappingSchema.depth-429"><a href="#MappingSchema.depth-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MappingSchema.depth-422"><a href="#MappingSchema.depth-422"><span class="linenos">422</span></a> <span class="k">def</span> <span class="nf">depth</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+</span><span id="MappingSchema.depth-423"><a href="#MappingSchema.depth-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span><span class="p">:</span>
+</span><span id="MappingSchema.depth-424"><a href="#MappingSchema.depth-424"><span class="linenos">424</span></a> <span class="c1"># The columns themselves are a mapping, but we don&#39;t want to include those</span>
+</span><span id="MappingSchema.depth-425"><a href="#MappingSchema.depth-425"><span class="linenos">425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="MappingSchema.depth-426"><a href="#MappingSchema.depth-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depth</span>
</span></pre></div>
@@ -2160,21 +2131,21 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#normalize_name"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="normalize_name-456"><a href="#normalize_name-456"><span class="linenos">456</span></a><span class="k">def</span> <span class="nf">normalize_name</span><span class="p">(</span>
-</span><span id="normalize_name-457"><a href="#normalize_name-457"><span class="linenos">457</span></a> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
-</span><span id="normalize_name-458"><a href="#normalize_name-458"><span class="linenos">458</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="normalize_name-459"><a href="#normalize_name-459"><span class="linenos">459</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="normalize_name-460"><a href="#normalize_name-460"><span class="linenos">460</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="normalize_name-461"><a href="#normalize_name-461"><span class="linenos">461</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="normalize_name-462"><a href="#normalize_name-462"><span class="linenos">462</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="normalize_name-463"><a href="#normalize_name-463"><span class="linenos">463</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">parse_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="normalize_name-453"><a href="#normalize_name-453"><span class="linenos">453</span></a><span class="k">def</span> <span class="nf">normalize_name</span><span class="p">(</span>
+</span><span id="normalize_name-454"><a href="#normalize_name-454"><span class="linenos">454</span></a> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span>
+</span><span id="normalize_name-455"><a href="#normalize_name-455"><span class="linenos">455</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="normalize_name-456"><a href="#normalize_name-456"><span class="linenos">456</span></a> <span class="n">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="normalize_name-457"><a href="#normalize_name-457"><span class="linenos">457</span></a> <span class="n">normalize</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="normalize_name-458"><a href="#normalize_name-458"><span class="linenos">458</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
+</span><span id="normalize_name-459"><a href="#normalize_name-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="normalize_name-460"><a href="#normalize_name-460"><span class="linenos">460</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">parse_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="normalize_name-461"><a href="#normalize_name-461"><span class="linenos">461</span></a>
+</span><span id="normalize_name-462"><a href="#normalize_name-462"><span class="linenos">462</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">normalize</span><span class="p">:</span>
+</span><span id="normalize_name-463"><a href="#normalize_name-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">identifier</span>
</span><span id="normalize_name-464"><a href="#normalize_name-464"><span class="linenos">464</span></a>
-</span><span id="normalize_name-465"><a href="#normalize_name-465"><span class="linenos">465</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">normalize</span><span class="p">:</span>
-</span><span id="normalize_name-466"><a href="#normalize_name-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="n">identifier</span>
-</span><span id="normalize_name-467"><a href="#normalize_name-467"><span class="linenos">467</span></a>
-</span><span id="normalize_name-468"><a href="#normalize_name-468"><span class="linenos">468</span></a> <span class="c1"># this is used for normalize_identifier, bigquery has special rules pertaining tables</span>
-</span><span id="normalize_name-469"><a href="#normalize_name-469"><span class="linenos">469</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
-</span><span id="normalize_name-470"><a href="#normalize_name-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span>
+</span><span id="normalize_name-465"><a href="#normalize_name-465"><span class="linenos">465</span></a> <span class="c1"># this is used for normalize_identifier, bigquery has special rules pertaining tables</span>
+</span><span id="normalize_name-466"><a href="#normalize_name-466"><span class="linenos">466</span></a> <span class="n">identifier</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;is_table&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_table</span>
+</span><span id="normalize_name-467"><a href="#normalize_name-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">normalize_identifier</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span>
</span></pre></div>
@@ -2192,11 +2163,11 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#ensure_schema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_schema-473"><a href="#ensure_schema-473"><span class="linenos">473</span></a><span class="k">def</span> <span class="nf">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
-</span><span id="ensure_schema-474"><a href="#ensure_schema-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
-</span><span id="ensure_schema-475"><a href="#ensure_schema-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">schema</span>
-</span><span id="ensure_schema-476"><a href="#ensure_schema-476"><span class="linenos">476</span></a>
-</span><span id="ensure_schema-477"><a href="#ensure_schema-477"><span class="linenos">477</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_schema-470"><a href="#ensure_schema-470"><span class="linenos">470</span></a><span class="k">def</span> <span class="nf">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">:</span> <span class="n">Schema</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">],</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Schema</span><span class="p">:</span>
+</span><span id="ensure_schema-471"><a href="#ensure_schema-471"><span class="linenos">471</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span>
+</span><span id="ensure_schema-472"><a href="#ensure_schema-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">schema</span>
+</span><span id="ensure_schema-473"><a href="#ensure_schema-473"><span class="linenos">473</span></a>
+</span><span id="ensure_schema-474"><a href="#ensure_schema-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="n">MappingSchema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span></pre></div>
@@ -2214,24 +2185,24 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#ensure_column_mapping"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_column_mapping-480"><a href="#ensure_column_mapping-480"><span class="linenos">480</span></a><span class="k">def</span> <span class="nf">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="ensure_column_mapping-481"><a href="#ensure_column_mapping-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="ensure_column_mapping-482"><a href="#ensure_column_mapping-482"><span class="linenos">482</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="ensure_column_mapping-483"><a href="#ensure_column_mapping-483"><span class="linenos">483</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-484"><a href="#ensure_column_mapping-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="n">mapping</span>
-</span><span id="ensure_column_mapping-485"><a href="#ensure_column_mapping-485"><span class="linenos">485</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-486"><a href="#ensure_column_mapping-486"><span class="linenos">486</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
-</span><span id="ensure_column_mapping-487"><a href="#ensure_column_mapping-487"><span class="linenos">487</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="ensure_column_mapping-488"><a href="#ensure_column_mapping-488"><span class="linenos">488</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="ensure_column_mapping-489"><a href="#ensure_column_mapping-489"><span class="linenos">489</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
-</span><span id="ensure_column_mapping-490"><a href="#ensure_column_mapping-490"><span class="linenos">490</span></a> <span class="p">}</span>
-</span><span id="ensure_column_mapping-491"><a href="#ensure_column_mapping-491"><span class="linenos">491</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
-</span><span id="ensure_column_mapping-492"><a href="#ensure_column_mapping-492"><span class="linenos">492</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-493"><a href="#ensure_column_mapping-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
-</span><span id="ensure_column_mapping-494"><a href="#ensure_column_mapping-494"><span class="linenos">494</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-</span><span id="ensure_column_mapping-495"><a href="#ensure_column_mapping-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
-</span><span id="ensure_column_mapping-496"><a href="#ensure_column_mapping-496"><span class="linenos">496</span></a>
-</span><span id="ensure_column_mapping-497"><a href="#ensure_column_mapping-497"><span class="linenos">497</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ensure_column_mapping-477"><a href="#ensure_column_mapping-477"><span class="linenos">477</span></a><span class="k">def</span> <span class="nf">ensure_column_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ColumnMapping</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="ensure_column_mapping-478"><a href="#ensure_column_mapping-478"><span class="linenos">478</span></a> <span class="k">if</span> <span class="n">mapping</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="ensure_column_mapping-479"><a href="#ensure_column_mapping-479"><span class="linenos">479</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="ensure_column_mapping-480"><a href="#ensure_column_mapping-480"><span class="linenos">480</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-481"><a href="#ensure_column_mapping-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="n">mapping</span>
+</span><span id="ensure_column_mapping-482"><a href="#ensure_column_mapping-482"><span class="linenos">482</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-483"><a href="#ensure_column_mapping-483"><span class="linenos">483</span></a> <span class="n">col_name_type_strs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)]</span>
+</span><span id="ensure_column_mapping-484"><a href="#ensure_column_mapping-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="ensure_column_mapping-485"><a href="#ensure_column_mapping-485"><span class="linenos">485</span></a> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">name_type_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="ensure_column_mapping-486"><a href="#ensure_column_mapping-486"><span class="linenos">486</span></a> <span class="k">for</span> <span class="n">name_type_str</span> <span class="ow">in</span> <span class="n">col_name_type_strs</span>
+</span><span id="ensure_column_mapping-487"><a href="#ensure_column_mapping-487"><span class="linenos">487</span></a> <span class="p">}</span>
+</span><span id="ensure_column_mapping-488"><a href="#ensure_column_mapping-488"><span class="linenos">488</span></a> <span class="c1"># Check if mapping looks like a DataFrame StructType</span>
+</span><span id="ensure_column_mapping-489"><a href="#ensure_column_mapping-489"><span class="linenos">489</span></a> <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="s2">&quot;simpleString&quot;</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-490"><a href="#ensure_column_mapping-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">struct_field</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">struct_field</span><span class="o">.</span><span class="n">dataType</span><span class="o">.</span><span class="n">simpleString</span><span class="p">()</span> <span class="k">for</span> <span class="n">struct_field</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="ensure_column_mapping-491"><a href="#ensure_column_mapping-491"><span class="linenos">491</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mapping</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+</span><span id="ensure_column_mapping-492"><a href="#ensure_column_mapping-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">}</span>
+</span><span id="ensure_column_mapping-493"><a href="#ensure_column_mapping-493"><span class="linenos">493</span></a>
+</span><span id="ensure_column_mapping-494"><a href="#ensure_column_mapping-494"><span class="linenos">494</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid mapping provided: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -2249,19 +2220,19 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#flatten_schema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="flatten_schema-500"><a href="#flatten_schema-500"><span class="linenos">500</span></a><span class="k">def</span> <span class="nf">flatten_schema</span><span class="p">(</span>
-</span><span id="flatten_schema-501"><a href="#flatten_schema-501"><span class="linenos">501</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="flatten_schema-502"><a href="#flatten_schema-502"><span class="linenos">502</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="flatten_schema-503"><a href="#flatten_schema-503"><span class="linenos">503</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="flatten_schema-504"><a href="#flatten_schema-504"><span class="linenos">504</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="flatten_schema-505"><a href="#flatten_schema-505"><span class="linenos">505</span></a>
-</span><span id="flatten_schema-506"><a href="#flatten_schema-506"><span class="linenos">506</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="flatten_schema-507"><a href="#flatten_schema-507"><span class="linenos">507</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="flatten_schema-508"><a href="#flatten_schema-508"><span class="linenos">508</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
-</span><span id="flatten_schema-509"><a href="#flatten_schema-509"><span class="linenos">509</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="flatten_schema-510"><a href="#flatten_schema-510"><span class="linenos">510</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</span>
-</span><span id="flatten_schema-511"><a href="#flatten_schema-511"><span class="linenos">511</span></a>
-</span><span id="flatten_schema-512"><a href="#flatten_schema-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="n">tables</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="flatten_schema-497"><a href="#flatten_schema-497"><span class="linenos">497</span></a><span class="k">def</span> <span class="nf">flatten_schema</span><span class="p">(</span>
+</span><span id="flatten_schema-498"><a href="#flatten_schema-498"><span class="linenos">498</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">depth</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="flatten_schema-499"><a href="#flatten_schema-499"><span class="linenos">499</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="flatten_schema-500"><a href="#flatten_schema-500"><span class="linenos">500</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="flatten_schema-501"><a href="#flatten_schema-501"><span class="linenos">501</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">keys</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="flatten_schema-502"><a href="#flatten_schema-502"><span class="linenos">502</span></a>
+</span><span id="flatten_schema-503"><a href="#flatten_schema-503"><span class="linenos">503</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="flatten_schema-504"><a href="#flatten_schema-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="flatten_schema-505"><a href="#flatten_schema-505"><span class="linenos">505</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flatten_schema</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">depth</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">]))</span>
+</span><span id="flatten_schema-506"><a href="#flatten_schema-506"><span class="linenos">506</span></a> <span class="k">elif</span> <span class="n">depth</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="flatten_schema-507"><a href="#flatten_schema-507"><span class="linenos">507</span></a> <span class="n">tables</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">keys</span> <span class="o">+</span> <span class="p">[</span><span class="n">k</span><span class="p">])</span>
+</span><span id="flatten_schema-508"><a href="#flatten_schema-508"><span class="linenos">508</span></a>
+</span><span id="flatten_schema-509"><a href="#flatten_schema-509"><span class="linenos">509</span></a> <span class="k">return</span> <span class="n">tables</span>
</span></pre></div>
@@ -2279,30 +2250,30 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#nested_get"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="nested_get-515"><a href="#nested_get-515"><span class="linenos">515</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
-</span><span id="nested_get-516"><a href="#nested_get-516"><span class="linenos">516</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="nested_get-517"><a href="#nested_get-517"><span class="linenos">517</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="nested_get-518"><a href="#nested_get-518"><span class="linenos">518</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="nested_get-519"><a href="#nested_get-519"><span class="linenos">519</span></a><span class="sd"> Get a value for a nested dictionary.</span>
-</span><span id="nested_get-520"><a href="#nested_get-520"><span class="linenos">520</span></a>
-</span><span id="nested_get-521"><a href="#nested_get-521"><span class="linenos">521</span></a><span class="sd"> Args:</span>
-</span><span id="nested_get-522"><a href="#nested_get-522"><span class="linenos">522</span></a><span class="sd"> d: the dictionary to search.</span>
-</span><span id="nested_get-523"><a href="#nested_get-523"><span class="linenos">523</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
-</span><span id="nested_get-524"><a href="#nested_get-524"><span class="linenos">524</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
-</span><span id="nested_get-525"><a href="#nested_get-525"><span class="linenos">525</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
-</span><span id="nested_get-526"><a href="#nested_get-526"><span class="linenos">526</span></a>
-</span><span id="nested_get-527"><a href="#nested_get-527"><span class="linenos">527</span></a><span class="sd"> Returns:</span>
-</span><span id="nested_get-528"><a href="#nested_get-528"><span class="linenos">528</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
-</span><span id="nested_get-529"><a href="#nested_get-529"><span class="linenos">529</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="nested_get-530"><a href="#nested_get-530"><span class="linenos">530</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
-</span><span id="nested_get-531"><a href="#nested_get-531"><span class="linenos">531</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="nested_get-532"><a href="#nested_get-532"><span class="linenos">532</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="nested_get-533"><a href="#nested_get-533"><span class="linenos">533</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
-</span><span id="nested_get-534"><a href="#nested_get-534"><span class="linenos">534</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
-</span><span id="nested_get-535"><a href="#nested_get-535"><span class="linenos">535</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="nested_get-536"><a href="#nested_get-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="nested_get-537"><a href="#nested_get-537"><span class="linenos">537</span></a>
-</span><span id="nested_get-538"><a href="#nested_get-538"><span class="linenos">538</span></a> <span class="k">return</span> <span class="n">d</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="nested_get-512"><a href="#nested_get-512"><span class="linenos">512</span></a><span class="k">def</span> <span class="nf">nested_get</span><span class="p">(</span>
+</span><span id="nested_get-513"><a href="#nested_get-513"><span class="linenos">513</span></a> <span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="o">*</span><span class="n">path</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">raise_on_missing</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="nested_get-514"><a href="#nested_get-514"><span class="linenos">514</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">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="nested_get-515"><a href="#nested_get-515"><span class="linenos">515</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="nested_get-516"><a href="#nested_get-516"><span class="linenos">516</span></a><span class="sd"> Get a value for a nested dictionary.</span>
+</span><span id="nested_get-517"><a href="#nested_get-517"><span class="linenos">517</span></a>
+</span><span id="nested_get-518"><a href="#nested_get-518"><span class="linenos">518</span></a><span class="sd"> Args:</span>
+</span><span id="nested_get-519"><a href="#nested_get-519"><span class="linenos">519</span></a><span class="sd"> d: the dictionary to search.</span>
+</span><span id="nested_get-520"><a href="#nested_get-520"><span class="linenos">520</span></a><span class="sd"> *path: tuples of (name, key), where:</span>
+</span><span id="nested_get-521"><a href="#nested_get-521"><span class="linenos">521</span></a><span class="sd"> `key` is the key in the dictionary to get.</span>
+</span><span id="nested_get-522"><a href="#nested_get-522"><span class="linenos">522</span></a><span class="sd"> `name` is a string to use in the error if `key` isn&#39;t found.</span>
+</span><span id="nested_get-523"><a href="#nested_get-523"><span class="linenos">523</span></a>
+</span><span id="nested_get-524"><a href="#nested_get-524"><span class="linenos">524</span></a><span class="sd"> Returns:</span>
+</span><span id="nested_get-525"><a href="#nested_get-525"><span class="linenos">525</span></a><span class="sd"> The value or None if it doesn&#39;t exist.</span>
+</span><span id="nested_get-526"><a href="#nested_get-526"><span class="linenos">526</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="nested_get-527"><a href="#nested_get-527"><span class="linenos">527</span></a> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
+</span><span id="nested_get-528"><a href="#nested_get-528"><span class="linenos">528</span></a> <span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="nested_get-529"><a href="#nested_get-529"><span class="linenos">529</span></a> <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="nested_get-530"><a href="#nested_get-530"><span class="linenos">530</span></a> <span class="k">if</span> <span class="n">raise_on_missing</span><span class="p">:</span>
+</span><span id="nested_get-531"><a href="#nested_get-531"><span class="linenos">531</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;table&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;this&quot;</span> <span class="k">else</span> <span class="n">name</span>
+</span><span id="nested_get-532"><a href="#nested_get-532"><span class="linenos">532</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="nested_get-533"><a href="#nested_get-533"><span class="linenos">533</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="nested_get-534"><a href="#nested_get-534"><span class="linenos">534</span></a>
+</span><span id="nested_get-535"><a href="#nested_get-535"><span class="linenos">535</span></a> <span class="k">return</span> <span class="n">d</span>
</span></pre></div>
@@ -2337,41 +2308,41 @@ The added table must have the necessary number of qualifiers in its path to matc
</div>
<a class="headerlink" href="#nested_set"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="nested_set-541"><a href="#nested_set-541"><span class="linenos">541</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
-</span><span id="nested_set-542"><a href="#nested_set-542"><span class="linenos">542</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="nested_set-543"><a href="#nested_set-543"><span class="linenos">543</span></a><span class="sd"> In-place set a value for a nested dictionary</span>
-</span><span id="nested_set-544"><a href="#nested_set-544"><span class="linenos">544</span></a>
-</span><span id="nested_set-545"><a href="#nested_set-545"><span class="linenos">545</span></a><span class="sd"> Example:</span>
-</span><span id="nested_set-546"><a href="#nested_set-546"><span class="linenos">546</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="nested_set-547"><a href="#nested_set-547"><span class="linenos">547</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="nested_set-538"><a href="#nested_set-538"><span class="linenos">538</span></a><span class="k">def</span> <span class="nf">nested_set</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">,</span> <span class="n">keys</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">value</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">:</span>
+</span><span id="nested_set-539"><a href="#nested_set-539"><span class="linenos">539</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="nested_set-540"><a href="#nested_set-540"><span class="linenos">540</span></a><span class="sd"> In-place set a value for a nested dictionary</span>
+</span><span id="nested_set-541"><a href="#nested_set-541"><span class="linenos">541</span></a>
+</span><span id="nested_set-542"><a href="#nested_set-542"><span class="linenos">542</span></a><span class="sd"> Example:</span>
+</span><span id="nested_set-543"><a href="#nested_set-543"><span class="linenos">543</span></a><span class="sd"> &gt;&gt;&gt; nested_set({}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="nested_set-544"><a href="#nested_set-544"><span class="linenos">544</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;second_key&#39;: &#39;value&#39;}}</span>
+</span><span id="nested_set-545"><a href="#nested_set-545"><span class="linenos">545</span></a>
+</span><span id="nested_set-546"><a href="#nested_set-546"><span class="linenos">546</span></a><span class="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
+</span><span id="nested_set-547"><a href="#nested_set-547"><span class="linenos">547</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
</span><span id="nested_set-548"><a href="#nested_set-548"><span class="linenos">548</span></a>
-</span><span id="nested_set-549"><a href="#nested_set-549"><span class="linenos">549</span></a><span class="sd"> &gt;&gt;&gt; nested_set({&quot;top_key&quot;: {&quot;third_key&quot;: &quot;third_value&quot;}}, [&quot;top_key&quot;, &quot;second_key&quot;], &quot;value&quot;)</span>
-</span><span id="nested_set-550"><a href="#nested_set-550"><span class="linenos">550</span></a><span class="sd"> {&#39;top_key&#39;: {&#39;third_key&#39;: &#39;third_value&#39;, &#39;second_key&#39;: &#39;value&#39;}}</span>
-</span><span id="nested_set-551"><a href="#nested_set-551"><span class="linenos">551</span></a>
-</span><span id="nested_set-552"><a href="#nested_set-552"><span class="linenos">552</span></a><span class="sd"> Args:</span>
-</span><span id="nested_set-553"><a href="#nested_set-553"><span class="linenos">553</span></a><span class="sd"> d: dictionary to update.</span>
-</span><span id="nested_set-554"><a href="#nested_set-554"><span class="linenos">554</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
-</span><span id="nested_set-555"><a href="#nested_set-555"><span class="linenos">555</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</span>
-</span><span id="nested_set-556"><a href="#nested_set-556"><span class="linenos">556</span></a>
-</span><span id="nested_set-557"><a href="#nested_set-557"><span class="linenos">557</span></a><span class="sd"> Returns:</span>
-</span><span id="nested_set-558"><a href="#nested_set-558"><span class="linenos">558</span></a><span class="sd"> The (possibly) updated dictionary.</span>
-</span><span id="nested_set-559"><a href="#nested_set-559"><span class="linenos">559</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="nested_set-560"><a href="#nested_set-560"><span class="linenos">560</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
-</span><span id="nested_set-561"><a href="#nested_set-561"><span class="linenos">561</span></a> <span class="k">return</span> <span class="n">d</span>
-</span><span id="nested_set-562"><a href="#nested_set-562"><span class="linenos">562</span></a>
-</span><span id="nested_set-563"><a href="#nested_set-563"><span class="linenos">563</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="nested_set-564"><a href="#nested_set-564"><span class="linenos">564</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="nested_set-565"><a href="#nested_set-565"><span class="linenos">565</span></a> <span class="k">return</span> <span class="n">d</span>
-</span><span id="nested_set-566"><a href="#nested_set-566"><span class="linenos">566</span></a>
-</span><span id="nested_set-567"><a href="#nested_set-567"><span class="linenos">567</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">d</span>
-</span><span id="nested_set-568"><a href="#nested_set-568"><span class="linenos">568</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
-</span><span id="nested_set-569"><a href="#nested_set-569"><span class="linenos">569</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
-</span><span id="nested_set-570"><a href="#nested_set-570"><span class="linenos">570</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
-</span><span id="nested_set-571"><a href="#nested_set-571"><span class="linenos">571</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="nested_set-572"><a href="#nested_set-572"><span class="linenos">572</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
-</span><span id="nested_set-573"><a href="#nested_set-573"><span class="linenos">573</span></a>
-</span><span id="nested_set-574"><a href="#nested_set-574"><span class="linenos">574</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
-</span><span id="nested_set-575"><a href="#nested_set-575"><span class="linenos">575</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="nested_set-549"><a href="#nested_set-549"><span class="linenos">549</span></a><span class="sd"> Args:</span>
+</span><span id="nested_set-550"><a href="#nested_set-550"><span class="linenos">550</span></a><span class="sd"> d: dictionary to update.</span>
+</span><span id="nested_set-551"><a href="#nested_set-551"><span class="linenos">551</span></a><span class="sd"> keys: the keys that makeup the path to `value`.</span>
+</span><span id="nested_set-552"><a href="#nested_set-552"><span class="linenos">552</span></a><span class="sd"> value: the value to set in the dictionary for the given key path.</span>
+</span><span id="nested_set-553"><a href="#nested_set-553"><span class="linenos">553</span></a>
+</span><span id="nested_set-554"><a href="#nested_set-554"><span class="linenos">554</span></a><span class="sd"> Returns:</span>
+</span><span id="nested_set-555"><a href="#nested_set-555"><span class="linenos">555</span></a><span class="sd"> The (possibly) updated dictionary.</span>
+</span><span id="nested_set-556"><a href="#nested_set-556"><span class="linenos">556</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="nested_set-557"><a href="#nested_set-557"><span class="linenos">557</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">keys</span><span class="p">:</span>
+</span><span id="nested_set-558"><a href="#nested_set-558"><span class="linenos">558</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="nested_set-559"><a href="#nested_set-559"><span class="linenos">559</span></a>
+</span><span id="nested_set-560"><a href="#nested_set-560"><span class="linenos">560</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="nested_set-561"><a href="#nested_set-561"><span class="linenos">561</span></a> <span class="n">d</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="nested_set-562"><a href="#nested_set-562"><span class="linenos">562</span></a> <span class="k">return</span> <span class="n">d</span>
+</span><span id="nested_set-563"><a href="#nested_set-563"><span class="linenos">563</span></a>
+</span><span id="nested_set-564"><a href="#nested_set-564"><span class="linenos">564</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">d</span>
+</span><span id="nested_set-565"><a href="#nested_set-565"><span class="linenos">565</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
+</span><span id="nested_set-566"><a href="#nested_set-566"><span class="linenos">566</span></a> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subd</span><span class="p">:</span>
+</span><span id="nested_set-567"><a href="#nested_set-567"><span class="linenos">567</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">{})</span>
+</span><span id="nested_set-568"><a href="#nested_set-568"><span class="linenos">568</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="nested_set-569"><a href="#nested_set-569"><span class="linenos">569</span></a> <span class="n">subd</span> <span class="o">=</span> <span class="n">subd</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</span><span id="nested_set-570"><a href="#nested_set-570"><span class="linenos">570</span></a>
+</span><span id="nested_set-571"><a href="#nested_set-571"><span class="linenos">571</span></a> <span class="n">subd</span><span class="p">[</span><span class="n">keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">value</span>
+</span><span id="nested_set-572"><a href="#nested_set-572"><span class="linenos">572</span></a> <span class="k">return</span> <span class="n">d</span>
</span></pre></div>
diff --git a/docs/sqlglot/time.html b/docs/sqlglot/time.html
index 1264047..b111fc6 100644
--- a/docs/sqlglot/time.html
+++ b/docs/sqlglot/time.html
@@ -819,7 +819,7 @@
<div class="attr variable">
<span class="name">TIMEZONES</span> =
<input id="TIMEZONES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="TIMEZONES-view-value"></label><span class="default_value">{&#39;asia/kuwait&#39;, &#39;america/dawson&#39;, &#39;etc/gmt0&#39;, &#39;eet&#39;, &#39;america/halifax&#39;, &#39;indian/mahe&#39;, &#39;africa/casablanca&#39;, &#39;us/central&#39;, &#39;mexico/general&#39;, &#39;wet&#39;, &#39;universal&#39;, &#39;america/merida&#39;, &#39;america/rankin_inlet&#39;, &#39;america/nipigon&#39;, &#39;atlantic/stanley&#39;, &#39;europe/brussels&#39;, &#39;pacific/port_moresby&#39;, &#39;america/marigot&#39;, &#39;pacific/wake&#39;, &#39;asia/hebron&#39;, &#39;america/anchorage&#39;, &#39;turkey&#39;, &#39;europe/helsinki&#39;, &#39;america/tijuana&#39;, &#39;antarctica/casey&#39;, &#39;europe/nicosia&#39;, &#39;asia/saigon&#39;, &#39;asia/vladivostok&#39;, &#39;brazil/west&#39;, &#39;america/scoresbysund&#39;, &#39;asia/katmandu&#39;, &#39;asia/yerevan&#39;, &#39;pacific/efate&#39;, &#39;europe/prague&#39;, &#39;america/rainy_river&#39;, &#39;europe/vatican&#39;, &#39;africa/nairobi&#39;, &#39;atlantic/cape_verde&#39;, &#39;europe/vienna&#39;, &#39;europe/kaliningrad&#39;, &#39;etc/gmt+6&#39;, &#39;asia/makassar&#39;, &#39;america/punta_arenas&#39;, &#39;america/argentina/ushuaia&#39;, &#39;etc/gmt-6&#39;, &#39;europe/london&#39;, &#39;egypt&#39;, &#39;nz-chat&#39;, &#39;australia/hobart&#39;, &#39;europe/kyiv&#39;, &#39;america/virgin&#39;, &#39;africa/banjul&#39;, &#39;indian/christmas&#39;, &#39;asia/muscat&#39;, &#39;hongkong&#39;, &#39;africa/tunis&#39;, &#39;pacific/kanton&#39;, &#39;america/campo_grande&#39;, &#39;asia/urumqi&#39;, &#39;america/north_dakota/center&#39;, &#39;america/monterrey&#39;, &#39;africa/ndjamena&#39;, &#39;asia/bangkok&#39;, &#39;pacific/enderbury&#39;, &#39;rok&#39;, &#39;america/lima&#39;, &#39;asia/riyadh&#39;, &#39;europe/volgograd&#39;, &#39;prc&#39;, &#39;america/costa_rica&#39;, &#39;america/grenada&#39;, &#39;america/whitehorse&#39;, &#39;asia/amman&#39;, &#39;atlantic/reykjavik&#39;, &#39;pacific/truk&#39;, &#39;america/fort_wayne&#39;, &#39;asia/bahrain&#39;, &#39;atlantic/jan_mayen&#39;, &#39;pacific/chatham&#39;, &#39;indian/mayotte&#39;, &#39;america/santa_isabel&#39;, &#39;africa/lome&#39;, &#39;indian/kerguelen&#39;, &#39;america/argentina/la_rioja&#39;, &#39;america/tortola&#39;, &#39;us/alaska&#39;, &#39;europe/chisinau&#39;, &#39;asia/krasnoyarsk&#39;, &#39;roc&#39;, &#39;america/port-au-prince&#39;, &#39;america/montreal&#39;, &#39;america/swift_current&#39;, &#39;america/indiana/marengo&#39;, &#39;europe/tirane&#39;, &#39;asia/ho_chi_minh&#39;, &#39;africa/blantyre&#39;, &#39;europe/isle_of_man&#39;, &#39;pacific/niue&#39;, &#39;asia/nicosia&#39;, &#39;atlantic/azores&#39;, &#39;pacific/ponape&#39;, &#39;asia/almaty&#39;, &#39;america/coral_harbour&#39;, &#39;etc/zulu&#39;, &#39;australia/south&#39;, &#39;asia/baghdad&#39;, &#39;us/samoa&#39;, &#39;pacific/tahiti&#39;, &#39;africa/windhoek&#39;, &#39;africa/accra&#39;, &#39;africa/bissau&#39;, &#39;africa/libreville&#39;, &#39;america/porto_acre&#39;, &#39;asia/seoul&#39;, &#39;asia/tehran&#39;, &#39;est&#39;, &#39;africa/maputo&#39;, &#39;gmt&#39;, &#39;america/eirunepe&#39;, &#39;canada/pacific&#39;, &#39;asia/yekaterinburg&#39;, &#39;america/dawson_creek&#39;, &#39;america/north_dakota/new_salem&#39;, &#39;asia/pyongyang&#39;, &#39;america/tegucigalpa&#39;, &#39;america/sao_paulo&#39;, &#39;america/chicago&#39;, &#39;europe/amsterdam&#39;, &#39;pacific/guadalcanal&#39;, &#39;america/hermosillo&#39;, &#39;gmt0&#39;, &#39;asia/jerusalem&#39;, &#39;australia/broken_hill&#39;, &#39;america/toronto&#39;, &#39;antarctica/syowa&#39;, &#39;america/juneau&#39;, &#39;etc/gmt+7&#39;, &#39;us/aleutian&#39;, &#39;europe/san_marino&#39;, &#39;asia/ulan_bator&#39;, &#39;asia/anadyr&#39;, &#39;asia/chita&#39;, &#39;etc/gmt+2&#39;, &#39;america/louisville&#39;, &#39;asia/kuala_lumpur&#39;, &#39;africa/addis_ababa&#39;, &#39;pacific/guam&#39;, &#39;america/argentina/san_juan&#39;, &#39;europe/andorra&#39;, &#39;america/guatemala&#39;, &#39;asia/dushanbe&#39;, &#39;america/north_dakota/beulah&#39;, &#39;africa/djibouti&#39;, &#39;america/bahia&#39;, &#39;asia/hong_kong&#39;, &#39;america/st_thomas&#39;, &#39;america/kralendijk&#39;, &#39;gmt+0&#39;, &#39;etc/gmt-12&#39;, &#39;etc/gmt+12&#39;, &#39;america/ojinaga&#39;, &#39;africa/johannesburg&#39;, &#39;asia/colombo&#39;, &#39;america/blanc-sablon&#39;, &#39;america/kentucky/louisville&#39;, &#39;asia/omsk&#39;, &#39;pacific/wallis&#39;, &#39;america/catamarca&#39;, &#39;america/asuncion&#39;, &#39;asia/kabul&#39;, &#39;brazil/acre&#39;, &#39;africa/kampala&#39;, &#39;indian/antananarivo&#39;, &#39;america/argentina/comodrivadavia&#39;, &#39;america/inuvik&#39;, &#39;america/bogota&#39;, &#39;pacific/marquesas&#39;, &#39;us/indiana-starke&#39;, &#39;australia/canberra&#39;, &#39;america/lower_princes&#39;, &#39;iran&#39;, &#39;chile/continental&#39;, &#39;pacific/kwajalein&#39;, &#39;america/rosario&#39;, &#39;europe/zurich&#39;, &#39;etc/gmt-8&#39;, &#39;africa/douala&#39;, &#39;antarctica/davis&#39;, &#39;america/boa_vista&#39;, &#39;america/cambridge_bay&#39;, &#39;australia/act&#39;, &#39;israel&#39;, &#39;america/recife&#39;, &#39;africa/gaborone&#39;, &#39;europe/copenhagen&#39;, &#39;asia/dhaka&#39;, &#39;europe/oslo&#39;, &#39;asia/macau&#39;, &#39;pacific/kiritimati&#39;, &#39;europe/zaporozhye&#39;, &#39;pacific/gambier&#39;, &#39;america/mendoza&#39;, &#39;australia/melbourne&#39;, &#39;pacific/yap&#39;, &#39;australia/north&#39;, &#39;asia/sakhalin&#39;, &#39;africa/bujumbura&#39;, &#39;etc/gmt-1&#39;, &#39;australia/west&#39;, &#39;africa/nouakchott&#39;, &#39;europe/dublin&#39;, &#39;africa/malabo&#39;, &#39;africa/ceuta&#39;, &#39;etc/universal&#39;, &#39;us/eastern&#39;, &#39;america/miquelon&#39;, &#39;america/antigua&#39;, &#39;america/argentina/tucuman&#39;, &#39;etc/uct&#39;, &#39;america/indiana/vincennes&#39;, &#39;europe/malta&#39;, &#39;america/thule&#39;, &#39;eire&#39;, &#39;america/grand_turk&#39;, &#39;etc/gmt-10&#39;, &#39;asia/tashkent&#39;, &#39;america/st_kitts&#39;, &#39;asia/bishkek&#39;, &#39;asia/ust-nera&#39;, &#39;africa/timbuktu&#39;, &#39;america/jamaica&#39;, &#39;iceland&#39;, &#39;pacific/auckland&#39;, &#39;asia/kashgar&#39;, &#39;asia/atyrau&#39;, &#39;antarctica/macquarie&#39;, &#39;pacific/palau&#39;, &#39;america/manaus&#39;, &#39;europe/ljubljana&#39;, &#39;america/araguaina&#39;, &#39;us/east-indiana&#39;, &#39;america/yellowknife&#39;, &#39;america/argentina/san_luis&#39;, &#39;asia/phnom_penh&#39;, &#39;asia/taipei&#39;, &#39;australia/perth&#39;, &#39;europe/podgorica&#39;, &#39;europe/paris&#39;, &#39;pacific/midway&#39;, &#39;pacific/pohnpei&#39;, &#39;asia/qyzylorda&#39;, &#39;etc/gmt+5&#39;, &#39;pacific/bougainville&#39;, &#39;etc/gmt-5&#39;, &#39;etc/greenwich&#39;, &#39;pacific/nauru&#39;, &#39;asia/qatar&#39;, &#39;asia/dubai&#39;, &#39;america/nome&#39;, &#39;america/yakutat&#39;, &#39;africa/asmera&#39;, &#39;america/argentina/cordoba&#39;, &#39;america/guadeloupe&#39;, &#39;america/noronha&#39;, &#39;america/edmonton&#39;, &#39;australia/tasmania&#39;, &#39;america/santiago&#39;, &#39;africa/el_aaiun&#39;, &#39;us/pacific&#39;, &#39;africa/algiers&#39;, &#39;europe/budapest&#39;, &#39;america/fortaleza&#39;, &#39;singapore&#39;, &#39;asia/manila&#39;, &#39;asia/aqtobe&#39;, &#39;america/atikokan&#39;, &#39;europe/tiraspol&#39;, &#39;w-su&#39;, &#39;etc/gmt-14&#39;, &#39;europe/kirov&#39;, &#39;america/st_barthelemy&#39;, &#39;america/guayaquil&#39;, &#39;indian/comoro&#39;, &#39;america/el_salvador&#39;, &#39;pacific/tarawa&#39;, &#39;mexico/bajasur&#39;, &#39;uct&#39;, &#39;america/panama&#39;, &#39;america/adak&#39;, &#39;canada/atlantic&#39;, &#39;america/rio_branco&#39;, &#39;america/indiana/indianapolis&#39;, &#39;etc/gmt-13&#39;, &#39;asia/magadan&#39;, &#39;africa/juba&#39;, &#39;asia/choibalsan&#39;, &#39;gmt-0&#39;, &#39;asia/shanghai&#39;, &#39;arctic/longyearbyen&#39;, &#39;antarctica/mcmurdo&#39;, &#39;america/glace_bay&#39;, &#39;etc/gmt-4&#39;, &#39;etc/gmt+9&#39;, &#39;asia/khandyga&#39;, &#39;asia/kuching&#39;, &#39;europe/kiev&#39;, &#39;etc/gmt+4&#39;, &#39;pacific/fakaofo&#39;, &#39;atlantic/canary&#39;, &#39;america/indiana/winamac&#39;, &#39;europe/berlin&#39;, &#39;america/argentina/rio_gallegos&#39;, &#39;america/caracas&#39;, &#39;pacific/chuuk&#39;, &#39;america/argentina/buenos_aires&#39;, &#39;asia/ashkhabad&#39;, &#39;europe/mariehamn&#39;, &#39;america/cancun&#39;, &#39;atlantic/st_helena&#39;, &#39;america/indiana/vevay&#39;, &#39;pacific/saipan&#39;, &#39;etc/gmt+1&#39;, &#39;america/puerto_rico&#39;, &#39;mexico/bajanorte&#39;, &#39;brazil/denoronha&#39;, &#39;america/havana&#39;, &#39;america/boise&#39;, &#39;australia/darwin&#39;, &#39;asia/ulaanbaatar&#39;, &#39;america/goose_bay&#39;, &#39;chile/easterisland&#39;, &#39;pacific/norfolk&#39;, &#39;asia/irkutsk&#39;, &#39;australia/lhi&#39;, &#39;america/cordoba&#39;, &#39;europe/tallinn&#39;, &#39;pacific/noumea&#39;, &#39;america/denver&#39;, &#39;asia/gaza&#39;, &#39;asia/tbilisi&#39;, &#39;africa/dar_es_salaam&#39;, &#39;america/port_of_spain&#39;, &#39;america/indiana/tell_city&#39;, &#39;europe/guernsey&#39;, &#39;america/resolute&#39;, &#39;america/argentina/catamarca&#39;, &#39;pacific/apia&#39;, &#39;canada/yukon&#39;, &#39;america/mazatlan&#39;, &#39;america/argentina/mendoza&#39;, &#39;america/shiprock&#39;, &#39;europe/uzhgorod&#39;, &#39;america/thunder_bay&#39;, &#39;europe/zagreb&#39;, &#39;america/indiana/knox&#39;, &#39;pacific/fiji&#39;, &#39;europe/sofia&#39;, &#39;australia/brisbane&#39;, &#39;africa/bangui&#39;, &#39;australia/victoria&#39;, &#39;us/mountain&#39;, &#39;america/curacao&#39;, &#39;africa/asmara&#39;, &#39;america/bahia_banderas&#39;, &#39;america/guyana&#39;, &#39;america/jujuy&#39;, &#39;europe/rome&#39;, &#39;portugal&#39;, &#39;america/ciudad_juarez&#39;, &#39;america/iqaluit&#39;, &#39;africa/mbabane&#39;, &#39;canada/mountain&#39;, &#39;africa/abidjan&#39;, &#39;pacific/majuro&#39;, &#39;africa/brazzaville&#39;, &#39;met&#39;, &#39;america/godthab&#39;, &#39;america/santo_domingo&#39;, &#39;europe/vilnius&#39;, &#39;africa/tripoli&#39;, &#39;america/dominica&#39;, &#39;europe/jersey&#39;, &#39;asia/srednekolymsk&#39;, &#39;asia/jayapura&#39;, &#39;america/regina&#39;, &#39;asia/brunei&#39;, &#39;pacific/johnston&#39;, &#39;etc/gmt+10&#39;, &#39;europe/monaco&#39;, &#39;america/metlakatla&#39;, &#39;etc/utc&#39;, &#39;antarctica/troll&#39;, &#39;atlantic/faroe&#39;, &#39;indian/reunion&#39;, &#39;europe/busingen&#39;, &#39;asia/jakarta&#39;, &#39;america/maceio&#39;, &#39;asia/thimphu&#39;, &#39;america/ensenada&#39;, &#39;europe/warsaw&#39;, &#39;america/nassau&#39;, &#39;cuba&#39;, &#39;hst&#39;, &#39;asia/aqtau&#39;, &#39;australia/lord_howe&#39;, &#39;australia/currie&#39;, &#39;africa/harare&#39;, &#39;america/la_paz&#39;, &#39;europe/athens&#39;, &#39;pacific/rarotonga&#39;, &#39;europe/lisbon&#39;, &#39;africa/bamako&#39;, &#39;europe/ulyanovsk&#39;, &#39;america/barbados&#39;, &#39;est5edt&#39;, &#39;america/vancouver&#39;, &#39;atlantic/madeira&#39;, &#39;asia/rangoon&#39;, &#39;asia/qostanay&#39;, &#39;america/nuuk&#39;, &#39;gb-eire&#39;, &#39;africa/sao_tome&#39;, &#39;asia/istanbul&#39;, &#39;indian/chagos&#39;, &#39;america/phoenix&#39;, &#39;asia/aden&#39;, &#39;europe/saratov&#39;, &#39;america/porto_velho&#39;, &#39;antarctica/rothera&#39;, &#39;america/detroit&#39;, &#39;europe/minsk&#39;, &#39;america/matamoros&#39;, &#39;africa/khartoum&#39;, &#39;asia/singapore&#39;, &#39;america/danmarkshavn&#39;, &#39;africa/mogadishu&#39;, &#39;etc/gmt+3&#39;, &#39;europe/sarajevo&#39;, &#39;america/kentucky/monticello&#39;, &#39;america/belem&#39;, &#39;etc/gmt-0&#39;, &#39;pacific/pago_pago&#39;, &#39;etc/gmt-9&#39;, &#39;antarctica/dumontdurville&#39;, &#39;america/pangnirtung&#39;, &#39;asia/baku&#39;, &#39;asia/tel_aviv&#39;, &#39;libya&#39;, &#39;america/indiana/petersburg&#39;, &#39;asia/harbin&#39;, &#39;africa/lusaka&#39;, &#39;pacific/easter&#39;, &#39;pacific/galapagos&#39;, &#39;america/winnipeg&#39;, &#39;africa/niamey&#39;, &#39;europe/gibraltar&#39;, &#39;africa/monrovia&#39;, &#39;jamaica&#39;, &#39;australia/yancowinna&#39;, &#39;africa/maseru&#39;, &#39;europe/stockholm&#39;, &#39;africa/cairo&#39;, &#39;asia/samarkand&#39;, &#39;pacific/funafuti&#39;, &#39;america/argentina/salta&#39;, &#39;cst6cdt&#39;, &#39;america/chihuahua&#39;, &#39;australia/eucla&#39;, &#39;asia/dacca&#39;, &#39;europe/istanbul&#39;, &#39;etc/gmt-2&#39;, &#39;europe/luxembourg&#39;, &#39;asia/beirut&#39;, &#39;antarctica/palmer&#39;, &#39;etc/gmt+8&#39;, &#39;america/managua&#39;, &#39;antarctica/south_pole&#39;, &#39;atlantic/bermuda&#39;, &#39;america/los_angeles&#39;, &#39;europe/belfast&#39;, &#39;america/belize&#39;, &#39;america/montserrat&#39;, &#39;australia/nsw&#39;, &#39;etc/gmt-3&#39;, &#39;america/buenos_aires&#39;, &#39;asia/ashgabat&#39;, &#39;africa/kigali&#39;, &#39;antarctica/mawson&#39;, &#39;asia/famagusta&#39;, &#39;zulu&#39;, &#39;africa/conakry&#39;, &#39;america/anguilla&#39;, &#39;europe/bucharest&#39;, &#39;mst7mdt&#39;, &#39;asia/calcutta&#39;, &#39;africa/dakar&#39;, &#39;us/michigan&#39;, &#39;utc&#39;, &#39;america/santarem&#39;, &#39;america/argentina/jujuy&#39;, &#39;america/menominee&#39;, &#39;america/montevideo&#39;, &#39;etc/gmt&#39;, &#39;europe/astrakhan&#39;, &#39;america/creston&#39;, &#39;etc/gmt+11&#39;, &#39;america/sitka&#39;, &#39;america/cayenne&#39;, &#39;africa/luanda&#39;, &#39;europe/moscow&#39;, &#39;poland&#39;, &#39;africa/kinshasa&#39;, &#39;america/cuiaba&#39;, &#39;america/fort_nelson&#39;, &#39;america/st_lucia&#39;, &#39;africa/porto-novo&#39;, &#39;japan&#39;, &#39;europe/riga&#39;, &#39;nz&#39;, &#39;america/new_york&#39;, &#39;cet&#39;, &#39;africa/lagos&#39;, &#39;america/cayman&#39;, &#39;canada/eastern&#39;, &#39;asia/yangon&#39;, &#39;europe/vaduz&#39;, &#39;pacific/pitcairn&#39;, &#39;pacific/honolulu&#39;, &#39;america/aruba&#39;, &#39;asia/chongqing&#39;, &#39;australia/sydney&#39;, &#39;asia/yakutsk&#39;, &#39;greenwich&#39;, &#39;america/indianapolis&#39;, &#39;europe/bratislava&#39;, &#39;atlantic/south_georgia&#39;, &#39;etc/gmt-11&#39;, &#39;america/mexico_city&#39;, &#39;canada/saskatchewan&#39;, &#39;pacific/kosrae&#39;, &#39;asia/kathmandu&#39;, &#39;asia/vientiane&#39;, &#39;asia/thimbu&#39;, &#39;america/atka&#39;, &#39;america/st_vincent&#39;, &#39;asia/hovd&#39;, &#39;kwajalein&#39;, &#39;us/arizona&#39;, &#39;asia/kamchatka&#39;, &#39;africa/ouagadougou&#39;, &#39;asia/ujung_pandang&#39;, &#39;indian/mauritius&#39;, &#39;asia/tokyo&#39;, &#39;asia/barnaul&#39;, &#39;canada/central&#39;, &#39;europe/samara&#39;, &#39;asia/tomsk&#39;, &#39;canada/newfoundland&#39;, &#39;europe/belgrade&#39;, &#39;asia/damascus&#39;, &#39;africa/freetown&#39;, &#39;africa/lubumbashi&#39;, &#39;indian/cocos&#39;, &#39;asia/karachi&#39;, &#39;america/st_johns&#39;, &#39;australia/lindeman&#39;, &#39;europe/madrid&#39;, &#39;america/knox_in&#39;, &#39;asia/macao&#39;, &#39;australia/adelaide&#39;, &#39;etc/gmt-7&#39;, &#39;indian/maldives&#39;, &#39;pacific/samoa&#39;, &#39;asia/chungking&#39;, &#39;pacific/tongatapu&#39;, &#39;antarctica/vostok&#39;, &#39;asia/dili&#39;, &#39;mst&#39;, &#39;europe/skopje&#39;, &#39;asia/pontianak&#39;, &#39;america/martinique&#39;, &#39;navajo&#39;, &#39;asia/oral&#39;, &#39;australia/queensland&#39;, &#39;brazil/east&#39;, &#39;america/moncton&#39;, &#39;pst8pdt&#39;, &#39;asia/kolkata&#39;, &#39;etc/gmt+0&#39;, &#39;atlantic/faeroe&#39;, &#39;asia/novosibirsk&#39;, &#39;europe/simferopol&#39;, &#39;america/paramaribo&#39;, &#39;us/hawaii&#39;, &#39;asia/novokuznetsk&#39;, &#39;gb&#39;}</span>
+ <label class="view-value-button pdoc-button" for="TIMEZONES-view-value"></label><span class="default_value">{&#39;australia/north&#39;, &#39;asia/dacca&#39;, &#39;america/merida&#39;, &#39;etc/gmt+5&#39;, &#39;asia/chita&#39;, &#39;america/eirunepe&#39;, &#39;asia/saigon&#39;, &#39;wet&#39;, &#39;asia/famagusta&#39;, &#39;asia/ulaanbaatar&#39;, &#39;america/detroit&#39;, &#39;indian/cocos&#39;, &#39;america/buenos_aires&#39;, &#39;america/st_lucia&#39;, &#39;europe/lisbon&#39;, &#39;america/grand_turk&#39;, &#39;canada/mountain&#39;, &#39;asia/urumqi&#39;, &#39;america/dawson&#39;, &#39;europe/moscow&#39;, &#39;mst7mdt&#39;, &#39;asia/ujung_pandang&#39;, &#39;w-su&#39;, &#39;asia/manila&#39;, &#39;asia/novokuznetsk&#39;, &#39;europe/stockholm&#39;, &#39;europe/kiev&#39;, &#39;us/samoa&#39;, &#39;est&#39;, &#39;australia/melbourne&#39;, &#39;africa/ndjamena&#39;, &#39;australia/lindeman&#39;, &#39;pacific/kosrae&#39;, &#39;pacific/apia&#39;, &#39;asia/riyadh&#39;, &#39;america/coral_harbour&#39;, &#39;asia/damascus&#39;, &#39;america/rio_branco&#39;, &#39;america/cambridge_bay&#39;, &#39;kwajalein&#39;, &#39;america/aruba&#39;, &#39;australia/perth&#39;, &#39;asia/hong_kong&#39;, &#39;europe/nicosia&#39;, &#39;asia/bangkok&#39;, &#39;america/indiana/petersburg&#39;, &#39;europe/jersey&#39;, &#39;pacific/niue&#39;, &#39;pacific/wake&#39;, &#39;america/menominee&#39;, &#39;america/montreal&#39;, &#39;africa/porto-novo&#39;, &#39;america/atikokan&#39;, &#39;etc/gmt-2&#39;, &#39;etc/gmt-7&#39;, &#39;america/bahia_banderas&#39;, &#39;singapore&#39;, &#39;atlantic/canary&#39;, &#39;asia/aden&#39;, &#39;america/bogota&#39;, &#39;europe/helsinki&#39;, &#39;pacific/nauru&#39;, &#39;indian/reunion&#39;, &#39;asia/dili&#39;, &#39;australia/tasmania&#39;, &#39;etc/gmt-9&#39;, &#39;africa/lubumbashi&#39;, &#39;asia/anadyr&#39;, &#39;america/argentina/catamarca&#39;, &#39;atlantic/bermuda&#39;, &#39;etc/gmt0&#39;, &#39;asia/harbin&#39;, &#39;america/montevideo&#39;, &#39;universal&#39;, &#39;america/indiana/knox&#39;, &#39;africa/addis_ababa&#39;, &#39;america/ciudad_juarez&#39;, &#39;america/la_paz&#39;, &#39;america/santa_isabel&#39;, &#39;america/martinique&#39;, &#39;us/arizona&#39;, &#39;america/belize&#39;, &#39;america/argentina/rio_gallegos&#39;, &#39;america/st_thomas&#39;, &#39;america/argentina/cordoba&#39;, &#39;asia/muscat&#39;, &#39;asia/ulan_bator&#39;, &#39;pacific/bougainville&#39;, &#39;atlantic/faroe&#39;, &#39;america/blanc-sablon&#39;, &#39;indian/comoro&#39;, &#39;pacific/midway&#39;, &#39;us/pacific&#39;, &#39;europe/volgograd&#39;, &#39;africa/harare&#39;, &#39;pacific/johnston&#39;, &#39;america/north_dakota/new_salem&#39;, &#39;america/catamarca&#39;, &#39;europe/busingen&#39;, &#39;europe/kaliningrad&#39;, &#39;africa/gaborone&#39;, &#39;pacific/efate&#39;, &#39;america/porto_acre&#39;, &#39;asia/jerusalem&#39;, &#39;etc/gmt+8&#39;, &#39;etc/gmt-11&#39;, &#39;america/santarem&#39;, &#39;asia/istanbul&#39;, &#39;asia/kuwait&#39;, &#39;antarctica/south_pole&#39;, &#39;nz-chat&#39;, &#39;america/glace_bay&#39;, &#39;america/inuvik&#39;, &#39;asia/colombo&#39;, &#39;australia/hobart&#39;, &#39;europe/vilnius&#39;, &#39;america/anguilla&#39;, &#39;america/pangnirtung&#39;, &#39;america/guyana&#39;, &#39;asia/samarkand&#39;, &#39;atlantic/st_helena&#39;, &#39;europe/paris&#39;, &#39;africa/djibouti&#39;, &#39;atlantic/reykjavik&#39;, &#39;europe/mariehamn&#39;, &#39;asia/bishkek&#39;, &#39;etc/utc&#39;, &#39;asia/hovd&#39;, &#39;gmt0&#39;, &#39;canada/central&#39;, &#39;asia/calcutta&#39;, &#39;america/cuiaba&#39;, &#39;europe/kyiv&#39;, &#39;america/yellowknife&#39;, &#39;america/montserrat&#39;, &#39;europe/tirane&#39;, &#39;europe/skopje&#39;, &#39;indian/mayotte&#39;, &#39;europe/sofia&#39;, &#39;europe/belfast&#39;, &#39;asia/singapore&#39;, &#39;us/aleutian&#39;, &#39;africa/ouagadougou&#39;, &#39;america/argentina/san_luis&#39;, &#39;america/cayenne&#39;, &#39;america/swift_current&#39;, &#39;africa/kigali&#39;, &#39;pacific/honolulu&#39;, &#39;africa/windhoek&#39;, &#39;asia/vladivostok&#39;, &#39;asia/tbilisi&#39;, &#39;asia/dhaka&#39;, &#39;gb&#39;, &#39;pacific/marquesas&#39;, &#39;asia/rangoon&#39;, &#39;africa/monrovia&#39;, &#39;australia/adelaide&#39;, &#39;asia/almaty&#39;, &#39;pacific/fakaofo&#39;, &#39;america/indiana/indianapolis&#39;, &#39;asia/ashgabat&#39;, &#39;america/havana&#39;, &#39;europe/riga&#39;, &#39;indian/mahe&#39;, &#39;america/indiana/tell_city&#39;, &#39;asia/kolkata&#39;, &#39;america/port_of_spain&#39;, &#39;gmt&#39;, &#39;europe/belgrade&#39;, &#39;america/thunder_bay&#39;, &#39;asia/amman&#39;, &#39;africa/kinshasa&#39;, &#39;america/phoenix&#39;, &#39;us/michigan&#39;, &#39;america/rainy_river&#39;, &#39;asia/irkutsk&#39;, &#39;america/fortaleza&#39;, &#39;asia/jayapura&#39;, &#39;indian/chagos&#39;, &#39;pacific/kwajalein&#39;, &#39;antarctica/mcmurdo&#39;, &#39;america/lower_princes&#39;, &#39;asia/thimbu&#39;, &#39;asia/ashkhabad&#39;, &#39;asia/qostanay&#39;, &#39;asia/katmandu&#39;, &#39;uct&#39;, &#39;pacific/fiji&#39;, &#39;us/alaska&#39;, &#39;europe/simferopol&#39;, &#39;america/chihuahua&#39;, &#39;australia/west&#39;, &#39;pacific/saipan&#39;, &#39;europe/istanbul&#39;, &#39;america/dawson_creek&#39;, &#39;asia/kashgar&#39;, &#39;mst&#39;, &#39;atlantic/azores&#39;, &#39;asia/gaza&#39;, &#39;europe/isle_of_man&#39;, &#39;australia/act&#39;, &#39;antarctica/davis&#39;, &#39;etc/gmt+6&#39;, &#39;asia/tomsk&#39;, &#39;chile/easterisland&#39;, &#39;america/nassau&#39;, &#39;etc/gmt+2&#39;, &#39;europe/sarajevo&#39;, &#39;europe/amsterdam&#39;, &#39;europe/astrakhan&#39;, &#39;america/st_johns&#39;, &#39;asia/thimphu&#39;, &#39;america/matamoros&#39;, &#39;america/rosario&#39;, &#39;africa/dar_es_salaam&#39;, &#39;asia/yekaterinburg&#39;, &#39;africa/niamey&#39;, &#39;africa/blantyre&#39;, &#39;africa/luanda&#39;, &#39;america/danmarkshavn&#39;, &#39;africa/kampala&#39;, &#39;asia/yakutsk&#39;, &#39;africa/bissau&#39;, &#39;america/monterrey&#39;, &#39;indian/mauritius&#39;, &#39;asia/seoul&#39;, &#39;america/yakutat&#39;, &#39;america/curacao&#39;, &#39;atlantic/stanley&#39;, &#39;europe/ulyanovsk&#39;, &#39;etc/gmt-1&#39;, &#39;mexico/general&#39;, &#39;america/el_salvador&#39;, &#39;america/virgin&#39;, &#39;asia/bahrain&#39;, &#39;america/tortola&#39;, &#39;africa/asmera&#39;, &#39;america/santiago&#39;, &#39;europe/tallinn&#39;, &#39;europe/ljubljana&#39;, &#39;australia/sydney&#39;, &#39;europe/copenhagen&#39;, &#39;rok&#39;, &#39;europe/luxembourg&#39;, &#39;america/guatemala&#39;, &#39;america/barbados&#39;, &#39;asia/taipei&#39;, &#39;pacific/pitcairn&#39;, &#39;america/st_barthelemy&#39;, &#39;asia/jakarta&#39;, &#39;antarctica/dumontdurville&#39;, &#39;europe/berlin&#39;, &#39;us/eastern&#39;, &#39;etc/gmt+10&#39;, &#39;pacific/funafuti&#39;, &#39;us/central&#39;, &#39;america/kentucky/monticello&#39;, &#39;pacific/wallis&#39;, &#39;antarctica/syowa&#39;, &#39;pacific/pohnpei&#39;, &#39;asia/macao&#39;, &#39;antarctica/macquarie&#39;, &#39;africa/malabo&#39;, &#39;asia/brunei&#39;, &#39;atlantic/madeira&#39;, &#39;roc&#39;, &#39;america/caracas&#39;, &#39;america/edmonton&#39;, &#39;antarctica/casey&#39;, &#39;america/winnipeg&#39;, &#39;est5edt&#39;, &#39;america/costa_rica&#39;, &#39;europe/bucharest&#39;, &#39;brazil/east&#39;, &#39;asia/oral&#39;, &#39;africa/mbabane&#39;, &#39;africa/lusaka&#39;, &#39;america/vancouver&#39;, &#39;asia/beirut&#39;, &#39;america/atka&#39;, &#39;asia/qyzylorda&#39;, &#39;pacific/auckland&#39;, &#39;australia/canberra&#39;, &#39;israel&#39;, &#39;cuba&#39;, &#39;eire&#39;, &#39;libya&#39;, &#39;pst8pdt&#39;, &#39;africa/casablanca&#39;, &#39;australia/south&#39;, &#39;asia/baku&#39;, &#39;asia/tokyo&#39;, &#39;met&#39;, &#39;antarctica/mawson&#39;, &#39;america/tegucigalpa&#39;, &#39;poland&#39;, &#39;america/adak&#39;, &#39;america/halifax&#39;, &#39;africa/khartoum&#39;, &#39;asia/tehran&#39;, &#39;america/thule&#39;, &#39;africa/cairo&#39;, &#39;america/goose_bay&#39;, &#39;africa/nouakchott&#39;, &#39;gb-eire&#39;, &#39;europe/uzhgorod&#39;, &#39;america/mazatlan&#39;, &#39;america/los_angeles&#39;, &#39;europe/rome&#39;, &#39;egypt&#39;, &#39;europe/vatican&#39;, &#39;america/north_dakota/center&#39;, &#39;america/sitka&#39;, &#39;europe/athens&#39;, &#39;us/east-indiana&#39;, &#39;america/boa_vista&#39;, &#39;america/regina&#39;, &#39;america/nuuk&#39;, &#39;america/mexico_city&#39;, &#39;asia/tashkent&#39;, &#39;brazil/acre&#39;, &#39;etc/gmt&#39;, &#39;africa/juba&#39;, &#39;europe/zagreb&#39;, &#39;america/punta_arenas&#39;, &#39;asia/dushanbe&#39;, &#39;asia/yerevan&#39;, &#39;pacific/yap&#39;, &#39;europe/kirov&#39;, &#39;antarctica/vostok&#39;, &#39;etc/gmt-14&#39;, &#39;america/mendoza&#39;, &#39;europe/bratislava&#39;, &#39;africa/timbuktu&#39;, &#39;asia/aqtau&#39;, &#39;europe/gibraltar&#39;, &#39;asia/krasnoyarsk&#39;, &#39;africa/tunis&#39;, &#39;asia/novosibirsk&#39;, &#39;america/north_dakota/beulah&#39;, &#39;america/argentina/san_juan&#39;, &#39;australia/eucla&#39;, &#39;africa/accra&#39;, &#39;europe/warsaw&#39;, &#39;africa/ceuta&#39;, &#39;africa/asmara&#39;, &#39;pacific/rarotonga&#39;, &#39;america/belem&#39;, &#39;indian/christmas&#39;, &#39;asia/phnom_penh&#39;, &#39;asia/pyongyang&#39;, &#39;antarctica/rothera&#39;, &#39;africa/bangui&#39;, &#39;america/ensenada&#39;, &#39;etc/gmt+9&#39;, &#39;etc/gmt-4&#39;, &#39;portugal&#39;, &#39;america/creston&#39;, &#39;america/juneau&#39;, &#39;america/iqaluit&#39;, &#39;australia/queensland&#39;, &#39;etc/gmt-5&#39;, &#39;prc&#39;, &#39;america/st_kitts&#39;, &#39;etc/gmt-13&#39;, &#39;utc&#39;, &#39;europe/podgorica&#39;, &#39;america/marigot&#39;, &#39;america/recife&#39;, &#39;brazil/west&#39;, &#39;mexico/bajanorte&#39;, &#39;etc/uct&#39;, &#39;europe/chisinau&#39;, &#39;america/indiana/winamac&#39;, &#39;hst&#39;, &#39;america/boise&#39;, &#39;africa/sao_tome&#39;, &#39;pacific/kanton&#39;, &#39;america/scoresbysund&#39;, &#39;europe/minsk&#39;, &#39;canada/eastern&#39;, &#39;europe/dublin&#39;, &#39;zulu&#39;, &#39;europe/oslo&#39;, &#39;pacific/guam&#39;, &#39;asia/khandyga&#39;, &#39;america/lima&#39;, &#39;europe/guernsey&#39;, &#39;asia/kuala_lumpur&#39;, &#39;europe/monaco&#39;, &#39;america/cayman&#39;, &#39;america/noronha&#39;, &#39;eet&#39;, &#39;asia/ust-nera&#39;, &#39;antarctica/palmer&#39;, &#39;asia/omsk&#39;, &#39;america/kentucky/louisville&#39;, &#39;america/guayaquil&#39;, &#39;asia/nicosia&#39;, &#39;antarctica/troll&#39;, &#39;america/argentina/tucuman&#39;, &#39;etc/gmt-6&#39;, &#39;africa/tripoli&#39;, &#39;asia/kabul&#39;, &#39;africa/lome&#39;, &#39;america/metlakatla&#39;, &#39;asia/macau&#39;, &#39;america/fort_wayne&#39;, &#39;asia/kuching&#39;, &#39;europe/london&#39;, &#39;iceland&#39;, &#39;america/argentina/buenos_aires&#39;, &#39;us/indiana-starke&#39;, &#39;us/mountain&#39;, &#39;pacific/gambier&#39;, &#39;america/indiana/vevay&#39;, &#39;america/fort_nelson&#39;, &#39;asia/tel_aviv&#39;, &#39;america/jujuy&#39;, &#39;asia/magadan&#39;, &#39;asia/baghdad&#39;, &#39;america/manaus&#39;, &#39;etc/greenwich&#39;, &#39;europe/tiraspol&#39;, &#39;america/indianapolis&#39;, &#39;america/argentina/mendoza&#39;, &#39;america/araguaina&#39;, &#39;africa/nairobi&#39;, &#39;africa/freetown&#39;, &#39;america/kralendijk&#39;, &#39;africa/banjul&#39;, &#39;america/antigua&#39;, &#39;africa/el_aaiun&#39;, &#39;jamaica&#39;, &#39;australia/brisbane&#39;, &#39;asia/makassar&#39;, &#39;asia/srednekolymsk&#39;, &#39;europe/samara&#39;, &#39;gmt-0&#39;, &#39;america/bahia&#39;, &#39;pacific/samoa&#39;, &#39;america/tijuana&#39;, &#39;navajo&#39;, &#39;pacific/ponape&#39;, &#39;america/hermosillo&#39;, &#39;canada/saskatchewan&#39;, &#39;asia/karachi&#39;, &#39;atlantic/jan_mayen&#39;, &#39;europe/zurich&#39;, &#39;america/port-au-prince&#39;, &#39;europe/vienna&#39;, &#39;europe/madrid&#39;, &#39;america/moncton&#39;, &#39;asia/hebron&#39;, &#39;etc/gmt-3&#39;, &#39;atlantic/cape_verde&#39;, &#39;africa/johannesburg&#39;, &#39;asia/yangon&#39;, &#39;asia/vientiane&#39;, &#39;etc/gmt+3&#39;, &#39;america/knox_in&#39;, &#39;europe/zaporozhye&#39;, &#39;america/jamaica&#39;, &#39;africa/abidjan&#39;, &#39;etc/gmt+7&#39;, &#39;pacific/pago_pago&#39;, &#39;africa/mogadishu&#39;, &#39;etc/zulu&#39;, &#39;america/resolute&#39;, &#39;atlantic/faeroe&#39;, &#39;america/godthab&#39;, &#39;pacific/norfolk&#39;, &#39;pacific/truk&#39;, &#39;asia/barnaul&#39;, &#39;america/argentina/comodrivadavia&#39;, &#39;africa/lagos&#39;, &#39;america/maceio&#39;, &#39;america/santo_domingo&#39;, &#39;iran&#39;, &#39;america/shiprock&#39;, &#39;chile/continental&#39;, &#39;africa/douala&#39;, &#39;etc/gmt-12&#39;, &#39;america/indiana/marengo&#39;, &#39;america/denver&#39;, &#39;america/argentina/jujuy&#39;, &#39;america/guadeloupe&#39;, &#39;mexico/bajasur&#39;, &#39;arctic/longyearbyen&#39;, &#39;america/new_york&#39;, &#39;america/indiana/vincennes&#39;, &#39;america/louisville&#39;, &#39;asia/shanghai&#39;, &#39;australia/victoria&#39;, &#39;greenwich&#39;, &#39;brazil/denoronha&#39;, &#39;etc/universal&#39;, &#39;etc/gmt+0&#39;, &#39;asia/chungking&#39;, &#39;pacific/chuuk&#39;, &#39;pacific/easter&#39;, &#39;pacific/palau&#39;, &#39;etc/gmt+12&#39;, &#39;pacific/guadalcanal&#39;, &#39;america/nome&#39;, &#39;africa/algiers&#39;, &#39;etc/gmt+1&#39;, &#39;europe/brussels&#39;, &#39;europe/saratov&#39;, &#39;atlantic/south_georgia&#39;, &#39;pacific/tarawa&#39;, &#39;etc/gmt+4&#39;, &#39;australia/currie&#39;, &#39;australia/nsw&#39;, &#39;america/ojinaga&#39;, &#39;america/paramaribo&#39;, &#39;japan&#39;, &#39;asia/dubai&#39;, &#39;europe/san_marino&#39;, &#39;america/nipigon&#39;, &#39;australia/darwin&#39;, &#39;etc/gmt-0&#39;, &#39;asia/aqtobe&#39;, &#39;africa/bamako&#39;, &#39;africa/dakar&#39;, &#39;america/rankin_inlet&#39;, &#39;us/hawaii&#39;, &#39;america/argentina/la_rioja&#39;, &#39;africa/libreville&#39;, &#39;america/st_vincent&#39;, &#39;asia/kamchatka&#39;, &#39;africa/conakry&#39;, &#39;america/campo_grande&#39;, &#39;canada/yukon&#39;, &#39;europe/vaduz&#39;, &#39;asia/qatar&#39;, &#39;asia/choibalsan&#39;, &#39;america/cancun&#39;, &#39;pacific/port_moresby&#39;, &#39;pacific/enderbury&#39;, &#39;australia/yancowinna&#39;, &#39;america/anchorage&#39;, &#39;america/whitehorse&#39;, &#39;australia/lhi&#39;, &#39;america/cordoba&#39;, &#39;america/sao_paulo&#39;, &#39;indian/maldives&#39;, &#39;america/asuncion&#39;, &#39;australia/broken_hill&#39;, &#39;asia/sakhalin&#39;, &#39;america/puerto_rico&#39;, &#39;cst6cdt&#39;, &#39;canada/pacific&#39;, &#39;america/managua&#39;, &#39;america/grenada&#39;, &#39;africa/maputo&#39;, &#39;america/miquelon&#39;, &#39;hongkong&#39;, &#39;nz&#39;, &#39;etc/gmt-10&#39;, &#39;asia/chongqing&#39;, &#39;pacific/galapagos&#39;, &#39;pacific/tahiti&#39;, &#39;indian/kerguelen&#39;, &#39;africa/brazzaville&#39;, &#39;europe/andorra&#39;, &#39;pacific/noumea&#39;, &#39;etc/gmt-8&#39;, &#39;asia/ho_chi_minh&#39;, &#39;cet&#39;, &#39;america/argentina/ushuaia&#39;, &#39;canada/newfoundland&#39;, &#39;america/chicago&#39;, &#39;america/porto_velho&#39;, &#39;pacific/tongatapu&#39;, &#39;america/panama&#39;, &#39;europe/prague&#39;, &#39;asia/atyrau&#39;, &#39;asia/pontianak&#39;, &#39;europe/budapest&#39;, &#39;pacific/majuro&#39;, &#39;canada/atlantic&#39;, &#39;australia/lord_howe&#39;, &#39;turkey&#39;, &#39;indian/antananarivo&#39;, &#39;pacific/kiritimati&#39;, &#39;america/dominica&#39;, &#39;africa/maseru&#39;, &#39;europe/malta&#39;, &#39;america/argentina/salta&#39;, &#39;pacific/chatham&#39;, &#39;gmt+0&#39;, &#39;america/toronto&#39;, &#39;africa/bujumbura&#39;, &#39;asia/kathmandu&#39;, &#39;etc/gmt+11&#39;}</span>
</div>
diff --git a/docs/sqlglot/tokens.html b/docs/sqlglot/tokens.html
index 186d192..2d2455e 100644
--- a/docs/sqlglot/tokens.html
+++ b/docs/sqlglot/tokens.html
@@ -1123,6 +1123,12 @@
<a class="variable" href="#Tokenizer.VAR_SINGLE_TOKENS">VAR_SINGLE_TOKENS</a>
</li>
<li>
+ <a class="variable" href="#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER">HEREDOC_TAG_IS_IDENTIFIER</a>
+ </li>
+ <li>
+ <a class="variable" href="#Tokenizer.HEREDOC_STRING_ALTERNATIVE">HEREDOC_STRING_ALTERNATIVE</a>
+ </li>
+ <li>
<a class="variable" href="#Tokenizer.KEYWORDS">KEYWORDS</a>
</li>
<li>
@@ -1696,847 +1702,867 @@
</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a> <span class="n">command_prefix_tokens</span><span class="o">=</span><span class="p">{</span>
</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a> <span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">COMMAND_PREFIX_TOKENS</span>
</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a> <span class="p">},</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a> <span class="p">)</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="n">token_types</span> <span class="o">=</span> <span class="n">RsTokenTypeSettings</span><span class="p">(</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="n">bit_string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">],</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="n">break_</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">],</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="n">dcolon</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">],</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="n">heredoc_string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">],</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <span class="n">hex_string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">],</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="n">identifier</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">],</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="n">number</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">],</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a> <span class="n">parameter</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">],</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">semicolon</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">],</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="n">string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">],</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a> <span class="n">var</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">],</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="p">)</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span> <span class="o">=</span> <span class="n">RsTokenizer</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="n">token_types</span><span class="p">)</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a>
-</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="k">return</span> <span class="n">klass</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a> <span class="n">heredoc_tag_is_identifier</span><span class="o">=</span><span class="n">klass</span><span class="o">.</span><span class="n">HEREDOC_TAG_IS_IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="p">)</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="n">token_types</span> <span class="o">=</span> <span class="n">RsTokenTypeSettings</span><span class="p">(</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="n">bit_string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">],</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="n">break_</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">],</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="n">dcolon</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">],</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <span class="n">heredoc_string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">],</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="n">hex_string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">],</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="n">identifier</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">],</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a> <span class="n">number</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">],</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">parameter</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">],</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="n">semicolon</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">],</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a> <span class="n">string</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">],</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="n">var</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">],</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="n">heredoc_string_alternative</span><span class="o">=</span><span class="n">_TOKEN_TYPE_TO_INDEX</span><span class="p">[</span><span class="n">klass</span><span class="o">.</span><span class="n">HEREDOC_STRING_ALTERNATIVE</span><span class="p">],</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a> <span class="p">)</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span> <span class="o">=</span> <span class="n">RsTokenizer</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="n">token_types</span><span class="p">)</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a>
-</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a>
-</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a><span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Tokenizer</span><span class="p">):</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a> <span class="s2">&quot;(&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="s2">&quot;)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="s2">&quot;[&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a> <span class="s2">&quot;]&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="s2">&quot;{&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a> <span class="s2">&quot;}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">,</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="s2">&quot;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">,</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="s2">&quot;^&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">,</span>
-</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a> <span class="s2">&quot;:&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">,</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="s2">&quot;,&quot;</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-540"><a href="#L-540"><span class="linenos"> 540</span></a> <span class="s2">&quot;.&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="s2">&quot;-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">,</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a> <span class="s2">&quot;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="s2">&quot;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="s2">&quot;&lt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="s2">&quot;%&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">,</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="s2">&quot;!&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a> <span class="s2">&quot;|&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="s2">&quot;+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">,</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="s2">&quot;;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="s2">&quot;/&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">,</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BACKSLASH</span><span class="p">,</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="s2">&quot;*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</span><span class="p">,</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="s2">&quot;?&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">,</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="s2">&quot;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="s2">&quot;&#39;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="s2">&quot;`&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="s1">&#39;&quot;&#39;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;#&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">,</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="p">}</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a>
-</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="n">BIT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="n">BYTE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="n">HEX_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="n">HEREDOC_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="n">UNICODE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="n">IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="n">IDENTIFIER_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="n">QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="n">VAR_SINGLE_TOKENS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a>
-</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="c1"># Autofilled</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="n">_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="n">_IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="n">_IDENTIFIER_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="n">_QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="n">_STRING_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="n">_RS_TOKENIZER</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a>
-</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="n">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="s2">%</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2">%</span><span class="se">}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="s2">&quot;/*+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">,</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="s2">&quot;==&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
-</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="s2">&quot;::&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span>
-</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="s2">&quot;||&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">,</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;&gt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
-</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;&lt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
-</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="s2">&quot;!=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;:=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON_EQ</span><span class="p">,</span>
-</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;&lt;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">,</span>
-</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">,</span>
-</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;-&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">,</span>
-</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">,</span>
-</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="s2">&quot;#&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">,</span>
-</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">,</span>
-</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">,</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">,</span>
-</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
-</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;ALL&quot;</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-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;ALWAYS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALWAYS</span><span class="p">,</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;AND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">,</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;ANTI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;ASC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
-</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;AS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span>
-</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
-</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
-</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;BEGIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;BETWEEN&quot;</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-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="s2">&quot;CACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
-</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="s2">&quot;UNCACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</span><span class="p">,</span>
-</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">,</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">,</span>
-</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;COLUMN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
-</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;COMMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">,</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;CONNECT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">,</span>
-</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
-</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;CREATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span>
-</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
-</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a> <span class="s2">&quot;CUBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span>
-</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
-</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;CURRENT_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-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
-</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span>
-</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span>
-</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="s2">&quot;DESC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">,</span>
-</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="s2">&quot;DESCRIBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">,</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="s2">&quot;DISTINCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">,</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">,</span>
-</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">,</span>
-</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span>
-</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="s2">&quot;ELSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">,</span>
-</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;END&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">,</span>
-</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">,</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;EXECUTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
-</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;EXISTS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">,</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;FALSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">,</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;FETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
-</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;FILTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
-</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
-</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
-</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
-</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="s2">&quot;FOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">,</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span>
-</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;GEOGRAPHY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
-</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
-</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;GLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
-</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;GROUP BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">,</span>
-</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="s2">&quot;GROUPING SETS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">,</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;HAVING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">,</span>
-</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a> <span class="s2">&quot;ILIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;IN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
-</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a> <span class="s2">&quot;INET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
-</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="s2">&quot;INNER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
-</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="s2">&quot;INSERT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">,</span>
-</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="s2">&quot;INTERVAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
-</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a> <span class="s2">&quot;INTERSECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a> <span class="s2">&quot;INTO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">,</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="s2">&quot;IS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
-</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">,</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;KEEP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
-</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;KILL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">,</span>
-</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="s2">&quot;LATERAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">,</span>
-</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <span class="s2">&quot;LEFT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="s2">&quot;LIMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span>
-</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
-</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
-</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="s2">&quot;NATURAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="s2">&quot;NOTNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">,</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="s2">&quot;NULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="s2">&quot;OBJECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
-</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="s2">&quot;OFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
-</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span>
-</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="s2">&quot;OR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span>
-</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="s2">&quot;ORDER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">,</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
-</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;OUTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
-</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;OVER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">,</span>
-</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">,</span>
-</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;OVERWRITE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;PARTITION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
-</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;PARTITION BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
-</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;PARTITIONED BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
-</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
-</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;PERCENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;PIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;PRAGMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
-</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;PROCEDURE&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-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;QUALIFY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">,</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
-</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;RECURSIVE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">,</span>
-</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;REGEXP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;REPLACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
-</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
-</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;REFERENCES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
-</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;RLIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span><span class="p">,</span>
-</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;ROLLUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">,</span>
-</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
-</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;ROWS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
-</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
-</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;SELECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
-</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;SEMI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;SHOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</span><span class="p">,</span>
-</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;SOME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">,</span>
-</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;SORT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">,</span>
-</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="s2">&quot;START WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">,</span>
-</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
-</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="s2">&quot;TEMPORARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="s2">&quot;THEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">,</span>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;TRUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;UNION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
-</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
-</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
-</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="s2">&quot;UNPIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
-</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="s2">&quot;UPDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="s2">&quot;USE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">,</span>
-</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">,</span>
-</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="s2">&quot;UUID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
-</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;VOLATILE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
-</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="s2">&quot;WHEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">,</span>
-</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="s2">&quot;WHERE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">,</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="s2">&quot;WINDOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="s2">&quot;APPLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="s2">&quot;BIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
-</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="s2">&quot;BOOL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
-</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
-</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="s2">&quot;BYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;MEDIUMINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
-</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;INT1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;TINYINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;SHORT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;HUGEINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;INT2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;INTEGER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;INT4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;INT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;LONG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;BIGINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;DEC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;BIGDECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
-</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
-</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
-</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="s2">&quot;NUMBER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;FIXED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</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-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="s2">&quot;FLOAT&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-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="s2">&quot;FLOAT4&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-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="s2">&quot;FLOAT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="s2">&quot;JSON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
-</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="s2">&quot;CHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="s2">&quot;CHARACTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="s2">&quot;NCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="s2">&quot;NVARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="s2">&quot;BPCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
-</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="s2">&quot;STR&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-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="s2">&quot;STRING&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-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="s2">&quot;TEXT&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-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
-</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
-</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="s2">&quot;TINYTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">,</span>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="s2">&quot;CLOB&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-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="s2">&quot;LONGVARCHAR&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-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="s2">&quot;BINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
-</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="s2">&quot;BLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
-</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
-</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="s2">&quot;TINYBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">,</span>
-</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="s2">&quot;BYTEA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</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">TIME</span><span class="p">,</span>
-</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;TIMESTAMP&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-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;TIMESTAMPTZ&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-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;TIMESTAMPLTZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="s2">&quot;DATETIME&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-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
-</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
-</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
-</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
-</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
-</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
-</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
-</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
-</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
-</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
-</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="s2">&quot;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-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="s2">&quot;ALTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">,</span>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="s2">&quot;ANALYZE&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-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="s2">&quot;CALL&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-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">,</span>
-</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="s2">&quot;COPY&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-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="s2">&quot;EXPLAIN&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-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="s2">&quot;GRANT&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-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="s2">&quot;OPTIMIZE&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-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="s2">&quot;PREPARE&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-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="s2">&quot;TRUNCATE&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-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="s2">&quot;VACUUM&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-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
-</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="s2">&quot;FOR VERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
-</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="s2">&quot;FOR TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
-</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="p">}</span>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="n">WHITE_SPACE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="s2">&quot; &quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
-</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
-</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
-</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="p">}</span>
-</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a>
-</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="p">}</span>
-</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a>
-</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="n">COMMAND_PREFIX_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">}</span>
-</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a>
-</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
-</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="n">NUMERIC_LITERALS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a>
-</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</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-879"><a href="#L-879"><span class="linenos"> 879</span></a>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
-</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
-</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
-</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
-</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
-</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
-</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
-</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
-</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
-</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="s2">&quot;_rs_dialect_settings&quot;</span><span class="p">,</span>
-</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="p">)</span>
-</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a>
-</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a>
-</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a>
-</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span> <span class="o">=</span> <span class="n">RsTokenizerDialectSettings</span><span class="p">(</span>
-</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="n">escape_sequences</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="p">,</span>
-</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">identifiers_can_start_with_digit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">,</span>
-</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="p">)</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a> <span class="k">return</span> <span class="n">klass</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a>
+</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a>
+</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a><span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Tokenizer</span><span class="p">):</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="s2">&quot;(&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a> <span class="s2">&quot;)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="s2">&quot;[&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a> <span class="s2">&quot;]&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="s2">&quot;{&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="s2">&quot;}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">,</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a> <span class="s2">&quot;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">,</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="s2">&quot;^&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">,</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a> <span class="s2">&quot;:&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">,</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="s2">&quot;,&quot;</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-542"><a href="#L-542"><span class="linenos"> 542</span></a> <span class="s2">&quot;.&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="s2">&quot;-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">,</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="s2">&quot;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="s2">&quot;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="s2">&quot;&lt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a> <span class="s2">&quot;%&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">,</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="s2">&quot;!&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="s2">&quot;|&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="s2">&quot;+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">,</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a> <span class="s2">&quot;;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="s2">&quot;/&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">,</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BACKSLASH</span><span class="p">,</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="s2">&quot;*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</span><span class="p">,</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="s2">&quot;?&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">,</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="s2">&quot;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="s2">&quot;&#39;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;`&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="s1">&#39;&quot;&#39;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="s2">&quot;#&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">,</span>
+</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="p">}</span>
+</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a>
+</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="n">BIT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="n">BYTE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="n">HEX_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="n">HEREDOC_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="n">UNICODE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="n">IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="n">IDENTIFIER_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="n">QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="n">VAR_SINGLE_TOKENS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a>
+</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a> <span class="c1"># Whether or not the heredoc tags follow the same lexical rules as unquoted identifiers</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="n">HEREDOC_TAG_IS_IDENTIFIER</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a>
+</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="c1"># Token that we&#39;ll generate as a fallback if the heredoc prefix doesn&#39;t correspond to a heredoc</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="n">HEREDOC_STRING_ALTERNATIVE</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
+</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a>
+</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="c1"># Autofilled</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="n">_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="n">_IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="n">_IDENTIFIER_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="n">_QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="n">_STRING_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="n">_RS_TOKENIZER</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a>
+</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="n">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="s2">%</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2">%</span><span class="se">}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;/*+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">,</span>
+</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;==&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
+</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;::&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;||&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">,</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;&gt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="s2">&quot;&lt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="s2">&quot;!=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;:=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON_EQ</span><span class="p">,</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;&lt;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">,</span>
+</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">,</span>
+</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;-&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">,</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">,</span>
+</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;#&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">,</span>
+</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">,</span>
+</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">,</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">,</span>
+</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;ALL&quot;</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-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="s2">&quot;ALWAYS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALWAYS</span><span class="p">,</span>
+</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;AND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">,</span>
+</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;ANTI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="s2">&quot;ASC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
+</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="s2">&quot;AS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span>
+</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
+</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;BEGIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;BETWEEN&quot;</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-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;CACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;UNCACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</span><span class="p">,</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
+</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">,</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">,</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
+</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;COLUMN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
+</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;COMMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">,</span>
+</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;CONNECT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">,</span>
+</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
+</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;CREATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span>
+</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
+</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="s2">&quot;CUBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
+</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="s2">&quot;CURRENT_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-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
+</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;DESC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">,</span>
+</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="s2">&quot;DESCRIBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">,</span>
+</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;DISTINCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">,</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">,</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">,</span>
+</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;ELSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">,</span>
+</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;END&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">,</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">,</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
+</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="s2">&quot;EXECUTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="s2">&quot;EXISTS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">,</span>
+</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;FALSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">,</span>
+</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;FETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;FILTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
+</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
+</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="s2">&quot;FOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">,</span>
+</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span>
+</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="s2">&quot;GEOGRAPHY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
+</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="s2">&quot;GLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="s2">&quot;GROUP BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">,</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="s2">&quot;GROUPING SETS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">,</span>
+</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a> <span class="s2">&quot;HAVING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">,</span>
+</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a> <span class="s2">&quot;ILIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="s2">&quot;IN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
+</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;INET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
+</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;INNER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
+</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;INSERT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">,</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="s2">&quot;INTERVAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
+</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <span class="s2">&quot;INTERSECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
+</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a> <span class="s2">&quot;INTO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">,</span>
+</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="s2">&quot;IS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
+</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
+</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">,</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="s2">&quot;KEEP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
+</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="s2">&quot;KILL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">,</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="s2">&quot;LATERAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">,</span>
+</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="s2">&quot;LEFT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="s2">&quot;LIMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span>
+</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
+</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
+</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="s2">&quot;NATURAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
+</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
+</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;NOTNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">,</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;NULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span>
+</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;OBJECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
+</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;OFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;OR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
+</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;ORDER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">,</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;OUTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;OVER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">,</span>
+</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">,</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;OVERWRITE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
+</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;PARTITION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;PARTITION BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
+</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;PARTITIONED BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
+</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
+</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;PERCENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
+</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;PIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
+</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;PRAGMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;PROCEDURE&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-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;QUALIFY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">,</span>
+</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;RECURSIVE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">,</span>
+</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;REGEXP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;REPLACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
+</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;REFERENCES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
+</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;RLIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
+</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span><span class="p">,</span>
+</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;ROLLUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">,</span>
+</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;ROWS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
+</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
+</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="s2">&quot;SELECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
+</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="s2">&quot;SEMI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="s2">&quot;SHOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</span><span class="p">,</span>
+</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;SOME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">,</span>
+</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;SORT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">,</span>
+</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="s2">&quot;START WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">,</span>
+</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
+</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="s2">&quot;TEMPORARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="s2">&quot;THEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">,</span>
+</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="s2">&quot;TRUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
+</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="s2">&quot;UNION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
+</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
+</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="s2">&quot;UNPIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
+</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="s2">&quot;UPDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="s2">&quot;USE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">,</span>
+</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">,</span>
+</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="s2">&quot;UUID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
+</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
+</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
+</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="s2">&quot;VOLATILE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
+</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="s2">&quot;WHEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">,</span>
+</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="s2">&quot;WHERE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">,</span>
+</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;WINDOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;APPLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;BIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;BOOL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
+</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
+</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;BYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;MEDIUMINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;INT1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;TINYINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;SHORT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;HUGEINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;INT2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;INTEGER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;INT4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="s2">&quot;INT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="s2">&quot;LONG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="s2">&quot;BIGINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;DEC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="s2">&quot;BIGDECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
+</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
+</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
+</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="s2">&quot;NUMBER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="s2">&quot;FIXED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</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-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="s2">&quot;FLOAT&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-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="s2">&quot;FLOAT4&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-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="s2">&quot;FLOAT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="s2">&quot;JSON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="s2">&quot;CHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="s2">&quot;CHARACTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="s2">&quot;NCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="s2">&quot;NVARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="s2">&quot;BPCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
+</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="s2">&quot;STR&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-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="s2">&quot;STRING&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-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="s2">&quot;TEXT&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-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
+</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
+</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="s2">&quot;TINYTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">,</span>
+</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;CLOB&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-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;LONGVARCHAR&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-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;BINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
+</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;BLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
+</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
+</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="s2">&quot;TINYBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">,</span>
+</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="s2">&quot;BYTEA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</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">TIME</span><span class="p">,</span>
+</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="s2">&quot;TIMESTAMP&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-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="s2">&quot;TIMESTAMPTZ&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-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="s2">&quot;TIMESTAMPLTZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="s2">&quot;DATETIME&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-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
+</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
+</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
+</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
+</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
+</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
+</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
+</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="s2">&quot;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-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="s2">&quot;ALTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">,</span>
+</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="s2">&quot;ANALYZE&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-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="s2">&quot;CALL&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-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">,</span>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="s2">&quot;COPY&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-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="s2">&quot;EXPLAIN&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-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="s2">&quot;GRANT&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-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="s2">&quot;OPTIMIZE&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-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="s2">&quot;PREPARE&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-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="s2">&quot;TRUNCATE&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-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="s2">&quot;VACUUM&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-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
+</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="s2">&quot;FOR VERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="s2">&quot;FOR TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="p">}</span>
+</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a>
+</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="n">WHITE_SPACE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="s2">&quot; &quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
+</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
+</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="p">}</span>
+</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a>
+</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="p">}</span>
+</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="n">COMMAND_PREFIX_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">}</span>
+</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a>
+</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="n">NUMERIC_LITERALS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a>
+</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</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-887"><a href="#L-887"><span class="linenos"> 887</span></a>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
+</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
+</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
+</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
+</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
+</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
+</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
+</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
+</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
+</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="s2">&quot;_rs_dialect_settings&quot;</span><span class="p">,</span>
+</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="p">)</span>
+</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a>
+</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a>
-</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a>
-</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a>
-</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a list of tokens corresponding to the SQL string `sql`.&quot;&quot;&quot;</span>
-</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize_rs</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a>
-</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span>
-</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
-</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="n">context</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
-</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span> <span class="o">=</span> <span class="n">RsTokenizerDialectSettings</span><span class="p">(</span>
+</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">escape_sequences</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="p">,</span>
+</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="n">identifiers_can_start_with_digit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">,</span>
+</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="p">)</span>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a>
+</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a>
+</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a list of tokens corresponding to the SQL string `sql`.&quot;&quot;&quot;</span>
+</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize_rs</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span>
+</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="k">def</span> <span class="nf">_scan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">until</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
-</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a>
-</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="c1"># skip spaces inline rather than iteratively call advance()</span>
-</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="c1"># for performance reasons</span>
-</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="k">while</span> <span class="n">current</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="n">char</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">current</span><span class="p">]</span>
-</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a>
-</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="o">==</span> <span class="s2">&quot; &quot;</span> <span class="ow">or</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">):</span>
-</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="n">current</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="k">break</span>
-</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a>
-</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">current</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="n">current</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">n</span> <span class="k">if</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a>
-</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="k">break</span>
-</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a>
-</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
-</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_number</span><span class="p">()</span>
-</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">])</span>
-</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_keywords</span><span class="p">()</span>
+</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
+</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="n">context</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a>
+</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
+</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a>
+</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="k">def</span> <span class="nf">_scan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">until</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a>
+</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="c1"># skip spaces inline rather than iteratively call advance()</span>
+</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="c1"># for performance reasons</span>
+</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="k">while</span> <span class="n">current</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">char</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">current</span><span class="p">]</span>
+</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a>
+</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="o">==</span> <span class="s2">&quot; &quot;</span> <span class="ow">or</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">):</span>
+</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="n">current</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="k">break</span>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a>
+</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">current</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="n">current</span>
+</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">n</span> <span class="k">if</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a>
+</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="k">break</span>
</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a>
-</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="k">if</span> <span class="n">until</span> <span class="ow">and</span> <span class="n">until</span><span class="p">():</span>
-</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="k">break</span>
-</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
-</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
-</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a>
-</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="k">def</span> <span class="nf">_chars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">if</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span>
-</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a>
-</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">size</span>
-</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a>
-</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</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="kc">None</span><span class="p">:</span>
-</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span> <span class="ow">is</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
-</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="c1"># Ensures we don&#39;t count an extra line if we get a \r\n line break sequence</span>
-</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a>
-</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">+=</span> <span class="n">i</span>
-</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a>
-</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+=</span> <span class="n">i</span>
-</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
-</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a>
-</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
-</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
-</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
-</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a>
-</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="n">_col</span>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="n">_current</span>
-</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="n">_end</span>
-</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="n">_peek</span>
-</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a>
-</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="nd">@property</span>
-</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="k">def</span> <span class="nf">_text</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a>
-</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
-</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
-</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="k">def</span> <span class="nf">_add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
-</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a>
-</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="n">Token</span><span class="p">(</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="n">token_type</span><span class="p">,</span>
-</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
-</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
-</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="n">start</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="p">,</span>
-</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="p">)</span>
-</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="p">)</span>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a>
-</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="c1"># If we have either a semicolon or a begin token before the command&#39;s token, we&#39;ll parse</span>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMANDS</span>
-</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">!=</span> <span class="s2">&quot;;&quot;</span>
-</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMAND_PREFIX_TOKENS</span><span class="p">)</span>
-</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="p">):</span>
-</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
-</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[:</span><span class="n">tokens</span><span class="p">]</span>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="n">text</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">start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="k">def</span> <span class="nf">_scan_keywords</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
-</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="n">trie</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_KEYWORD_TRIE</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
-</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
-</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
-</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">char</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a>
-</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="k">break</span>
-</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a>
-</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">size</span>
-</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
+</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
+</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_number</span><span class="p">()</span>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">])</span>
+</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_keywords</span><span class="p">()</span>
+</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a>
+</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="k">if</span> <span class="n">until</span> <span class="ow">and</span> <span class="n">until</span><span class="p">():</span>
+</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="k">break</span>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a>
+</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
+</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
+</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a>
+</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="k">def</span> <span class="nf">_chars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="k">if</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span>
+</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a>
+</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">size</span>
+</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a>
+</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a>
+</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</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="kc">None</span><span class="p">:</span>
+</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span> <span class="ow">is</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
+</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="c1"># Ensures we don&#39;t count an extra line if we get a \r\n line break sequence</span>
+</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span>
+</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a>
+</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">+=</span> <span class="n">i</span>
+</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a>
+</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+=</span> <span class="n">i</span>
+</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
+</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a>
+</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
+</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
+</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a>
+</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
+</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a>
+</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="n">_col</span>
+</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="n">_current</span>
+</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="n">_end</span>
+</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="n">_peek</span>
+</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a>
+</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="nd">@property</span>
+</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="k">def</span> <span class="nf">_text</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a>
+</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
+</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
+</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="k">def</span> <span class="nf">_add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a>
+</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
+</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
+</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a>
+</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="n">Token</span><span class="p">(</span>
+</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="n">token_type</span><span class="p">,</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
+</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
+</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
+</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="n">start</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="p">,</span>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
+</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="p">)</span>
+</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="p">)</span>
+</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="c1"># If we have either a semicolon or a begin token before the command&#39;s token, we&#39;ll parse</span>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
+</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMANDS</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">!=</span> <span class="s2">&quot;;&quot;</span>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMAND_PREFIX_TOKENS</span><span class="p">)</span>
+</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="p">):</span>
+</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
+</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span>
+</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[:</span><span class="n">tokens</span><span class="p">]</span>
+</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="n">text</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">start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a>
+</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="k">def</span> <span class="nf">_scan_keywords</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="n">trie</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_KEYWORD_TRIE</span>
+</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
+</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a>
+</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
+</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
+</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
+</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">char</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="n">char</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">end</span><span class="p">]</span>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="n">is_space</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="k">break</span>
+</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a>
-</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_space</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">prev_space</span><span class="p">:</span>
-</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
-</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">break</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="k">if</span> <span class="n">word</span><span class="p">:</span>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="k">return</span>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_comment</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
-</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="k">return</span>
-</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="k">if</span> <span class="n">prev_space</span> <span class="ow">or</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">char</span><span class="p">:</span>
-</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">word</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">[</span><span class="n">word</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="n">word</span><span class="p">)</span>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="k">return</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
-</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span>
-</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="k">return</span>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_var</span><span class="p">()</span>
-</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a>
-</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="k">def</span> <span class="nf">_scan_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment_start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="k">if</span> <span class="n">comment_start</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">:</span>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a>
-</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="n">comment_start_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="n">comment_start_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_start</span><span class="p">)</span>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="n">comment_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">[</span><span class="n">comment_start</span><span class="p">]</span>
+</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">size</span>
+</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a>
+</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="n">char</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">end</span><span class="p">]</span>
+</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="n">is_space</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a>
+</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_space</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">prev_space</span><span class="p">:</span>
+</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
+</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
+</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="k">break</span>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a>
+</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="k">if</span> <span class="n">word</span><span class="p">:</span>
+</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="k">return</span>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_comment</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="k">return</span>
+</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="k">if</span> <span class="n">prev_space</span> <span class="ow">or</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">char</span><span class="p">:</span>
+</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">word</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">[</span><span class="n">word</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="n">word</span><span class="p">)</span>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="k">return</span>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
+</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span>
+</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="k">return</span>
+</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a>
+</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_var</span><span class="p">()</span>
</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a>
-</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
-</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_start_size</span><span class="p">)</span>
+</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="k">def</span> <span class="nf">_scan_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment_start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="k">if</span> <span class="n">comment_start</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">:</span>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="n">comment_end_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_end</span><span class="p">)</span>
-</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">comment_end_size</span><span class="p">)</span> <span class="o">!=</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="n">comment_start_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="n">comment_start_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_start</span><span class="p">)</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="n">comment_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">[</span><span class="n">comment_start</span><span class="p">]</span>
</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span> <span class="p">:</span> <span class="o">-</span><span class="n">comment_end_size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
-</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_end_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span><span class="p">:])</span>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a>
-</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
-</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
-</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="k">if</span> <span class="n">comment_start_line</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span><span class="p">:</span>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
-</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a>
-</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a>
-</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="k">def</span> <span class="nf">_scan_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span><span class="p">:</span>
-</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="k">if</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;B&quot;</span><span class="p">:</span>
-</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="k">elif</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;X&quot;</span><span class="p">:</span>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
+</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_start_size</span><span class="p">)</span>
+</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a>
+</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="n">comment_end_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_end</span><span class="p">)</span>
+</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">comment_end_size</span><span class="p">)</span> <span class="o">!=</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span> <span class="p">:</span> <span class="o">-</span><span class="n">comment_end_size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_end_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
+</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span><span class="p">:])</span>
+</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a>
+</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
+</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="k">if</span> <span class="n">comment_start_line</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span><span class="p">:</span>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
+</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
+</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a>
+</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a>
-</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a>
-</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
-</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;.&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">decimal</span><span class="p">:</span>
-</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
-</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</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 class="ow">and</span> <span class="n">scientific</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;E&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scientific</span><span class="p">:</span>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isidentifier</span><span class="p">():</span>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="n">number_text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a>
-</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
-</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="n">literal</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a>
-</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_LITERALS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">literal</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
-</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a>
-</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
-</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span> <span class="s2">&quot;::&quot;</span><span class="p">)</span>
-</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span>
-</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span>
-</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a>
-</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">literal</span><span class="p">))</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
-</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a>
-</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="k">def</span> <span class="nf">_scan_bits</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
-</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
-</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
-</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a>
-</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a> <span class="k">def</span> <span class="nf">_scan_hex</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
-</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
-</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
-</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
-</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
-</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="k">def</span> <span class="nf">_extract_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
-</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="k">break</span>
+</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="k">def</span> <span class="nf">_scan_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span><span class="p">:</span>
+</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="k">if</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;B&quot;</span><span class="p">:</span>
+</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="k">elif</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;X&quot;</span><span class="p">:</span>
+</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a>
+</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a>
+</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
+</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;.&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">decimal</span><span class="p">:</span>
+</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
+</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</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 class="ow">and</span> <span class="n">scientific</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;E&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scientific</span><span class="p">:</span>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isidentifier</span><span class="p">():</span>
+</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a> <span class="n">number_text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a>
+</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
+</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="n">literal</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a>
+</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_LITERALS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">literal</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a>
+</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
+</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span> <span class="s2">&quot;::&quot;</span><span class="p">)</span>
+</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span>
+</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span>
+</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a>
+</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">literal</span><span class="p">))</span>
+</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
+</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a>
+</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="k">def</span> <span class="nf">_scan_bits</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
+</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
+</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
+</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="k">def</span> <span class="nf">_scan_hex</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
+</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
+</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
+</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
+</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a>
-</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
-</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a>
-</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a>
-</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
-</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
-</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a>
-</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
-</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
-</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
-</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">:</span>
-</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="n">end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
-</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a> <span class="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a>
-</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
-</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
-</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a>
-</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="k">if</span> <span class="n">base</span><span class="p">:</span>
-</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
-</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
-</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
-</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="sa">f</span><span class="s2">&quot;Numeric string contains invalid characters from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="p">)</span>
-</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a>
-</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="k">def</span> <span class="nf">_extract_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
+</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="k">break</span>
+</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a>
+</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a>
+</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
+</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
+</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a>
+</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
+</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
+</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
+</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">:</span>
+</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">HEREDOC_TAG_IS_IDENTIFIER</span>
+</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isidentifier</span><span class="p">()</span>
+</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">end</span>
+</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="p">):</span>
+</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEREDOC_STRING_ALTERNATIVE</span> <span class="o">!=</span> <span class="n">token_type</span><span class="o">.</span><span class="n">VAR</span><span class="p">:</span>
+</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">HEREDOC_STRING_ALTERNATIVE</span><span class="p">)</span>
+</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_var</span><span class="p">()</span>
+</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a>
+</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a>
-</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a> <span class="k">def</span> <span class="nf">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">identifier_end</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
-</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a>
-</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="k">def</span> <span class="nf">_scan_var</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_SINGLE_TOKENS</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">):</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="k">break</span>
-</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a>
-</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
-</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
-</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
-</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="p">)</span>
-</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a>
-</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="k">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="n">delim_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">delimiter</span><span class="p">)</span>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
-</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a>
-</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="n">escapes</span>
-</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">)</span>
-</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
-</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="p">):</span>
-</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
-</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a>
-</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">delim_size</span><span class="p">)</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
-</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a> <span class="k">if</span> <span class="n">delim_size</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">delim_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="k">break</span>
-</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a>
-</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
-</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a>
-</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span>
-</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ESCAPES</span>
-</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="p">):</span>
-</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="n">escaped_sequence</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
-</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a> <span class="k">if</span> <span class="n">escaped_sequence</span><span class="p">:</span>
-</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">escaped_sequence</span>
-</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="k">continue</span>
-</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a>
-</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="n">text</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">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a>
-</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="n">end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
+</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a>
+</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
+</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a>
+</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="k">if</span> <span class="n">base</span><span class="p">:</span>
+</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
+</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
+</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
+</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="sa">f</span><span class="s2">&quot;Numeric string contains invalid characters from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="p">)</span>
+</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a>
+</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a>
+</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="k">def</span> <span class="nf">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">identifier_end</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
+</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a>
+</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="k">def</span> <span class="nf">_scan_var</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_SINGLE_TOKENS</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">):</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="k">break</span>
+</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a>
+</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
+</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
+</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
+</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="p">)</span>
+</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a>
+</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="k">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a> <span class="n">delim_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">delimiter</span><span class="p">)</span>
+</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
+</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a>
+</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="n">escapes</span>
+</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">)</span>
+</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
+</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="p">):</span>
+</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
+</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a>
+</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">delim_size</span><span class="p">)</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
+</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="k">if</span> <span class="n">delim_size</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">delim_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a> <span class="k">break</span>
</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a>
-</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="k">def</span> <span class="nf">tokenize_rs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="k">raise</span> <span class="n">SqlglotError</span><span class="p">(</span><span class="s2">&quot;Rust tokenizer is not available&quot;</span><span class="p">)</span>
-</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a>
-</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span><span class="p">)</span>
-</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">:</span>
-</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">_ALL_TOKEN_TYPES</span><span class="p">[</span><span class="n">token</span><span class="o">.</span><span class="n">token_type_index</span><span class="p">]</span>
-</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="k">return</span> <span class="n">tokens</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a>
+</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span>
+</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ESCAPES</span>
+</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="p">):</span>
+</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="n">escaped_sequence</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="k">if</span> <span class="n">escaped_sequence</span><span class="p">:</span>
+</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">escaped_sequence</span>
+</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a> <span class="k">continue</span>
+</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a>
+</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a> <span class="n">text</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">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a>
+</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a>
+</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a> <span class="k">def</span> <span class="nf">tokenize_rs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="k">raise</span> <span class="n">SqlglotError</span><span class="p">(</span><span class="s2">&quot;Rust tokenizer is not available&quot;</span><span class="p">)</span>
+</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a>
+</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span><span class="p">)</span>
+</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">:</span>
+</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">_ALL_TOKEN_TYPES</span><span class="p">[</span><span class="n">token</span><span class="o">.</span><span class="n">token_type_index</span><span class="p">]</span>
+</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <span class="k">return</span> <span class="n">tokens</span>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
</span></pre></div>
@@ -7234,826 +7260,844 @@
</div>
<a class="headerlink" href="#Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer-529"><a href="#Tokenizer-529"><span class="linenos"> 529</span></a><span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Tokenizer</span><span class="p">):</span>
-</span><span id="Tokenizer-530"><a href="#Tokenizer-530"><span class="linenos"> 530</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tokenizer-531"><a href="#Tokenizer-531"><span class="linenos"> 531</span></a> <span class="s2">&quot;(&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span>
-</span><span id="Tokenizer-532"><a href="#Tokenizer-532"><span class="linenos"> 532</span></a> <span class="s2">&quot;)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span>
-</span><span id="Tokenizer-533"><a href="#Tokenizer-533"><span class="linenos"> 533</span></a> <span class="s2">&quot;[&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span>
-</span><span id="Tokenizer-534"><a href="#Tokenizer-534"><span class="linenos"> 534</span></a> <span class="s2">&quot;]&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span>
-</span><span id="Tokenizer-535"><a href="#Tokenizer-535"><span class="linenos"> 535</span></a> <span class="s2">&quot;{&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span>
-</span><span id="Tokenizer-536"><a href="#Tokenizer-536"><span class="linenos"> 536</span></a> <span class="s2">&quot;}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">,</span>
-</span><span id="Tokenizer-537"><a href="#Tokenizer-537"><span class="linenos"> 537</span></a> <span class="s2">&quot;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">,</span>
-</span><span id="Tokenizer-538"><a href="#Tokenizer-538"><span class="linenos"> 538</span></a> <span class="s2">&quot;^&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">,</span>
-</span><span id="Tokenizer-539"><a href="#Tokenizer-539"><span class="linenos"> 539</span></a> <span class="s2">&quot;:&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">,</span>
-</span><span id="Tokenizer-540"><a href="#Tokenizer-540"><span class="linenos"> 540</span></a> <span class="s2">&quot;,&quot;</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="Tokenizer-541"><a href="#Tokenizer-541"><span class="linenos"> 541</span></a> <span class="s2">&quot;.&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span>
-</span><span id="Tokenizer-542"><a href="#Tokenizer-542"><span class="linenos"> 542</span></a> <span class="s2">&quot;-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">,</span>
-</span><span id="Tokenizer-543"><a href="#Tokenizer-543"><span class="linenos"> 543</span></a> <span class="s2">&quot;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
-</span><span id="Tokenizer-544"><a href="#Tokenizer-544"><span class="linenos"> 544</span></a> <span class="s2">&quot;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
-</span><span id="Tokenizer-545"><a href="#Tokenizer-545"><span class="linenos"> 545</span></a> <span class="s2">&quot;&lt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
-</span><span id="Tokenizer-546"><a href="#Tokenizer-546"><span class="linenos"> 546</span></a> <span class="s2">&quot;%&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">,</span>
-</span><span id="Tokenizer-547"><a href="#Tokenizer-547"><span class="linenos"> 547</span></a> <span class="s2">&quot;!&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
-</span><span id="Tokenizer-548"><a href="#Tokenizer-548"><span class="linenos"> 548</span></a> <span class="s2">&quot;|&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
-</span><span id="Tokenizer-549"><a href="#Tokenizer-549"><span class="linenos"> 549</span></a> <span class="s2">&quot;+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">,</span>
-</span><span id="Tokenizer-550"><a href="#Tokenizer-550"><span class="linenos"> 550</span></a> <span class="s2">&quot;;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span>
-</span><span id="Tokenizer-551"><a href="#Tokenizer-551"><span class="linenos"> 551</span></a> <span class="s2">&quot;/&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">,</span>
-</span><span id="Tokenizer-552"><a href="#Tokenizer-552"><span class="linenos"> 552</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BACKSLASH</span><span class="p">,</span>
-</span><span id="Tokenizer-553"><a href="#Tokenizer-553"><span class="linenos"> 553</span></a> <span class="s2">&quot;*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span>
-</span><span id="Tokenizer-554"><a href="#Tokenizer-554"><span class="linenos"> 554</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</span><span class="p">,</span>
-</span><span id="Tokenizer-555"><a href="#Tokenizer-555"><span class="linenos"> 555</span></a> <span class="s2">&quot;?&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">,</span>
-</span><span id="Tokenizer-556"><a href="#Tokenizer-556"><span class="linenos"> 556</span></a> <span class="s2">&quot;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
-</span><span id="Tokenizer-557"><a href="#Tokenizer-557"><span class="linenos"> 557</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
-</span><span id="Tokenizer-558"><a href="#Tokenizer-558"><span class="linenos"> 558</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
-</span><span id="Tokenizer-559"><a href="#Tokenizer-559"><span class="linenos"> 559</span></a> <span class="s2">&quot;&#39;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
-</span><span id="Tokenizer-560"><a href="#Tokenizer-560"><span class="linenos"> 560</span></a> <span class="s2">&quot;`&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
-</span><span id="Tokenizer-561"><a href="#Tokenizer-561"><span class="linenos"> 561</span></a> <span class="s1">&#39;&quot;&#39;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
-</span><span id="Tokenizer-562"><a href="#Tokenizer-562"><span class="linenos"> 562</span></a> <span class="s2">&quot;#&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">,</span>
-</span><span id="Tokenizer-563"><a href="#Tokenizer-563"><span class="linenos"> 563</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-564"><a href="#Tokenizer-564"><span class="linenos"> 564</span></a>
-</span><span id="Tokenizer-565"><a href="#Tokenizer-565"><span class="linenos"> 565</span></a> <span class="n">BIT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-566"><a href="#Tokenizer-566"><span class="linenos"> 566</span></a> <span class="n">BYTE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-567"><a href="#Tokenizer-567"><span class="linenos"> 567</span></a> <span class="n">HEX_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-568"><a href="#Tokenizer-568"><span class="linenos"> 568</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-569"><a href="#Tokenizer-569"><span class="linenos"> 569</span></a> <span class="n">HEREDOC_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-570"><a href="#Tokenizer-570"><span class="linenos"> 570</span></a> <span class="n">UNICODE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-571"><a href="#Tokenizer-571"><span class="linenos"> 571</span></a> <span class="n">IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="Tokenizer-572"><a href="#Tokenizer-572"><span class="linenos"> 572</span></a> <span class="n">IDENTIFIER_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="Tokenizer-573"><a href="#Tokenizer-573"><span class="linenos"> 573</span></a> <span class="n">QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="Tokenizer-574"><a href="#Tokenizer-574"><span class="linenos"> 574</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-</span><span id="Tokenizer-575"><a href="#Tokenizer-575"><span class="linenos"> 575</span></a> <span class="n">VAR_SINGLE_TOKENS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Tokenizer-576"><a href="#Tokenizer-576"><span class="linenos"> 576</span></a>
-</span><span id="Tokenizer-577"><a href="#Tokenizer-577"><span class="linenos"> 577</span></a> <span class="c1"># Autofilled</span>
-</span><span id="Tokenizer-578"><a href="#Tokenizer-578"><span class="linenos"> 578</span></a> <span class="n">_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-579"><a href="#Tokenizer-579"><span class="linenos"> 579</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-580"><a href="#Tokenizer-580"><span class="linenos"> 580</span></a> <span class="n">_IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-581"><a href="#Tokenizer-581"><span class="linenos"> 581</span></a> <span class="n">_IDENTIFIER_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Tokenizer-582"><a href="#Tokenizer-582"><span class="linenos"> 582</span></a> <span class="n">_QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-583"><a href="#Tokenizer-583"><span class="linenos"> 583</span></a> <span class="n">_STRING_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
-</span><span id="Tokenizer-584"><a href="#Tokenizer-584"><span class="linenos"> 584</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-585"><a href="#Tokenizer-585"><span class="linenos"> 585</span></a> <span class="n">_RS_TOKENIZER</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-586"><a href="#Tokenizer-586"><span class="linenos"> 586</span></a>
-</span><span id="Tokenizer-587"><a href="#Tokenizer-587"><span class="linenos"> 587</span></a> <span class="n">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tokenizer-588"><a href="#Tokenizer-588"><span class="linenos"> 588</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="s2">%</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="Tokenizer-589"><a href="#Tokenizer-589"><span class="linenos"> 589</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2">%</span><span class="se">}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
-</span><span id="Tokenizer-590"><a href="#Tokenizer-590"><span class="linenos"> 590</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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="Tokenizer-591"><a href="#Tokenizer-591"><span class="linenos"> 591</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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="Tokenizer-592"><a href="#Tokenizer-592"><span class="linenos"> 592</span></a> <span class="s2">&quot;/*+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">,</span>
-</span><span id="Tokenizer-593"><a href="#Tokenizer-593"><span class="linenos"> 593</span></a> <span class="s2">&quot;==&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
-</span><span id="Tokenizer-594"><a href="#Tokenizer-594"><span class="linenos"> 594</span></a> <span class="s2">&quot;::&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span>
-</span><span id="Tokenizer-595"><a href="#Tokenizer-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;||&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">,</span>
-</span><span id="Tokenizer-596"><a href="#Tokenizer-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;&gt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
-</span><span id="Tokenizer-597"><a href="#Tokenizer-597"><span class="linenos"> 597</span></a> <span class="s2">&quot;&lt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
-</span><span id="Tokenizer-598"><a href="#Tokenizer-598"><span class="linenos"> 598</span></a> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="Tokenizer-599"><a href="#Tokenizer-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;!=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="Tokenizer-600"><a href="#Tokenizer-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;:=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON_EQ</span><span class="p">,</span>
-</span><span id="Tokenizer-601"><a href="#Tokenizer-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;&lt;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">,</span>
-</span><span id="Tokenizer-602"><a href="#Tokenizer-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">,</span>
-</span><span id="Tokenizer-603"><a href="#Tokenizer-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;-&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">,</span>
-</span><span id="Tokenizer-604"><a href="#Tokenizer-604"><span class="linenos"> 604</span></a> <span class="s2">&quot;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">,</span>
-</span><span id="Tokenizer-605"><a href="#Tokenizer-605"><span class="linenos"> 605</span></a> <span class="s2">&quot;#&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">,</span>
-</span><span id="Tokenizer-606"><a href="#Tokenizer-606"><span class="linenos"> 606</span></a> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">,</span>
-</span><span id="Tokenizer-607"><a href="#Tokenizer-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">,</span>
-</span><span id="Tokenizer-608"><a href="#Tokenizer-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">,</span>
-</span><span id="Tokenizer-609"><a href="#Tokenizer-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
-</span><span id="Tokenizer-610"><a href="#Tokenizer-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;ALL&quot;</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="Tokenizer-611"><a href="#Tokenizer-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;ALWAYS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALWAYS</span><span class="p">,</span>
-</span><span id="Tokenizer-612"><a href="#Tokenizer-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;AND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">,</span>
-</span><span id="Tokenizer-613"><a href="#Tokenizer-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;ANTI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="Tokenizer-614"><a href="#Tokenizer-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
-</span><span id="Tokenizer-615"><a href="#Tokenizer-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;ASC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
-</span><span id="Tokenizer-616"><a href="#Tokenizer-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;AS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span>
-</span><span id="Tokenizer-617"><a href="#Tokenizer-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
-</span><span id="Tokenizer-618"><a href="#Tokenizer-618"><span class="linenos"> 618</span></a> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
-</span><span id="Tokenizer-619"><a href="#Tokenizer-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
-</span><span id="Tokenizer-620"><a href="#Tokenizer-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;BEGIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Tokenizer-621"><a href="#Tokenizer-621"><span class="linenos"> 621</span></a> <span class="s2">&quot;BETWEEN&quot;</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="Tokenizer-622"><a href="#Tokenizer-622"><span class="linenos"> 622</span></a> <span class="s2">&quot;CACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
-</span><span id="Tokenizer-623"><a href="#Tokenizer-623"><span class="linenos"> 623</span></a> <span class="s2">&quot;UNCACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</span><span class="p">,</span>
-</span><span id="Tokenizer-624"><a href="#Tokenizer-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
-</span><span id="Tokenizer-625"><a href="#Tokenizer-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">,</span>
-</span><span id="Tokenizer-626"><a href="#Tokenizer-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-627"><a href="#Tokenizer-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
-</span><span id="Tokenizer-628"><a href="#Tokenizer-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;COLUMN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
-</span><span id="Tokenizer-629"><a href="#Tokenizer-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;COMMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">,</span>
-</span><span id="Tokenizer-630"><a href="#Tokenizer-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;CONNECT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-631"><a href="#Tokenizer-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
-</span><span id="Tokenizer-632"><a href="#Tokenizer-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;CREATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span>
-</span><span id="Tokenizer-633"><a href="#Tokenizer-633"><span class="linenos"> 633</span></a> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
-</span><span id="Tokenizer-634"><a href="#Tokenizer-634"><span class="linenos"> 634</span></a> <span class="s2">&quot;CUBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span>
-</span><span id="Tokenizer-635"><a href="#Tokenizer-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
-</span><span id="Tokenizer-636"><a href="#Tokenizer-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
-</span><span id="Tokenizer-637"><a href="#Tokenizer-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
-</span><span id="Tokenizer-638"><a href="#Tokenizer-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;CURRENT_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="Tokenizer-639"><a href="#Tokenizer-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
-</span><span id="Tokenizer-640"><a href="#Tokenizer-640"><span class="linenos"> 640</span></a> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span>
-</span><span id="Tokenizer-641"><a href="#Tokenizer-641"><span class="linenos"> 641</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span>
-</span><span id="Tokenizer-642"><a href="#Tokenizer-642"><span class="linenos"> 642</span></a> <span class="s2">&quot;DESC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">,</span>
-</span><span id="Tokenizer-643"><a href="#Tokenizer-643"><span class="linenos"> 643</span></a> <span class="s2">&quot;DESCRIBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">,</span>
-</span><span id="Tokenizer-644"><a href="#Tokenizer-644"><span class="linenos"> 644</span></a> <span class="s2">&quot;DISTINCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">,</span>
-</span><span id="Tokenizer-645"><a href="#Tokenizer-645"><span class="linenos"> 645</span></a> <span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-646"><a href="#Tokenizer-646"><span class="linenos"> 646</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">,</span>
-</span><span id="Tokenizer-647"><a href="#Tokenizer-647"><span class="linenos"> 647</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span>
-</span><span id="Tokenizer-648"><a href="#Tokenizer-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;ELSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">,</span>
-</span><span id="Tokenizer-649"><a href="#Tokenizer-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;END&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">,</span>
-</span><span id="Tokenizer-650"><a href="#Tokenizer-650"><span class="linenos"> 650</span></a> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">,</span>
-</span><span id="Tokenizer-651"><a href="#Tokenizer-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="Tokenizer-652"><a href="#Tokenizer-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;EXECUTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
-</span><span id="Tokenizer-653"><a href="#Tokenizer-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;EXISTS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">,</span>
-</span><span id="Tokenizer-654"><a href="#Tokenizer-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;FALSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">,</span>
-</span><span id="Tokenizer-655"><a href="#Tokenizer-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;FETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
-</span><span id="Tokenizer-656"><a href="#Tokenizer-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;FILTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
-</span><span id="Tokenizer-657"><a href="#Tokenizer-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
-</span><span id="Tokenizer-658"><a href="#Tokenizer-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
-</span><span id="Tokenizer-659"><a href="#Tokenizer-659"><span class="linenos"> 659</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
-</span><span id="Tokenizer-660"><a href="#Tokenizer-660"><span class="linenos"> 660</span></a> <span class="s2">&quot;FOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">,</span>
-</span><span id="Tokenizer-661"><a href="#Tokenizer-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
-</span><span id="Tokenizer-662"><a href="#Tokenizer-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="Tokenizer-663"><a href="#Tokenizer-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span>
-</span><span id="Tokenizer-664"><a href="#Tokenizer-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;GEOGRAPHY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
-</span><span id="Tokenizer-665"><a href="#Tokenizer-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
-</span><span id="Tokenizer-666"><a href="#Tokenizer-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;GLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
-</span><span id="Tokenizer-667"><a href="#Tokenizer-667"><span class="linenos"> 667</span></a> <span class="s2">&quot;GROUP BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-668"><a href="#Tokenizer-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;GROUPING SETS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">,</span>
-</span><span id="Tokenizer-669"><a href="#Tokenizer-669"><span class="linenos"> 669</span></a> <span class="s2">&quot;HAVING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">,</span>
-</span><span id="Tokenizer-670"><a href="#Tokenizer-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;ILIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="Tokenizer-671"><a href="#Tokenizer-671"><span class="linenos"> 671</span></a> <span class="s2">&quot;IN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span>
-</span><span id="Tokenizer-672"><a href="#Tokenizer-672"><span class="linenos"> 672</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
-</span><span id="Tokenizer-673"><a href="#Tokenizer-673"><span class="linenos"> 673</span></a> <span class="s2">&quot;INET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
-</span><span id="Tokenizer-674"><a href="#Tokenizer-674"><span class="linenos"> 674</span></a> <span class="s2">&quot;INNER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
-</span><span id="Tokenizer-675"><a href="#Tokenizer-675"><span class="linenos"> 675</span></a> <span class="s2">&quot;INSERT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">,</span>
-</span><span id="Tokenizer-676"><a href="#Tokenizer-676"><span class="linenos"> 676</span></a> <span class="s2">&quot;INTERVAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
-</span><span id="Tokenizer-677"><a href="#Tokenizer-677"><span class="linenos"> 677</span></a> <span class="s2">&quot;INTERSECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
-</span><span id="Tokenizer-678"><a href="#Tokenizer-678"><span class="linenos"> 678</span></a> <span class="s2">&quot;INTO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">,</span>
-</span><span id="Tokenizer-679"><a href="#Tokenizer-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;IS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
-</span><span id="Tokenizer-680"><a href="#Tokenizer-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
-</span><span id="Tokenizer-681"><a href="#Tokenizer-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">,</span>
-</span><span id="Tokenizer-682"><a href="#Tokenizer-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;KEEP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
-</span><span id="Tokenizer-683"><a href="#Tokenizer-683"><span class="linenos"> 683</span></a> <span class="s2">&quot;KILL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">,</span>
-</span><span id="Tokenizer-684"><a href="#Tokenizer-684"><span class="linenos"> 684</span></a> <span class="s2">&quot;LATERAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">,</span>
-</span><span id="Tokenizer-685"><a href="#Tokenizer-685"><span class="linenos"> 685</span></a> <span class="s2">&quot;LEFT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="Tokenizer-686"><a href="#Tokenizer-686"><span class="linenos"> 686</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="Tokenizer-687"><a href="#Tokenizer-687"><span class="linenos"> 687</span></a> <span class="s2">&quot;LIMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span>
-</span><span id="Tokenizer-688"><a href="#Tokenizer-688"><span class="linenos"> 688</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
-</span><span id="Tokenizer-689"><a href="#Tokenizer-689"><span class="linenos"> 689</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
-</span><span id="Tokenizer-690"><a href="#Tokenizer-690"><span class="linenos"> 690</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
-</span><span id="Tokenizer-691"><a href="#Tokenizer-691"><span class="linenos"> 691</span></a> <span class="s2">&quot;NATURAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="Tokenizer-692"><a href="#Tokenizer-692"><span class="linenos"> 692</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
-</span><span id="Tokenizer-693"><a href="#Tokenizer-693"><span class="linenos"> 693</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
-</span><span id="Tokenizer-694"><a href="#Tokenizer-694"><span class="linenos"> 694</span></a> <span class="s2">&quot;NOTNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">,</span>
-</span><span id="Tokenizer-695"><a href="#Tokenizer-695"><span class="linenos"> 695</span></a> <span class="s2">&quot;NULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span>
-</span><span id="Tokenizer-696"><a href="#Tokenizer-696"><span class="linenos"> 696</span></a> <span class="s2">&quot;OBJECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
-</span><span id="Tokenizer-697"><a href="#Tokenizer-697"><span class="linenos"> 697</span></a> <span class="s2">&quot;OFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
-</span><span id="Tokenizer-698"><a href="#Tokenizer-698"><span class="linenos"> 698</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span>
-</span><span id="Tokenizer-699"><a href="#Tokenizer-699"><span class="linenos"> 699</span></a> <span class="s2">&quot;OR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span>
-</span><span id="Tokenizer-700"><a href="#Tokenizer-700"><span class="linenos"> 700</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
-</span><span id="Tokenizer-701"><a href="#Tokenizer-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;ORDER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-702"><a href="#Tokenizer-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
-</span><span id="Tokenizer-703"><a href="#Tokenizer-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;OUTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
-</span><span id="Tokenizer-704"><a href="#Tokenizer-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;OVER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">,</span>
-</span><span id="Tokenizer-705"><a href="#Tokenizer-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">,</span>
-</span><span id="Tokenizer-706"><a href="#Tokenizer-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;OVERWRITE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
-</span><span id="Tokenizer-707"><a href="#Tokenizer-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;PARTITION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
-</span><span id="Tokenizer-708"><a href="#Tokenizer-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;PARTITION BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-709"><a href="#Tokenizer-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;PARTITIONED BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-710"><a href="#Tokenizer-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-711"><a href="#Tokenizer-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;PERCENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
-</span><span id="Tokenizer-712"><a href="#Tokenizer-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;PIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
-</span><span id="Tokenizer-713"><a href="#Tokenizer-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;PRAGMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
-</span><span id="Tokenizer-714"><a href="#Tokenizer-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
-</span><span id="Tokenizer-715"><a href="#Tokenizer-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;PROCEDURE&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="Tokenizer-716"><a href="#Tokenizer-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;QUALIFY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">,</span>
-</span><span id="Tokenizer-717"><a href="#Tokenizer-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-718"><a href="#Tokenizer-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;RECURSIVE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">,</span>
-</span><span id="Tokenizer-719"><a href="#Tokenizer-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;REGEXP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="Tokenizer-720"><a href="#Tokenizer-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;REPLACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
-</span><span id="Tokenizer-721"><a href="#Tokenizer-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
-</span><span id="Tokenizer-722"><a href="#Tokenizer-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;REFERENCES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
-</span><span id="Tokenizer-723"><a href="#Tokenizer-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="Tokenizer-724"><a href="#Tokenizer-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;RLIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
-</span><span id="Tokenizer-725"><a href="#Tokenizer-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span><span class="p">,</span>
-</span><span id="Tokenizer-726"><a href="#Tokenizer-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;ROLLUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">,</span>
-</span><span id="Tokenizer-727"><a href="#Tokenizer-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
-</span><span id="Tokenizer-728"><a href="#Tokenizer-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;ROWS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
-</span><span id="Tokenizer-729"><a href="#Tokenizer-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
-</span><span id="Tokenizer-730"><a href="#Tokenizer-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;SELECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
-</span><span id="Tokenizer-731"><a href="#Tokenizer-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;SEMI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="Tokenizer-732"><a href="#Tokenizer-732"><span class="linenos"> 732</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="Tokenizer-733"><a href="#Tokenizer-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
-</span><span id="Tokenizer-734"><a href="#Tokenizer-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;SHOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="Tokenizer-735"><a href="#Tokenizer-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</span><span class="p">,</span>
-</span><span id="Tokenizer-736"><a href="#Tokenizer-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;SOME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">,</span>
-</span><span id="Tokenizer-737"><a href="#Tokenizer-737"><span class="linenos"> 737</span></a> <span class="s2">&quot;SORT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">,</span>
-</span><span id="Tokenizer-738"><a href="#Tokenizer-738"><span class="linenos"> 738</span></a> <span class="s2">&quot;START WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">,</span>
-</span><span id="Tokenizer-739"><a href="#Tokenizer-739"><span class="linenos"> 739</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="Tokenizer-740"><a href="#Tokenizer-740"><span class="linenos"> 740</span></a> <span class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
-</span><span id="Tokenizer-741"><a href="#Tokenizer-741"><span class="linenos"> 741</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Tokenizer-742"><a href="#Tokenizer-742"><span class="linenos"> 742</span></a> <span class="s2">&quot;TEMPORARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Tokenizer-743"><a href="#Tokenizer-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;THEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">,</span>
-</span><span id="Tokenizer-744"><a href="#Tokenizer-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;TRUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
-</span><span id="Tokenizer-745"><a href="#Tokenizer-745"><span class="linenos"> 745</span></a> <span class="s2">&quot;UNION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
-</span><span id="Tokenizer-746"><a href="#Tokenizer-746"><span class="linenos"> 746</span></a> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
-</span><span id="Tokenizer-747"><a href="#Tokenizer-747"><span class="linenos"> 747</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
-</span><span id="Tokenizer-748"><a href="#Tokenizer-748"><span class="linenos"> 748</span></a> <span class="s2">&quot;UNPIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
-</span><span id="Tokenizer-749"><a href="#Tokenizer-749"><span class="linenos"> 749</span></a> <span class="s2">&quot;UPDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
-</span><span id="Tokenizer-750"><a href="#Tokenizer-750"><span class="linenos"> 750</span></a> <span class="s2">&quot;USE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">,</span>
-</span><span id="Tokenizer-751"><a href="#Tokenizer-751"><span class="linenos"> 751</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">,</span>
-</span><span id="Tokenizer-752"><a href="#Tokenizer-752"><span class="linenos"> 752</span></a> <span class="s2">&quot;UUID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
-</span><span id="Tokenizer-753"><a href="#Tokenizer-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="Tokenizer-754"><a href="#Tokenizer-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
-</span><span id="Tokenizer-755"><a href="#Tokenizer-755"><span class="linenos"> 755</span></a> <span class="s2">&quot;VOLATILE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
-</span><span id="Tokenizer-756"><a href="#Tokenizer-756"><span class="linenos"> 756</span></a> <span class="s2">&quot;WHEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">,</span>
-</span><span id="Tokenizer-757"><a href="#Tokenizer-757"><span class="linenos"> 757</span></a> <span class="s2">&quot;WHERE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">,</span>
-</span><span id="Tokenizer-758"><a href="#Tokenizer-758"><span class="linenos"> 758</span></a> <span class="s2">&quot;WINDOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="Tokenizer-759"><a href="#Tokenizer-759"><span class="linenos"> 759</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span>
-</span><span id="Tokenizer-760"><a href="#Tokenizer-760"><span class="linenos"> 760</span></a> <span class="s2">&quot;APPLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
-</span><span id="Tokenizer-761"><a href="#Tokenizer-761"><span class="linenos"> 761</span></a> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
-</span><span id="Tokenizer-762"><a href="#Tokenizer-762"><span class="linenos"> 762</span></a> <span class="s2">&quot;BIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
-</span><span id="Tokenizer-763"><a href="#Tokenizer-763"><span class="linenos"> 763</span></a> <span class="s2">&quot;BOOL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
-</span><span id="Tokenizer-764"><a href="#Tokenizer-764"><span class="linenos"> 764</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
-</span><span id="Tokenizer-765"><a href="#Tokenizer-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;BYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="Tokenizer-766"><a href="#Tokenizer-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;MEDIUMINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
-</span><span id="Tokenizer-767"><a href="#Tokenizer-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;INT1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="Tokenizer-768"><a href="#Tokenizer-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;TINYINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="Tokenizer-769"><a href="#Tokenizer-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="Tokenizer-770"><a href="#Tokenizer-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;SHORT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="Tokenizer-771"><a href="#Tokenizer-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="Tokenizer-772"><a href="#Tokenizer-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="Tokenizer-773"><a href="#Tokenizer-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;HUGEINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
-</span><span id="Tokenizer-774"><a href="#Tokenizer-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;INT2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="Tokenizer-775"><a href="#Tokenizer-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;INTEGER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="Tokenizer-776"><a href="#Tokenizer-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="Tokenizer-777"><a href="#Tokenizer-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;INT4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="Tokenizer-778"><a href="#Tokenizer-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="Tokenizer-779"><a href="#Tokenizer-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;INT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="Tokenizer-780"><a href="#Tokenizer-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;LONG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="Tokenizer-781"><a href="#Tokenizer-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;BIGINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="Tokenizer-782"><a href="#Tokenizer-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="Tokenizer-783"><a href="#Tokenizer-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;DEC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="Tokenizer-784"><a href="#Tokenizer-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="Tokenizer-785"><a href="#Tokenizer-785"><span class="linenos"> 785</span></a> <span class="s2">&quot;BIGDECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
-</span><span id="Tokenizer-786"><a href="#Tokenizer-786"><span class="linenos"> 786</span></a> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
-</span><span id="Tokenizer-787"><a href="#Tokenizer-787"><span class="linenos"> 787</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
-</span><span id="Tokenizer-788"><a href="#Tokenizer-788"><span class="linenos"> 788</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
-</span><span id="Tokenizer-789"><a href="#Tokenizer-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;NUMBER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="Tokenizer-790"><a href="#Tokenizer-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="Tokenizer-791"><a href="#Tokenizer-791"><span class="linenos"> 791</span></a> <span class="s2">&quot;FIXED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
-</span><span id="Tokenizer-792"><a href="#Tokenizer-792"><span class="linenos"> 792</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="Tokenizer-793"><a href="#Tokenizer-793"><span class="linenos"> 793</span></a> <span class="s2">&quot;FLOAT&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="Tokenizer-794"><a href="#Tokenizer-794"><span class="linenos"> 794</span></a> <span class="s2">&quot;FLOAT4&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="Tokenizer-795"><a href="#Tokenizer-795"><span class="linenos"> 795</span></a> <span class="s2">&quot;FLOAT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="Tokenizer-796"><a href="#Tokenizer-796"><span class="linenos"> 796</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="Tokenizer-797"><a href="#Tokenizer-797"><span class="linenos"> 797</span></a> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="Tokenizer-798"><a href="#Tokenizer-798"><span class="linenos"> 798</span></a> <span class="s2">&quot;JSON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
-</span><span id="Tokenizer-799"><a href="#Tokenizer-799"><span class="linenos"> 799</span></a> <span class="s2">&quot;CHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-800"><a href="#Tokenizer-800"><span class="linenos"> 800</span></a> <span class="s2">&quot;CHARACTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-801"><a href="#Tokenizer-801"><span class="linenos"> 801</span></a> <span class="s2">&quot;NCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-802"><a href="#Tokenizer-802"><span class="linenos"> 802</span></a> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-803"><a href="#Tokenizer-803"><span class="linenos"> 803</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-804"><a href="#Tokenizer-804"><span class="linenos"> 804</span></a> <span class="s2">&quot;NVARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-805"><a href="#Tokenizer-805"><span class="linenos"> 805</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-806"><a href="#Tokenizer-806"><span class="linenos"> 806</span></a> <span class="s2">&quot;BPCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
-</span><span id="Tokenizer-807"><a href="#Tokenizer-807"><span class="linenos"> 807</span></a> <span class="s2">&quot;STR&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="Tokenizer-808"><a href="#Tokenizer-808"><span class="linenos"> 808</span></a> <span class="s2">&quot;STRING&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="Tokenizer-809"><a href="#Tokenizer-809"><span class="linenos"> 809</span></a> <span class="s2">&quot;TEXT&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="Tokenizer-810"><a href="#Tokenizer-810"><span class="linenos"> 810</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
-</span><span id="Tokenizer-811"><a href="#Tokenizer-811"><span class="linenos"> 811</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
-</span><span id="Tokenizer-812"><a href="#Tokenizer-812"><span class="linenos"> 812</span></a> <span class="s2">&quot;TINYTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">,</span>
-</span><span id="Tokenizer-813"><a href="#Tokenizer-813"><span class="linenos"> 813</span></a> <span class="s2">&quot;CLOB&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="Tokenizer-814"><a href="#Tokenizer-814"><span class="linenos"> 814</span></a> <span class="s2">&quot;LONGVARCHAR&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="Tokenizer-815"><a href="#Tokenizer-815"><span class="linenos"> 815</span></a> <span class="s2">&quot;BINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
-</span><span id="Tokenizer-816"><a href="#Tokenizer-816"><span class="linenos"> 816</span></a> <span class="s2">&quot;BLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Tokenizer-817"><a href="#Tokenizer-817"><span class="linenos"> 817</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
-</span><span id="Tokenizer-818"><a href="#Tokenizer-818"><span class="linenos"> 818</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
-</span><span id="Tokenizer-819"><a href="#Tokenizer-819"><span class="linenos"> 819</span></a> <span class="s2">&quot;TINYBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">,</span>
-</span><span id="Tokenizer-820"><a href="#Tokenizer-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;BYTEA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Tokenizer-821"><a href="#Tokenizer-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
-</span><span id="Tokenizer-822"><a href="#Tokenizer-822"><span class="linenos"> 822</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">TIME</span><span class="p">,</span>
-</span><span id="Tokenizer-823"><a href="#Tokenizer-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
-</span><span id="Tokenizer-824"><a href="#Tokenizer-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;TIMESTAMP&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="Tokenizer-825"><a href="#Tokenizer-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;TIMESTAMPTZ&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="Tokenizer-826"><a href="#Tokenizer-826"><span class="linenos"> 826</span></a> <span class="s2">&quot;TIMESTAMPLTZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="Tokenizer-827"><a href="#Tokenizer-827"><span class="linenos"> 827</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="Tokenizer-828"><a href="#Tokenizer-828"><span class="linenos"> 828</span></a> <span class="s2">&quot;DATETIME&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="Tokenizer-829"><a href="#Tokenizer-829"><span class="linenos"> 829</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-830"><a href="#Tokenizer-830"><span class="linenos"> 830</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-831"><a href="#Tokenizer-831"><span class="linenos"> 831</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-832"><a href="#Tokenizer-832"><span class="linenos"> 832</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-833"><a href="#Tokenizer-833"><span class="linenos"> 833</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-834"><a href="#Tokenizer-834"><span class="linenos"> 834</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-835"><a href="#Tokenizer-835"><span class="linenos"> 835</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-836"><a href="#Tokenizer-836"><span class="linenos"> 836</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-837"><a href="#Tokenizer-837"><span class="linenos"> 837</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-838"><a href="#Tokenizer-838"><span class="linenos"> 838</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-839"><a href="#Tokenizer-839"><span class="linenos"> 839</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-840"><a href="#Tokenizer-840"><span class="linenos"> 840</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
-</span><span id="Tokenizer-841"><a href="#Tokenizer-841"><span class="linenos"> 841</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
-</span><span id="Tokenizer-842"><a href="#Tokenizer-842"><span class="linenos"> 842</span></a> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
-</span><span id="Tokenizer-843"><a href="#Tokenizer-843"><span class="linenos"> 843</span></a> <span class="s2">&quot;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="Tokenizer-844"><a href="#Tokenizer-844"><span class="linenos"> 844</span></a> <span class="s2">&quot;ALTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">,</span>
-</span><span id="Tokenizer-845"><a href="#Tokenizer-845"><span class="linenos"> 845</span></a> <span class="s2">&quot;ANALYZE&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="Tokenizer-846"><a href="#Tokenizer-846"><span class="linenos"> 846</span></a> <span class="s2">&quot;CALL&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="Tokenizer-847"><a href="#Tokenizer-847"><span class="linenos"> 847</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">,</span>
-</span><span id="Tokenizer-848"><a href="#Tokenizer-848"><span class="linenos"> 848</span></a> <span class="s2">&quot;COPY&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="Tokenizer-849"><a href="#Tokenizer-849"><span class="linenos"> 849</span></a> <span class="s2">&quot;EXPLAIN&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="Tokenizer-850"><a href="#Tokenizer-850"><span class="linenos"> 850</span></a> <span class="s2">&quot;GRANT&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="Tokenizer-851"><a href="#Tokenizer-851"><span class="linenos"> 851</span></a> <span class="s2">&quot;OPTIMIZE&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="Tokenizer-852"><a href="#Tokenizer-852"><span class="linenos"> 852</span></a> <span class="s2">&quot;PREPARE&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="Tokenizer-853"><a href="#Tokenizer-853"><span class="linenos"> 853</span></a> <span class="s2">&quot;TRUNCATE&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="Tokenizer-854"><a href="#Tokenizer-854"><span class="linenos"> 854</span></a> <span class="s2">&quot;VACUUM&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="Tokenizer-855"><a href="#Tokenizer-855"><span class="linenos"> 855</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
-</span><span id="Tokenizer-856"><a href="#Tokenizer-856"><span class="linenos"> 856</span></a> <span class="s2">&quot;FOR VERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
-</span><span id="Tokenizer-857"><a href="#Tokenizer-857"><span class="linenos"> 857</span></a> <span class="s2">&quot;FOR TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
-</span><span id="Tokenizer-858"><a href="#Tokenizer-858"><span class="linenos"> 858</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-859"><a href="#Tokenizer-859"><span class="linenos"> 859</span></a>
-</span><span id="Tokenizer-860"><a href="#Tokenizer-860"><span class="linenos"> 860</span></a> <span class="n">WHITE_SPACE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tokenizer-861"><a href="#Tokenizer-861"><span class="linenos"> 861</span></a> <span class="s2">&quot; &quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
-</span><span id="Tokenizer-862"><a href="#Tokenizer-862"><span class="linenos"> 862</span></a> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
-</span><span id="Tokenizer-863"><a href="#Tokenizer-863"><span class="linenos"> 863</span></a> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
-</span><span id="Tokenizer-864"><a href="#Tokenizer-864"><span class="linenos"> 864</span></a> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
-</span><span id="Tokenizer-865"><a href="#Tokenizer-865"><span class="linenos"> 865</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-866"><a href="#Tokenizer-866"><span class="linenos"> 866</span></a>
-</span><span id="Tokenizer-867"><a href="#Tokenizer-867"><span class="linenos"> 867</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tokenizer-868"><a href="#Tokenizer-868"><span class="linenos"> 868</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Tokenizer-869"><a href="#Tokenizer-869"><span class="linenos"> 869</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
-</span><span id="Tokenizer-870"><a href="#Tokenizer-870"><span class="linenos"> 870</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
-</span><span id="Tokenizer-871"><a href="#Tokenizer-871"><span class="linenos"> 871</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="Tokenizer-872"><a href="#Tokenizer-872"><span class="linenos"> 872</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-873"><a href="#Tokenizer-873"><span class="linenos"> 873</span></a>
-</span><span id="Tokenizer-874"><a href="#Tokenizer-874"><span class="linenos"> 874</span></a> <span class="n">COMMAND_PREFIX_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">}</span>
-</span><span id="Tokenizer-875"><a href="#Tokenizer-875"><span class="linenos"> 875</span></a>
-</span><span id="Tokenizer-876"><a href="#Tokenizer-876"><span class="linenos"> 876</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
-</span><span id="Tokenizer-877"><a href="#Tokenizer-877"><span class="linenos"> 877</span></a> <span class="n">NUMERIC_LITERALS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-878"><a href="#Tokenizer-878"><span class="linenos"> 878</span></a>
-</span><span id="Tokenizer-879"><a href="#Tokenizer-879"><span class="linenos"> 879</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</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="Tokenizer-880"><a href="#Tokenizer-880"><span class="linenos"> 880</span></a>
-</span><span id="Tokenizer-881"><a href="#Tokenizer-881"><span class="linenos"> 881</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Tokenizer-882"><a href="#Tokenizer-882"><span class="linenos"> 882</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-883"><a href="#Tokenizer-883"><span class="linenos"> 883</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-884"><a href="#Tokenizer-884"><span class="linenos"> 884</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-885"><a href="#Tokenizer-885"><span class="linenos"> 885</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-886"><a href="#Tokenizer-886"><span class="linenos"> 886</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-887"><a href="#Tokenizer-887"><span class="linenos"> 887</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-888"><a href="#Tokenizer-888"><span class="linenos"> 888</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-889"><a href="#Tokenizer-889"><span class="linenos"> 889</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-890"><a href="#Tokenizer-890"><span class="linenos"> 890</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-891"><a href="#Tokenizer-891"><span class="linenos"> 891</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-892"><a href="#Tokenizer-892"><span class="linenos"> 892</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-893"><a href="#Tokenizer-893"><span class="linenos"> 893</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-894"><a href="#Tokenizer-894"><span class="linenos"> 894</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-895"><a href="#Tokenizer-895"><span class="linenos"> 895</span></a> <span class="s2">&quot;_rs_dialect_settings&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-896"><a href="#Tokenizer-896"><span class="linenos"> 896</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-897"><a href="#Tokenizer-897"><span class="linenos"> 897</span></a>
-</span><span id="Tokenizer-898"><a href="#Tokenizer-898"><span class="linenos"> 898</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-899"><a href="#Tokenizer-899"><span class="linenos"> 899</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
-</span><span id="Tokenizer-900"><a href="#Tokenizer-900"><span class="linenos"> 900</span></a>
-</span><span id="Tokenizer-901"><a href="#Tokenizer-901"><span class="linenos"> 901</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="Tokenizer-902"><a href="#Tokenizer-902"><span class="linenos"> 902</span></a>
-</span><span id="Tokenizer-903"><a href="#Tokenizer-903"><span class="linenos"> 903</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="Tokenizer-904"><a href="#Tokenizer-904"><span class="linenos"> 904</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span> <span class="o">=</span> <span class="n">RsTokenizerDialectSettings</span><span class="p">(</span>
-</span><span id="Tokenizer-905"><a href="#Tokenizer-905"><span class="linenos"> 905</span></a> <span class="n">escape_sequences</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="p">,</span>
-</span><span id="Tokenizer-906"><a href="#Tokenizer-906"><span class="linenos"> 906</span></a> <span class="n">identifiers_can_start_with_digit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">,</span>
-</span><span id="Tokenizer-907"><a href="#Tokenizer-907"><span class="linenos"> 907</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer-531"><a href="#Tokenizer-531"><span class="linenos"> 531</span></a><span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Tokenizer</span><span class="p">):</span>
+</span><span id="Tokenizer-532"><a href="#Tokenizer-532"><span class="linenos"> 532</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-533"><a href="#Tokenizer-533"><span class="linenos"> 533</span></a> <span class="s2">&quot;(&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span>
+</span><span id="Tokenizer-534"><a href="#Tokenizer-534"><span class="linenos"> 534</span></a> <span class="s2">&quot;)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span>
+</span><span id="Tokenizer-535"><a href="#Tokenizer-535"><span class="linenos"> 535</span></a> <span class="s2">&quot;[&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span>
+</span><span id="Tokenizer-536"><a href="#Tokenizer-536"><span class="linenos"> 536</span></a> <span class="s2">&quot;]&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span>
+</span><span id="Tokenizer-537"><a href="#Tokenizer-537"><span class="linenos"> 537</span></a> <span class="s2">&quot;{&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span>
+</span><span id="Tokenizer-538"><a href="#Tokenizer-538"><span class="linenos"> 538</span></a> <span class="s2">&quot;}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">,</span>
+</span><span id="Tokenizer-539"><a href="#Tokenizer-539"><span class="linenos"> 539</span></a> <span class="s2">&quot;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">,</span>
+</span><span id="Tokenizer-540"><a href="#Tokenizer-540"><span class="linenos"> 540</span></a> <span class="s2">&quot;^&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">,</span>
+</span><span id="Tokenizer-541"><a href="#Tokenizer-541"><span class="linenos"> 541</span></a> <span class="s2">&quot;:&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">,</span>
+</span><span id="Tokenizer-542"><a href="#Tokenizer-542"><span class="linenos"> 542</span></a> <span class="s2">&quot;,&quot;</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="Tokenizer-543"><a href="#Tokenizer-543"><span class="linenos"> 543</span></a> <span class="s2">&quot;.&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span>
+</span><span id="Tokenizer-544"><a href="#Tokenizer-544"><span class="linenos"> 544</span></a> <span class="s2">&quot;-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">,</span>
+</span><span id="Tokenizer-545"><a href="#Tokenizer-545"><span class="linenos"> 545</span></a> <span class="s2">&quot;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
+</span><span id="Tokenizer-546"><a href="#Tokenizer-546"><span class="linenos"> 546</span></a> <span class="s2">&quot;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
+</span><span id="Tokenizer-547"><a href="#Tokenizer-547"><span class="linenos"> 547</span></a> <span class="s2">&quot;&lt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
+</span><span id="Tokenizer-548"><a href="#Tokenizer-548"><span class="linenos"> 548</span></a> <span class="s2">&quot;%&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">,</span>
+</span><span id="Tokenizer-549"><a href="#Tokenizer-549"><span class="linenos"> 549</span></a> <span class="s2">&quot;!&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
+</span><span id="Tokenizer-550"><a href="#Tokenizer-550"><span class="linenos"> 550</span></a> <span class="s2">&quot;|&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+</span><span id="Tokenizer-551"><a href="#Tokenizer-551"><span class="linenos"> 551</span></a> <span class="s2">&quot;+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">,</span>
+</span><span id="Tokenizer-552"><a href="#Tokenizer-552"><span class="linenos"> 552</span></a> <span class="s2">&quot;;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span>
+</span><span id="Tokenizer-553"><a href="#Tokenizer-553"><span class="linenos"> 553</span></a> <span class="s2">&quot;/&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">,</span>
+</span><span id="Tokenizer-554"><a href="#Tokenizer-554"><span class="linenos"> 554</span></a> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BACKSLASH</span><span class="p">,</span>
+</span><span id="Tokenizer-555"><a href="#Tokenizer-555"><span class="linenos"> 555</span></a> <span class="s2">&quot;*&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span>
+</span><span id="Tokenizer-556"><a href="#Tokenizer-556"><span class="linenos"> 556</span></a> <span class="s2">&quot;~&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</span><span class="p">,</span>
+</span><span id="Tokenizer-557"><a href="#Tokenizer-557"><span class="linenos"> 557</span></a> <span class="s2">&quot;?&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">,</span>
+</span><span id="Tokenizer-558"><a href="#Tokenizer-558"><span class="linenos"> 558</span></a> <span class="s2">&quot;@&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
+</span><span id="Tokenizer-559"><a href="#Tokenizer-559"><span class="linenos"> 559</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
+</span><span id="Tokenizer-560"><a href="#Tokenizer-560"><span class="linenos"> 560</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
+</span><span id="Tokenizer-561"><a href="#Tokenizer-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;&#39;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
+</span><span id="Tokenizer-562"><a href="#Tokenizer-562"><span class="linenos"> 562</span></a> <span class="s2">&quot;`&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
+</span><span id="Tokenizer-563"><a href="#Tokenizer-563"><span class="linenos"> 563</span></a> <span class="s1">&#39;&quot;&#39;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
+</span><span id="Tokenizer-564"><a href="#Tokenizer-564"><span class="linenos"> 564</span></a> <span class="s2">&quot;#&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH</span><span class="p">,</span>
+</span><span id="Tokenizer-565"><a href="#Tokenizer-565"><span class="linenos"> 565</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-566"><a href="#Tokenizer-566"><span class="linenos"> 566</span></a>
+</span><span id="Tokenizer-567"><a href="#Tokenizer-567"><span class="linenos"> 567</span></a> <span class="n">BIT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-568"><a href="#Tokenizer-568"><span class="linenos"> 568</span></a> <span class="n">BYTE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-569"><a href="#Tokenizer-569"><span class="linenos"> 569</span></a> <span class="n">HEX_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-570"><a href="#Tokenizer-570"><span class="linenos"> 570</span></a> <span class="n">RAW_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-571"><a href="#Tokenizer-571"><span class="linenos"> 571</span></a> <span class="n">HEREDOC_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-572"><a href="#Tokenizer-572"><span class="linenos"> 572</span></a> <span class="n">UNICODE_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-573"><a href="#Tokenizer-573"><span class="linenos"> 573</span></a> <span class="n">IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="Tokenizer-574"><a href="#Tokenizer-574"><span class="linenos"> 574</span></a> <span class="n">IDENTIFIER_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="Tokenizer-575"><a href="#Tokenizer-575"><span class="linenos"> 575</span></a> <span class="n">QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="Tokenizer-576"><a href="#Tokenizer-576"><span class="linenos"> 576</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
+</span><span id="Tokenizer-577"><a href="#Tokenizer-577"><span class="linenos"> 577</span></a> <span class="n">VAR_SINGLE_TOKENS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Tokenizer-578"><a href="#Tokenizer-578"><span class="linenos"> 578</span></a>
+</span><span id="Tokenizer-579"><a href="#Tokenizer-579"><span class="linenos"> 579</span></a> <span class="c1"># Whether or not the heredoc tags follow the same lexical rules as unquoted identifiers</span>
+</span><span id="Tokenizer-580"><a href="#Tokenizer-580"><span class="linenos"> 580</span></a> <span class="n">HEREDOC_TAG_IS_IDENTIFIER</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-581"><a href="#Tokenizer-581"><span class="linenos"> 581</span></a>
+</span><span id="Tokenizer-582"><a href="#Tokenizer-582"><span class="linenos"> 582</span></a> <span class="c1"># Token that we&#39;ll generate as a fallback if the heredoc prefix doesn&#39;t correspond to a heredoc</span>
+</span><span id="Tokenizer-583"><a href="#Tokenizer-583"><span class="linenos"> 583</span></a> <span class="n">HEREDOC_STRING_ALTERNATIVE</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
+</span><span id="Tokenizer-584"><a href="#Tokenizer-584"><span class="linenos"> 584</span></a>
+</span><span id="Tokenizer-585"><a href="#Tokenizer-585"><span class="linenos"> 585</span></a> <span class="c1"># Autofilled</span>
+</span><span id="Tokenizer-586"><a href="#Tokenizer-586"><span class="linenos"> 586</span></a> <span class="n">_COMMENTS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-587"><a href="#Tokenizer-587"><span class="linenos"> 587</span></a> <span class="n">_FORMAT_STRINGS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-588"><a href="#Tokenizer-588"><span class="linenos"> 588</span></a> <span class="n">_IDENTIFIERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-589"><a href="#Tokenizer-589"><span class="linenos"> 589</span></a> <span class="n">_IDENTIFIER_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Tokenizer-590"><a href="#Tokenizer-590"><span class="linenos"> 590</span></a> <span class="n">_QUOTES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-591"><a href="#Tokenizer-591"><span class="linenos"> 591</span></a> <span class="n">_STRING_ESCAPES</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="Tokenizer-592"><a href="#Tokenizer-592"><span class="linenos"> 592</span></a> <span class="n">_KEYWORD_TRIE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-593"><a href="#Tokenizer-593"><span class="linenos"> 593</span></a> <span class="n">_RS_TOKENIZER</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-594"><a href="#Tokenizer-594"><span class="linenos"> 594</span></a>
+</span><span id="Tokenizer-595"><a href="#Tokenizer-595"><span class="linenos"> 595</span></a> <span class="n">KEYWORDS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-596"><a href="#Tokenizer-596"><span class="linenos"> 596</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="s2">%</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="Tokenizer-597"><a href="#Tokenizer-597"><span class="linenos"> 597</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2">%</span><span class="se">}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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 class="s2">&quot;-&quot;</span><span class="p">)},</span>
+</span><span id="Tokenizer-598"><a href="#Tokenizer-598"><span class="linenos"> 598</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{{{</span><span class="si">{</span><span class="n">postfix</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span> <span class="k">for</span> <span class="n">postfix</span> <span class="ow">in</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="Tokenizer-599"><a href="#Tokenizer-599"><span class="linenos"> 599</span></a> <span class="o">**</span><span class="p">{</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="se">}}}}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</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="Tokenizer-600"><a href="#Tokenizer-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;/*+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">,</span>
+</span><span id="Tokenizer-601"><a href="#Tokenizer-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;==&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
+</span><span id="Tokenizer-602"><a href="#Tokenizer-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;::&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span>
+</span><span id="Tokenizer-603"><a href="#Tokenizer-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;||&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">,</span>
+</span><span id="Tokenizer-604"><a href="#Tokenizer-604"><span class="linenos"> 604</span></a> <span class="s2">&quot;&gt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
+</span><span id="Tokenizer-605"><a href="#Tokenizer-605"><span class="linenos"> 605</span></a> <span class="s2">&quot;&lt;=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
+</span><span id="Tokenizer-606"><a href="#Tokenizer-606"><span class="linenos"> 606</span></a> <span class="s2">&quot;&lt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="Tokenizer-607"><a href="#Tokenizer-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;!=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="Tokenizer-608"><a href="#Tokenizer-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;:=&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON_EQ</span><span class="p">,</span>
+</span><span id="Tokenizer-609"><a href="#Tokenizer-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;&lt;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">,</span>
+</span><span id="Tokenizer-610"><a href="#Tokenizer-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">,</span>
+</span><span id="Tokenizer-611"><a href="#Tokenizer-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;-&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">,</span>
+</span><span id="Tokenizer-612"><a href="#Tokenizer-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;=&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">,</span>
+</span><span id="Tokenizer-613"><a href="#Tokenizer-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;#&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">,</span>
+</span><span id="Tokenizer-614"><a href="#Tokenizer-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;#&gt;&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">,</span>
+</span><span id="Tokenizer-615"><a href="#Tokenizer-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;&lt;-&gt;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">,</span>
+</span><span id="Tokenizer-616"><a href="#Tokenizer-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;&amp;&amp;&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">,</span>
+</span><span id="Tokenizer-617"><a href="#Tokenizer-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;??&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">,</span>
+</span><span id="Tokenizer-618"><a href="#Tokenizer-618"><span class="linenos"> 618</span></a> <span class="s2">&quot;ALL&quot;</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="Tokenizer-619"><a href="#Tokenizer-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;ALWAYS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALWAYS</span><span class="p">,</span>
+</span><span id="Tokenizer-620"><a href="#Tokenizer-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;AND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">,</span>
+</span><span id="Tokenizer-621"><a href="#Tokenizer-621"><span class="linenos"> 621</span></a> <span class="s2">&quot;ANTI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="Tokenizer-622"><a href="#Tokenizer-622"><span class="linenos"> 622</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
+</span><span id="Tokenizer-623"><a href="#Tokenizer-623"><span class="linenos"> 623</span></a> <span class="s2">&quot;ASC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
+</span><span id="Tokenizer-624"><a href="#Tokenizer-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;AS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span>
+</span><span id="Tokenizer-625"><a href="#Tokenizer-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;ASOF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
+</span><span id="Tokenizer-626"><a href="#Tokenizer-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
+</span><span id="Tokenizer-627"><a href="#Tokenizer-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
+</span><span id="Tokenizer-628"><a href="#Tokenizer-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;BEGIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="Tokenizer-629"><a href="#Tokenizer-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;BETWEEN&quot;</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="Tokenizer-630"><a href="#Tokenizer-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;CACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
+</span><span id="Tokenizer-631"><a href="#Tokenizer-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;UNCACHE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</span><span class="p">,</span>
+</span><span id="Tokenizer-632"><a href="#Tokenizer-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
+</span><span id="Tokenizer-633"><a href="#Tokenizer-633"><span class="linenos"> 633</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">,</span>
+</span><span id="Tokenizer-634"><a href="#Tokenizer-634"><span class="linenos"> 634</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-635"><a href="#Tokenizer-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
+</span><span id="Tokenizer-636"><a href="#Tokenizer-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;COLUMN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
+</span><span id="Tokenizer-637"><a href="#Tokenizer-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;COMMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">,</span>
+</span><span id="Tokenizer-638"><a href="#Tokenizer-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;CONNECT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-639"><a href="#Tokenizer-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
+</span><span id="Tokenizer-640"><a href="#Tokenizer-640"><span class="linenos"> 640</span></a> <span class="s2">&quot;CREATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span>
+</span><span id="Tokenizer-641"><a href="#Tokenizer-641"><span class="linenos"> 641</span></a> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
+</span><span id="Tokenizer-642"><a href="#Tokenizer-642"><span class="linenos"> 642</span></a> <span class="s2">&quot;CUBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span>
+</span><span id="Tokenizer-643"><a href="#Tokenizer-643"><span class="linenos"> 643</span></a> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
+</span><span id="Tokenizer-644"><a href="#Tokenizer-644"><span class="linenos"> 644</span></a> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
+</span><span id="Tokenizer-645"><a href="#Tokenizer-645"><span class="linenos"> 645</span></a> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
+</span><span id="Tokenizer-646"><a href="#Tokenizer-646"><span class="linenos"> 646</span></a> <span class="s2">&quot;CURRENT_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="Tokenizer-647"><a href="#Tokenizer-647"><span class="linenos"> 647</span></a> <span class="s2">&quot;DATABASE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
+</span><span id="Tokenizer-648"><a href="#Tokenizer-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span>
+</span><span id="Tokenizer-649"><a href="#Tokenizer-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span>
+</span><span id="Tokenizer-650"><a href="#Tokenizer-650"><span class="linenos"> 650</span></a> <span class="s2">&quot;DESC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">,</span>
+</span><span id="Tokenizer-651"><a href="#Tokenizer-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;DESCRIBE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">,</span>
+</span><span id="Tokenizer-652"><a href="#Tokenizer-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;DISTINCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">,</span>
+</span><span id="Tokenizer-653"><a href="#Tokenizer-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;DISTRIBUTE BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-654"><a href="#Tokenizer-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;DIV&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">,</span>
+</span><span id="Tokenizer-655"><a href="#Tokenizer-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span>
+</span><span id="Tokenizer-656"><a href="#Tokenizer-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;ELSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">,</span>
+</span><span id="Tokenizer-657"><a href="#Tokenizer-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;END&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">,</span>
+</span><span id="Tokenizer-658"><a href="#Tokenizer-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;ESCAPE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">,</span>
+</span><span id="Tokenizer-659"><a href="#Tokenizer-659"><span class="linenos"> 659</span></a> <span class="s2">&quot;EXCEPT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
+</span><span id="Tokenizer-660"><a href="#Tokenizer-660"><span class="linenos"> 660</span></a> <span class="s2">&quot;EXECUTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="Tokenizer-661"><a href="#Tokenizer-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;EXISTS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">,</span>
+</span><span id="Tokenizer-662"><a href="#Tokenizer-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;FALSE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">,</span>
+</span><span id="Tokenizer-663"><a href="#Tokenizer-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;FETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="Tokenizer-664"><a href="#Tokenizer-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;FILTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
+</span><span id="Tokenizer-665"><a href="#Tokenizer-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
+</span><span id="Tokenizer-666"><a href="#Tokenizer-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="Tokenizer-667"><a href="#Tokenizer-667"><span class="linenos"> 667</span></a> <span class="s2">&quot;FUNCTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
+</span><span id="Tokenizer-668"><a href="#Tokenizer-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;FOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">,</span>
+</span><span id="Tokenizer-669"><a href="#Tokenizer-669"><span class="linenos"> 669</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
+</span><span id="Tokenizer-670"><a href="#Tokenizer-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="Tokenizer-671"><a href="#Tokenizer-671"><span class="linenos"> 671</span></a> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span>
+</span><span id="Tokenizer-672"><a href="#Tokenizer-672"><span class="linenos"> 672</span></a> <span class="s2">&quot;GEOGRAPHY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
+</span><span id="Tokenizer-673"><a href="#Tokenizer-673"><span class="linenos"> 673</span></a> <span class="s2">&quot;GEOMETRY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
+</span><span id="Tokenizer-674"><a href="#Tokenizer-674"><span class="linenos"> 674</span></a> <span class="s2">&quot;GLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
+</span><span id="Tokenizer-675"><a href="#Tokenizer-675"><span class="linenos"> 675</span></a> <span class="s2">&quot;GROUP BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-676"><a href="#Tokenizer-676"><span class="linenos"> 676</span></a> <span class="s2">&quot;GROUPING SETS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">,</span>
+</span><span id="Tokenizer-677"><a href="#Tokenizer-677"><span class="linenos"> 677</span></a> <span class="s2">&quot;HAVING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">,</span>
+</span><span id="Tokenizer-678"><a href="#Tokenizer-678"><span class="linenos"> 678</span></a> <span class="s2">&quot;ILIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="Tokenizer-679"><a href="#Tokenizer-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;IN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span>
+</span><span id="Tokenizer-680"><a href="#Tokenizer-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;INDEX&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
+</span><span id="Tokenizer-681"><a href="#Tokenizer-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;INET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
+</span><span id="Tokenizer-682"><a href="#Tokenizer-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;INNER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
+</span><span id="Tokenizer-683"><a href="#Tokenizer-683"><span class="linenos"> 683</span></a> <span class="s2">&quot;INSERT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">,</span>
+</span><span id="Tokenizer-684"><a href="#Tokenizer-684"><span class="linenos"> 684</span></a> <span class="s2">&quot;INTERVAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
+</span><span id="Tokenizer-685"><a href="#Tokenizer-685"><span class="linenos"> 685</span></a> <span class="s2">&quot;INTERSECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
+</span><span id="Tokenizer-686"><a href="#Tokenizer-686"><span class="linenos"> 686</span></a> <span class="s2">&quot;INTO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">,</span>
+</span><span id="Tokenizer-687"><a href="#Tokenizer-687"><span class="linenos"> 687</span></a> <span class="s2">&quot;IS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
+</span><span id="Tokenizer-688"><a href="#Tokenizer-688"><span class="linenos"> 688</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
+</span><span id="Tokenizer-689"><a href="#Tokenizer-689"><span class="linenos"> 689</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">,</span>
+</span><span id="Tokenizer-690"><a href="#Tokenizer-690"><span class="linenos"> 690</span></a> <span class="s2">&quot;KEEP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
+</span><span id="Tokenizer-691"><a href="#Tokenizer-691"><span class="linenos"> 691</span></a> <span class="s2">&quot;KILL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">,</span>
+</span><span id="Tokenizer-692"><a href="#Tokenizer-692"><span class="linenos"> 692</span></a> <span class="s2">&quot;LATERAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">,</span>
+</span><span id="Tokenizer-693"><a href="#Tokenizer-693"><span class="linenos"> 693</span></a> <span class="s2">&quot;LEFT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="Tokenizer-694"><a href="#Tokenizer-694"><span class="linenos"> 694</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="Tokenizer-695"><a href="#Tokenizer-695"><span class="linenos"> 695</span></a> <span class="s2">&quot;LIMIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span>
+</span><span id="Tokenizer-696"><a href="#Tokenizer-696"><span class="linenos"> 696</span></a> <span class="s2">&quot;LOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
+</span><span id="Tokenizer-697"><a href="#Tokenizer-697"><span class="linenos"> 697</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
+</span><span id="Tokenizer-698"><a href="#Tokenizer-698"><span class="linenos"> 698</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
+</span><span id="Tokenizer-699"><a href="#Tokenizer-699"><span class="linenos"> 699</span></a> <span class="s2">&quot;NATURAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
+</span><span id="Tokenizer-700"><a href="#Tokenizer-700"><span class="linenos"> 700</span></a> <span class="s2">&quot;NEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
+</span><span id="Tokenizer-701"><a href="#Tokenizer-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span>
+</span><span id="Tokenizer-702"><a href="#Tokenizer-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;NOTNULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">,</span>
+</span><span id="Tokenizer-703"><a href="#Tokenizer-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;NULL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span>
+</span><span id="Tokenizer-704"><a href="#Tokenizer-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;OBJECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
+</span><span id="Tokenizer-705"><a href="#Tokenizer-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;OFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="Tokenizer-706"><a href="#Tokenizer-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span>
+</span><span id="Tokenizer-707"><a href="#Tokenizer-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;OR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span>
+</span><span id="Tokenizer-708"><a href="#Tokenizer-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;XOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
+</span><span id="Tokenizer-709"><a href="#Tokenizer-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;ORDER BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-710"><a href="#Tokenizer-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
+</span><span id="Tokenizer-711"><a href="#Tokenizer-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;OUTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
+</span><span id="Tokenizer-712"><a href="#Tokenizer-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;OVER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">,</span>
+</span><span id="Tokenizer-713"><a href="#Tokenizer-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;OVERLAPS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">,</span>
+</span><span id="Tokenizer-714"><a href="#Tokenizer-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;OVERWRITE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
+</span><span id="Tokenizer-715"><a href="#Tokenizer-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;PARTITION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
+</span><span id="Tokenizer-716"><a href="#Tokenizer-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;PARTITION BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-717"><a href="#Tokenizer-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;PARTITIONED BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-718"><a href="#Tokenizer-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-719"><a href="#Tokenizer-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;PERCENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
+</span><span id="Tokenizer-720"><a href="#Tokenizer-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;PIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
+</span><span id="Tokenizer-721"><a href="#Tokenizer-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;PRAGMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
+</span><span id="Tokenizer-722"><a href="#Tokenizer-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
+</span><span id="Tokenizer-723"><a href="#Tokenizer-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;PROCEDURE&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="Tokenizer-724"><a href="#Tokenizer-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;QUALIFY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">,</span>
+</span><span id="Tokenizer-725"><a href="#Tokenizer-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-726"><a href="#Tokenizer-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;RECURSIVE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">,</span>
+</span><span id="Tokenizer-727"><a href="#Tokenizer-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;REGEXP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
+</span><span id="Tokenizer-728"><a href="#Tokenizer-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;REPLACE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
+</span><span id="Tokenizer-729"><a href="#Tokenizer-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
+</span><span id="Tokenizer-730"><a href="#Tokenizer-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;REFERENCES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
+</span><span id="Tokenizer-731"><a href="#Tokenizer-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="Tokenizer-732"><a href="#Tokenizer-732"><span class="linenos"> 732</span></a> <span class="s2">&quot;RLIKE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
+</span><span id="Tokenizer-733"><a href="#Tokenizer-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span><span class="p">,</span>
+</span><span id="Tokenizer-734"><a href="#Tokenizer-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;ROLLUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">,</span>
+</span><span id="Tokenizer-735"><a href="#Tokenizer-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
+</span><span id="Tokenizer-736"><a href="#Tokenizer-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;ROWS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
+</span><span id="Tokenizer-737"><a href="#Tokenizer-737"><span class="linenos"> 737</span></a> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
+</span><span id="Tokenizer-738"><a href="#Tokenizer-738"><span class="linenos"> 738</span></a> <span class="s2">&quot;SELECT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
+</span><span id="Tokenizer-739"><a href="#Tokenizer-739"><span class="linenos"> 739</span></a> <span class="s2">&quot;SEMI&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="Tokenizer-740"><a href="#Tokenizer-740"><span class="linenos"> 740</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="Tokenizer-741"><a href="#Tokenizer-741"><span class="linenos"> 741</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
+</span><span id="Tokenizer-742"><a href="#Tokenizer-742"><span class="linenos"> 742</span></a> <span class="s2">&quot;SHOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="Tokenizer-743"><a href="#Tokenizer-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;SIMILAR TO&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</span><span class="p">,</span>
+</span><span id="Tokenizer-744"><a href="#Tokenizer-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;SOME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">,</span>
+</span><span id="Tokenizer-745"><a href="#Tokenizer-745"><span class="linenos"> 745</span></a> <span class="s2">&quot;SORT BY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">,</span>
+</span><span id="Tokenizer-746"><a href="#Tokenizer-746"><span class="linenos"> 746</span></a> <span class="s2">&quot;START WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">,</span>
+</span><span id="Tokenizer-747"><a href="#Tokenizer-747"><span class="linenos"> 747</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="Tokenizer-748"><a href="#Tokenizer-748"><span class="linenos"> 748</span></a> <span class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">,</span>
+</span><span id="Tokenizer-749"><a href="#Tokenizer-749"><span class="linenos"> 749</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="Tokenizer-750"><a href="#Tokenizer-750"><span class="linenos"> 750</span></a> <span class="s2">&quot;TEMPORARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="Tokenizer-751"><a href="#Tokenizer-751"><span class="linenos"> 751</span></a> <span class="s2">&quot;THEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">,</span>
+</span><span id="Tokenizer-752"><a href="#Tokenizer-752"><span class="linenos"> 752</span></a> <span class="s2">&quot;TRUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
+</span><span id="Tokenizer-753"><a href="#Tokenizer-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;UNION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
+</span><span id="Tokenizer-754"><a href="#Tokenizer-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
+</span><span id="Tokenizer-755"><a href="#Tokenizer-755"><span class="linenos"> 755</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
+</span><span id="Tokenizer-756"><a href="#Tokenizer-756"><span class="linenos"> 756</span></a> <span class="s2">&quot;UNPIVOT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
+</span><span id="Tokenizer-757"><a href="#Tokenizer-757"><span class="linenos"> 757</span></a> <span class="s2">&quot;UPDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
+</span><span id="Tokenizer-758"><a href="#Tokenizer-758"><span class="linenos"> 758</span></a> <span class="s2">&quot;USE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">,</span>
+</span><span id="Tokenizer-759"><a href="#Tokenizer-759"><span class="linenos"> 759</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">,</span>
+</span><span id="Tokenizer-760"><a href="#Tokenizer-760"><span class="linenos"> 760</span></a> <span class="s2">&quot;UUID&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
+</span><span id="Tokenizer-761"><a href="#Tokenizer-761"><span class="linenos"> 761</span></a> <span class="s2">&quot;VALUES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
+</span><span id="Tokenizer-762"><a href="#Tokenizer-762"><span class="linenos"> 762</span></a> <span class="s2">&quot;VIEW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
+</span><span id="Tokenizer-763"><a href="#Tokenizer-763"><span class="linenos"> 763</span></a> <span class="s2">&quot;VOLATILE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
+</span><span id="Tokenizer-764"><a href="#Tokenizer-764"><span class="linenos"> 764</span></a> <span class="s2">&quot;WHEN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">,</span>
+</span><span id="Tokenizer-765"><a href="#Tokenizer-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;WHERE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">,</span>
+</span><span id="Tokenizer-766"><a href="#Tokenizer-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;WINDOW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="Tokenizer-767"><a href="#Tokenizer-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span>
+</span><span id="Tokenizer-768"><a href="#Tokenizer-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;APPLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
+</span><span id="Tokenizer-769"><a href="#Tokenizer-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
+</span><span id="Tokenizer-770"><a href="#Tokenizer-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;BIT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
+</span><span id="Tokenizer-771"><a href="#Tokenizer-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;BOOL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
+</span><span id="Tokenizer-772"><a href="#Tokenizer-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
+</span><span id="Tokenizer-773"><a href="#Tokenizer-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;BYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="Tokenizer-774"><a href="#Tokenizer-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;MEDIUMINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
+</span><span id="Tokenizer-775"><a href="#Tokenizer-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;INT1&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="Tokenizer-776"><a href="#Tokenizer-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;TINYINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="Tokenizer-777"><a href="#Tokenizer-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;INT16&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="Tokenizer-778"><a href="#Tokenizer-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;SHORT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="Tokenizer-779"><a href="#Tokenizer-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="Tokenizer-780"><a href="#Tokenizer-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;INT128&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="Tokenizer-781"><a href="#Tokenizer-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;HUGEINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
+</span><span id="Tokenizer-782"><a href="#Tokenizer-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;INT2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="Tokenizer-783"><a href="#Tokenizer-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;INTEGER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="Tokenizer-784"><a href="#Tokenizer-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="Tokenizer-785"><a href="#Tokenizer-785"><span class="linenos"> 785</span></a> <span class="s2">&quot;INT4&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="Tokenizer-786"><a href="#Tokenizer-786"><span class="linenos"> 786</span></a> <span class="s2">&quot;INT32&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="Tokenizer-787"><a href="#Tokenizer-787"><span class="linenos"> 787</span></a> <span class="s2">&quot;INT64&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="Tokenizer-788"><a href="#Tokenizer-788"><span class="linenos"> 788</span></a> <span class="s2">&quot;LONG&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="Tokenizer-789"><a href="#Tokenizer-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;BIGINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="Tokenizer-790"><a href="#Tokenizer-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;INT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="Tokenizer-791"><a href="#Tokenizer-791"><span class="linenos"> 791</span></a> <span class="s2">&quot;DEC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="Tokenizer-792"><a href="#Tokenizer-792"><span class="linenos"> 792</span></a> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="Tokenizer-793"><a href="#Tokenizer-793"><span class="linenos"> 793</span></a> <span class="s2">&quot;BIGDECIMAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
+</span><span id="Tokenizer-794"><a href="#Tokenizer-794"><span class="linenos"> 794</span></a> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
+</span><span id="Tokenizer-795"><a href="#Tokenizer-795"><span class="linenos"> 795</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
+</span><span id="Tokenizer-796"><a href="#Tokenizer-796"><span class="linenos"> 796</span></a> <span class="s2">&quot;NULLABLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
+</span><span id="Tokenizer-797"><a href="#Tokenizer-797"><span class="linenos"> 797</span></a> <span class="s2">&quot;NUMBER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="Tokenizer-798"><a href="#Tokenizer-798"><span class="linenos"> 798</span></a> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="Tokenizer-799"><a href="#Tokenizer-799"><span class="linenos"> 799</span></a> <span class="s2">&quot;FIXED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
+</span><span id="Tokenizer-800"><a href="#Tokenizer-800"><span class="linenos"> 800</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="Tokenizer-801"><a href="#Tokenizer-801"><span class="linenos"> 801</span></a> <span class="s2">&quot;FLOAT&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="Tokenizer-802"><a href="#Tokenizer-802"><span class="linenos"> 802</span></a> <span class="s2">&quot;FLOAT4&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="Tokenizer-803"><a href="#Tokenizer-803"><span class="linenos"> 803</span></a> <span class="s2">&quot;FLOAT8&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="Tokenizer-804"><a href="#Tokenizer-804"><span class="linenos"> 804</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="Tokenizer-805"><a href="#Tokenizer-805"><span class="linenos"> 805</span></a> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="Tokenizer-806"><a href="#Tokenizer-806"><span class="linenos"> 806</span></a> <span class="s2">&quot;JSON&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
+</span><span id="Tokenizer-807"><a href="#Tokenizer-807"><span class="linenos"> 807</span></a> <span class="s2">&quot;CHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-808"><a href="#Tokenizer-808"><span class="linenos"> 808</span></a> <span class="s2">&quot;CHARACTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-809"><a href="#Tokenizer-809"><span class="linenos"> 809</span></a> <span class="s2">&quot;NCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-810"><a href="#Tokenizer-810"><span class="linenos"> 810</span></a> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-811"><a href="#Tokenizer-811"><span class="linenos"> 811</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-812"><a href="#Tokenizer-812"><span class="linenos"> 812</span></a> <span class="s2">&quot;NVARCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-813"><a href="#Tokenizer-813"><span class="linenos"> 813</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-814"><a href="#Tokenizer-814"><span class="linenos"> 814</span></a> <span class="s2">&quot;BPCHAR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
+</span><span id="Tokenizer-815"><a href="#Tokenizer-815"><span class="linenos"> 815</span></a> <span class="s2">&quot;STR&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="Tokenizer-816"><a href="#Tokenizer-816"><span class="linenos"> 816</span></a> <span class="s2">&quot;STRING&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="Tokenizer-817"><a href="#Tokenizer-817"><span class="linenos"> 817</span></a> <span class="s2">&quot;TEXT&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="Tokenizer-818"><a href="#Tokenizer-818"><span class="linenos"> 818</span></a> <span class="s2">&quot;LONGTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
+</span><span id="Tokenizer-819"><a href="#Tokenizer-819"><span class="linenos"> 819</span></a> <span class="s2">&quot;MEDIUMTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
+</span><span id="Tokenizer-820"><a href="#Tokenizer-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;TINYTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">,</span>
+</span><span id="Tokenizer-821"><a href="#Tokenizer-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;CLOB&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="Tokenizer-822"><a href="#Tokenizer-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;LONGVARCHAR&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="Tokenizer-823"><a href="#Tokenizer-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;BINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
+</span><span id="Tokenizer-824"><a href="#Tokenizer-824"><span class="linenos"> 824</span></a> <span class="s2">&quot;BLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Tokenizer-825"><a href="#Tokenizer-825"><span class="linenos"> 825</span></a> <span class="s2">&quot;LONGBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
+</span><span id="Tokenizer-826"><a href="#Tokenizer-826"><span class="linenos"> 826</span></a> <span class="s2">&quot;MEDIUMBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
+</span><span id="Tokenizer-827"><a href="#Tokenizer-827"><span class="linenos"> 827</span></a> <span class="s2">&quot;TINYBLOB&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">,</span>
+</span><span id="Tokenizer-828"><a href="#Tokenizer-828"><span class="linenos"> 828</span></a> <span class="s2">&quot;BYTEA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Tokenizer-829"><a href="#Tokenizer-829"><span class="linenos"> 829</span></a> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
+</span><span id="Tokenizer-830"><a href="#Tokenizer-830"><span class="linenos"> 830</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">TIME</span><span class="p">,</span>
+</span><span id="Tokenizer-831"><a href="#Tokenizer-831"><span class="linenos"> 831</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
+</span><span id="Tokenizer-832"><a href="#Tokenizer-832"><span class="linenos"> 832</span></a> <span class="s2">&quot;TIMESTAMP&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="Tokenizer-833"><a href="#Tokenizer-833"><span class="linenos"> 833</span></a> <span class="s2">&quot;TIMESTAMPTZ&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="Tokenizer-834"><a href="#Tokenizer-834"><span class="linenos"> 834</span></a> <span class="s2">&quot;TIMESTAMPLTZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="Tokenizer-835"><a href="#Tokenizer-835"><span class="linenos"> 835</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="Tokenizer-836"><a href="#Tokenizer-836"><span class="linenos"> 836</span></a> <span class="s2">&quot;DATETIME&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="Tokenizer-837"><a href="#Tokenizer-837"><span class="linenos"> 837</span></a> <span class="s2">&quot;INT4RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-838"><a href="#Tokenizer-838"><span class="linenos"> 838</span></a> <span class="s2">&quot;INT4MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-839"><a href="#Tokenizer-839"><span class="linenos"> 839</span></a> <span class="s2">&quot;INT8RANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-840"><a href="#Tokenizer-840"><span class="linenos"> 840</span></a> <span class="s2">&quot;INT8MULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-841"><a href="#Tokenizer-841"><span class="linenos"> 841</span></a> <span class="s2">&quot;NUMRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-842"><a href="#Tokenizer-842"><span class="linenos"> 842</span></a> <span class="s2">&quot;NUMMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-843"><a href="#Tokenizer-843"><span class="linenos"> 843</span></a> <span class="s2">&quot;TSRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-844"><a href="#Tokenizer-844"><span class="linenos"> 844</span></a> <span class="s2">&quot;TSMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-845"><a href="#Tokenizer-845"><span class="linenos"> 845</span></a> <span class="s2">&quot;TSTZRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-846"><a href="#Tokenizer-846"><span class="linenos"> 846</span></a> <span class="s2">&quot;TSTZMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-847"><a href="#Tokenizer-847"><span class="linenos"> 847</span></a> <span class="s2">&quot;DATERANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-848"><a href="#Tokenizer-848"><span class="linenos"> 848</span></a> <span class="s2">&quot;DATEMULTIRANGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
+</span><span id="Tokenizer-849"><a href="#Tokenizer-849"><span class="linenos"> 849</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="Tokenizer-850"><a href="#Tokenizer-850"><span class="linenos"> 850</span></a> <span class="s2">&quot;STRUCT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
+</span><span id="Tokenizer-851"><a href="#Tokenizer-851"><span class="linenos"> 851</span></a> <span class="s2">&quot;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="Tokenizer-852"><a href="#Tokenizer-852"><span class="linenos"> 852</span></a> <span class="s2">&quot;ALTER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">,</span>
+</span><span id="Tokenizer-853"><a href="#Tokenizer-853"><span class="linenos"> 853</span></a> <span class="s2">&quot;ANALYZE&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="Tokenizer-854"><a href="#Tokenizer-854"><span class="linenos"> 854</span></a> <span class="s2">&quot;CALL&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="Tokenizer-855"><a href="#Tokenizer-855"><span class="linenos"> 855</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">,</span>
+</span><span id="Tokenizer-856"><a href="#Tokenizer-856"><span class="linenos"> 856</span></a> <span class="s2">&quot;COPY&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="Tokenizer-857"><a href="#Tokenizer-857"><span class="linenos"> 857</span></a> <span class="s2">&quot;EXPLAIN&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="Tokenizer-858"><a href="#Tokenizer-858"><span class="linenos"> 858</span></a> <span class="s2">&quot;GRANT&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="Tokenizer-859"><a href="#Tokenizer-859"><span class="linenos"> 859</span></a> <span class="s2">&quot;OPTIMIZE&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="Tokenizer-860"><a href="#Tokenizer-860"><span class="linenos"> 860</span></a> <span class="s2">&quot;PREPARE&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="Tokenizer-861"><a href="#Tokenizer-861"><span class="linenos"> 861</span></a> <span class="s2">&quot;TRUNCATE&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="Tokenizer-862"><a href="#Tokenizer-862"><span class="linenos"> 862</span></a> <span class="s2">&quot;VACUUM&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="Tokenizer-863"><a href="#Tokenizer-863"><span class="linenos"> 863</span></a> <span class="s2">&quot;USER-DEFINED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
+</span><span id="Tokenizer-864"><a href="#Tokenizer-864"><span class="linenos"> 864</span></a> <span class="s2">&quot;FOR VERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Tokenizer-865"><a href="#Tokenizer-865"><span class="linenos"> 865</span></a> <span class="s2">&quot;FOR TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">,</span>
+</span><span id="Tokenizer-866"><a href="#Tokenizer-866"><span class="linenos"> 866</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-867"><a href="#Tokenizer-867"><span class="linenos"> 867</span></a>
+</span><span id="Tokenizer-868"><a href="#Tokenizer-868"><span class="linenos"> 868</span></a> <span class="n">WHITE_SPACE</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-869"><a href="#Tokenizer-869"><span class="linenos"> 869</span></a> <span class="s2">&quot; &quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
+</span><span id="Tokenizer-870"><a href="#Tokenizer-870"><span class="linenos"> 870</span></a> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SPACE</span><span class="p">,</span>
+</span><span id="Tokenizer-871"><a href="#Tokenizer-871"><span class="linenos"> 871</span></a> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
+</span><span id="Tokenizer-872"><a href="#Tokenizer-872"><span class="linenos"> 872</span></a> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">,</span>
+</span><span id="Tokenizer-873"><a href="#Tokenizer-873"><span class="linenos"> 873</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-874"><a href="#Tokenizer-874"><span class="linenos"> 874</span></a>
+</span><span id="Tokenizer-875"><a href="#Tokenizer-875"><span class="linenos"> 875</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-876"><a href="#Tokenizer-876"><span class="linenos"> 876</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Tokenizer-877"><a href="#Tokenizer-877"><span class="linenos"> 877</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="Tokenizer-878"><a href="#Tokenizer-878"><span class="linenos"> 878</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="Tokenizer-879"><a href="#Tokenizer-879"><span class="linenos"> 879</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="Tokenizer-880"><a href="#Tokenizer-880"><span class="linenos"> 880</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-881"><a href="#Tokenizer-881"><span class="linenos"> 881</span></a>
+</span><span id="Tokenizer-882"><a href="#Tokenizer-882"><span class="linenos"> 882</span></a> <span class="n">COMMAND_PREFIX_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">}</span>
+</span><span id="Tokenizer-883"><a href="#Tokenizer-883"><span class="linenos"> 883</span></a>
+</span><span id="Tokenizer-884"><a href="#Tokenizer-884"><span class="linenos"> 884</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
+</span><span id="Tokenizer-885"><a href="#Tokenizer-885"><span class="linenos"> 885</span></a> <span class="n">NUMERIC_LITERALS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-886"><a href="#Tokenizer-886"><span class="linenos"> 886</span></a>
+</span><span id="Tokenizer-887"><a href="#Tokenizer-887"><span class="linenos"> 887</span></a> <span class="n">COMMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;--&quot;</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="Tokenizer-888"><a href="#Tokenizer-888"><span class="linenos"> 888</span></a>
+</span><span id="Tokenizer-889"><a href="#Tokenizer-889"><span class="linenos"> 889</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Tokenizer-890"><a href="#Tokenizer-890"><span class="linenos"> 890</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-891"><a href="#Tokenizer-891"><span class="linenos"> 891</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-892"><a href="#Tokenizer-892"><span class="linenos"> 892</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-893"><a href="#Tokenizer-893"><span class="linenos"> 893</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-894"><a href="#Tokenizer-894"><span class="linenos"> 894</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-895"><a href="#Tokenizer-895"><span class="linenos"> 895</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-896"><a href="#Tokenizer-896"><span class="linenos"> 896</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-897"><a href="#Tokenizer-897"><span class="linenos"> 897</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-898"><a href="#Tokenizer-898"><span class="linenos"> 898</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-899"><a href="#Tokenizer-899"><span class="linenos"> 899</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-900"><a href="#Tokenizer-900"><span class="linenos"> 900</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-901"><a href="#Tokenizer-901"><span class="linenos"> 901</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-902"><a href="#Tokenizer-902"><span class="linenos"> 902</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-903"><a href="#Tokenizer-903"><span class="linenos"> 903</span></a> <span class="s2">&quot;_rs_dialect_settings&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-904"><a href="#Tokenizer-904"><span class="linenos"> 904</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-905"><a href="#Tokenizer-905"><span class="linenos"> 905</span></a>
+</span><span id="Tokenizer-906"><a href="#Tokenizer-906"><span class="linenos"> 906</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-907"><a href="#Tokenizer-907"><span class="linenos"> 907</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
</span><span id="Tokenizer-908"><a href="#Tokenizer-908"><span class="linenos"> 908</span></a>
-</span><span id="Tokenizer-909"><a href="#Tokenizer-909"><span class="linenos"> 909</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Tokenizer-909"><a href="#Tokenizer-909"><span class="linenos"> 909</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="Tokenizer-910"><a href="#Tokenizer-910"><span class="linenos"> 910</span></a>
-</span><span id="Tokenizer-911"><a href="#Tokenizer-911"><span class="linenos"> 911</span></a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-912"><a href="#Tokenizer-912"><span class="linenos"> 912</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-913"><a href="#Tokenizer-913"><span class="linenos"> 913</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-914"><a href="#Tokenizer-914"><span class="linenos"> 914</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-915"><a href="#Tokenizer-915"><span class="linenos"> 915</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-916"><a href="#Tokenizer-916"><span class="linenos"> 916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-917"><a href="#Tokenizer-917"><span class="linenos"> 917</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-918"><a href="#Tokenizer-918"><span class="linenos"> 918</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-919"><a href="#Tokenizer-919"><span class="linenos"> 919</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-920"><a href="#Tokenizer-920"><span class="linenos"> 920</span></a>
-</span><span id="Tokenizer-921"><a href="#Tokenizer-921"><span class="linenos"> 921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-922"><a href="#Tokenizer-922"><span class="linenos"> 922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-923"><a href="#Tokenizer-923"><span class="linenos"> 923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-924"><a href="#Tokenizer-924"><span class="linenos"> 924</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
-</span><span id="Tokenizer-925"><a href="#Tokenizer-925"><span class="linenos"> 925</span></a>
-</span><span id="Tokenizer-926"><a href="#Tokenizer-926"><span class="linenos"> 926</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Tokenizer-927"><a href="#Tokenizer-927"><span class="linenos"> 927</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a list of tokens corresponding to the SQL string `sql`.&quot;&quot;&quot;</span>
-</span><span id="Tokenizer-928"><a href="#Tokenizer-928"><span class="linenos"> 928</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="Tokenizer-929"><a href="#Tokenizer-929"><span class="linenos"> 929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize_rs</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="Tokenizer-930"><a href="#Tokenizer-930"><span class="linenos"> 930</span></a>
-</span><span id="Tokenizer-931"><a href="#Tokenizer-931"><span class="linenos"> 931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="Tokenizer-932"><a href="#Tokenizer-932"><span class="linenos"> 932</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span>
-</span><span id="Tokenizer-933"><a href="#Tokenizer-933"><span class="linenos"> 933</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="Tokenizer-934"><a href="#Tokenizer-934"><span class="linenos"> 934</span></a>
-</span><span id="Tokenizer-935"><a href="#Tokenizer-935"><span class="linenos"> 935</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-936"><a href="#Tokenizer-936"><span class="linenos"> 936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
-</span><span id="Tokenizer-937"><a href="#Tokenizer-937"><span class="linenos"> 937</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="Tokenizer-938"><a href="#Tokenizer-938"><span class="linenos"> 938</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Tokenizer-939"><a href="#Tokenizer-939"><span class="linenos"> 939</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-940"><a href="#Tokenizer-940"><span class="linenos"> 940</span></a> <span class="n">context</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
-</span><span id="Tokenizer-941"><a href="#Tokenizer-941"><span class="linenos"> 941</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+</span><span id="Tokenizer-911"><a href="#Tokenizer-911"><span class="linenos"> 911</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="Tokenizer-912"><a href="#Tokenizer-912"><span class="linenos"> 912</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span> <span class="o">=</span> <span class="n">RsTokenizerDialectSettings</span><span class="p">(</span>
+</span><span id="Tokenizer-913"><a href="#Tokenizer-913"><span class="linenos"> 913</span></a> <span class="n">escape_sequences</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="p">,</span>
+</span><span id="Tokenizer-914"><a href="#Tokenizer-914"><span class="linenos"> 914</span></a> <span class="n">identifiers_can_start_with_digit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">,</span>
+</span><span id="Tokenizer-915"><a href="#Tokenizer-915"><span class="linenos"> 915</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-916"><a href="#Tokenizer-916"><span class="linenos"> 916</span></a>
+</span><span id="Tokenizer-917"><a href="#Tokenizer-917"><span class="linenos"> 917</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Tokenizer-918"><a href="#Tokenizer-918"><span class="linenos"> 918</span></a>
+</span><span id="Tokenizer-919"><a href="#Tokenizer-919"><span class="linenos"> 919</span></a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-920"><a href="#Tokenizer-920"><span class="linenos"> 920</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-921"><a href="#Tokenizer-921"><span class="linenos"> 921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-922"><a href="#Tokenizer-922"><span class="linenos"> 922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-923"><a href="#Tokenizer-923"><span class="linenos"> 923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-924"><a href="#Tokenizer-924"><span class="linenos"> 924</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-925"><a href="#Tokenizer-925"><span class="linenos"> 925</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-926"><a href="#Tokenizer-926"><span class="linenos"> 926</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-927"><a href="#Tokenizer-927"><span class="linenos"> 927</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-928"><a href="#Tokenizer-928"><span class="linenos"> 928</span></a>
+</span><span id="Tokenizer-929"><a href="#Tokenizer-929"><span class="linenos"> 929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-930"><a href="#Tokenizer-930"><span class="linenos"> 930</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-931"><a href="#Tokenizer-931"><span class="linenos"> 931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-932"><a href="#Tokenizer-932"><span class="linenos"> 932</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+</span><span id="Tokenizer-933"><a href="#Tokenizer-933"><span class="linenos"> 933</span></a>
+</span><span id="Tokenizer-934"><a href="#Tokenizer-934"><span class="linenos"> 934</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Tokenizer-935"><a href="#Tokenizer-935"><span class="linenos"> 935</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a list of tokens corresponding to the SQL string `sql`.&quot;&quot;&quot;</span>
+</span><span id="Tokenizer-936"><a href="#Tokenizer-936"><span class="linenos"> 936</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="Tokenizer-937"><a href="#Tokenizer-937"><span class="linenos"> 937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize_rs</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+</span><span id="Tokenizer-938"><a href="#Tokenizer-938"><span class="linenos"> 938</span></a>
+</span><span id="Tokenizer-939"><a href="#Tokenizer-939"><span class="linenos"> 939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Tokenizer-940"><a href="#Tokenizer-940"><span class="linenos"> 940</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span>
+</span><span id="Tokenizer-941"><a href="#Tokenizer-941"><span class="linenos"> 941</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="Tokenizer-942"><a href="#Tokenizer-942"><span class="linenos"> 942</span></a>
-</span><span id="Tokenizer-943"><a href="#Tokenizer-943"><span class="linenos"> 943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
-</span><span id="Tokenizer-944"><a href="#Tokenizer-944"><span class="linenos"> 944</span></a>
-</span><span id="Tokenizer-945"><a href="#Tokenizer-945"><span class="linenos"> 945</span></a> <span class="k">def</span> <span class="nf">_scan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">until</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-946"><a href="#Tokenizer-946"><span class="linenos"> 946</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
-</span><span id="Tokenizer-947"><a href="#Tokenizer-947"><span class="linenos"> 947</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="Tokenizer-948"><a href="#Tokenizer-948"><span class="linenos"> 948</span></a>
-</span><span id="Tokenizer-949"><a href="#Tokenizer-949"><span class="linenos"> 949</span></a> <span class="c1"># skip spaces inline rather than iteratively call advance()</span>
-</span><span id="Tokenizer-950"><a href="#Tokenizer-950"><span class="linenos"> 950</span></a> <span class="c1"># for performance reasons</span>
-</span><span id="Tokenizer-951"><a href="#Tokenizer-951"><span class="linenos"> 951</span></a> <span class="k">while</span> <span class="n">current</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="Tokenizer-952"><a href="#Tokenizer-952"><span class="linenos"> 952</span></a> <span class="n">char</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">current</span><span class="p">]</span>
-</span><span id="Tokenizer-953"><a href="#Tokenizer-953"><span class="linenos"> 953</span></a>
-</span><span id="Tokenizer-954"><a href="#Tokenizer-954"><span class="linenos"> 954</span></a> <span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="o">==</span> <span class="s2">&quot; &quot;</span> <span class="ow">or</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">):</span>
-</span><span id="Tokenizer-955"><a href="#Tokenizer-955"><span class="linenos"> 955</span></a> <span class="n">current</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-956"><a href="#Tokenizer-956"><span class="linenos"> 956</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-957"><a href="#Tokenizer-957"><span class="linenos"> 957</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-958"><a href="#Tokenizer-958"><span class="linenos"> 958</span></a>
-</span><span id="Tokenizer-959"><a href="#Tokenizer-959"><span class="linenos"> 959</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">current</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="Tokenizer-960"><a href="#Tokenizer-960"><span class="linenos"> 960</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="n">current</span>
-</span><span id="Tokenizer-961"><a href="#Tokenizer-961"><span class="linenos"> 961</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">n</span> <span class="k">if</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-962"><a href="#Tokenizer-962"><span class="linenos"> 962</span></a>
-</span><span id="Tokenizer-963"><a href="#Tokenizer-963"><span class="linenos"> 963</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-964"><a href="#Tokenizer-964"><span class="linenos"> 964</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-965"><a href="#Tokenizer-965"><span class="linenos"> 965</span></a>
-</span><span id="Tokenizer-966"><a href="#Tokenizer-966"><span class="linenos"> 966</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
-</span><span id="Tokenizer-967"><a href="#Tokenizer-967"><span class="linenos"> 967</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
-</span><span id="Tokenizer-968"><a href="#Tokenizer-968"><span class="linenos"> 968</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_number</span><span class="p">()</span>
-</span><span id="Tokenizer-969"><a href="#Tokenizer-969"><span class="linenos"> 969</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">:</span>
-</span><span id="Tokenizer-970"><a href="#Tokenizer-970"><span class="linenos"> 970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">])</span>
-</span><span id="Tokenizer-971"><a href="#Tokenizer-971"><span class="linenos"> 971</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-972"><a href="#Tokenizer-972"><span class="linenos"> 972</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_keywords</span><span class="p">()</span>
+</span><span id="Tokenizer-943"><a href="#Tokenizer-943"><span class="linenos"> 943</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-944"><a href="#Tokenizer-944"><span class="linenos"> 944</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
+</span><span id="Tokenizer-945"><a href="#Tokenizer-945"><span class="linenos"> 945</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="Tokenizer-946"><a href="#Tokenizer-946"><span class="linenos"> 946</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Tokenizer-947"><a href="#Tokenizer-947"><span class="linenos"> 947</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-948"><a href="#Tokenizer-948"><span class="linenos"> 948</span></a> <span class="n">context</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
+</span><span id="Tokenizer-949"><a href="#Tokenizer-949"><span class="linenos"> 949</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+</span><span id="Tokenizer-950"><a href="#Tokenizer-950"><span class="linenos"> 950</span></a>
+</span><span id="Tokenizer-951"><a href="#Tokenizer-951"><span class="linenos"> 951</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
+</span><span id="Tokenizer-952"><a href="#Tokenizer-952"><span class="linenos"> 952</span></a>
+</span><span id="Tokenizer-953"><a href="#Tokenizer-953"><span class="linenos"> 953</span></a> <span class="k">def</span> <span class="nf">_scan</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">until</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-954"><a href="#Tokenizer-954"><span class="linenos"> 954</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="Tokenizer-955"><a href="#Tokenizer-955"><span class="linenos"> 955</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="Tokenizer-956"><a href="#Tokenizer-956"><span class="linenos"> 956</span></a>
+</span><span id="Tokenizer-957"><a href="#Tokenizer-957"><span class="linenos"> 957</span></a> <span class="c1"># skip spaces inline rather than iteratively call advance()</span>
+</span><span id="Tokenizer-958"><a href="#Tokenizer-958"><span class="linenos"> 958</span></a> <span class="c1"># for performance reasons</span>
+</span><span id="Tokenizer-959"><a href="#Tokenizer-959"><span class="linenos"> 959</span></a> <span class="k">while</span> <span class="n">current</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="Tokenizer-960"><a href="#Tokenizer-960"><span class="linenos"> 960</span></a> <span class="n">char</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">current</span><span class="p">]</span>
+</span><span id="Tokenizer-961"><a href="#Tokenizer-961"><span class="linenos"> 961</span></a>
+</span><span id="Tokenizer-962"><a href="#Tokenizer-962"><span class="linenos"> 962</span></a> <span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="o">==</span> <span class="s2">&quot; &quot;</span> <span class="ow">or</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">):</span>
+</span><span id="Tokenizer-963"><a href="#Tokenizer-963"><span class="linenos"> 963</span></a> <span class="n">current</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-964"><a href="#Tokenizer-964"><span class="linenos"> 964</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-965"><a href="#Tokenizer-965"><span class="linenos"> 965</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-966"><a href="#Tokenizer-966"><span class="linenos"> 966</span></a>
+</span><span id="Tokenizer-967"><a href="#Tokenizer-967"><span class="linenos"> 967</span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">current</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="Tokenizer-968"><a href="#Tokenizer-968"><span class="linenos"> 968</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="n">current</span>
+</span><span id="Tokenizer-969"><a href="#Tokenizer-969"><span class="linenos"> 969</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">n</span> <span class="k">if</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-970"><a href="#Tokenizer-970"><span class="linenos"> 970</span></a>
+</span><span id="Tokenizer-971"><a href="#Tokenizer-971"><span class="linenos"> 971</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-972"><a href="#Tokenizer-972"><span class="linenos"> 972</span></a> <span class="k">break</span>
</span><span id="Tokenizer-973"><a href="#Tokenizer-973"><span class="linenos"> 973</span></a>
-</span><span id="Tokenizer-974"><a href="#Tokenizer-974"><span class="linenos"> 974</span></a> <span class="k">if</span> <span class="n">until</span> <span class="ow">and</span> <span class="n">until</span><span class="p">():</span>
-</span><span id="Tokenizer-975"><a href="#Tokenizer-975"><span class="linenos"> 975</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-976"><a href="#Tokenizer-976"><span class="linenos"> 976</span></a>
-</span><span id="Tokenizer-977"><a href="#Tokenizer-977"><span class="linenos"> 977</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
-</span><span id="Tokenizer-978"><a href="#Tokenizer-978"><span class="linenos"> 978</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
-</span><span id="Tokenizer-979"><a href="#Tokenizer-979"><span class="linenos"> 979</span></a>
-</span><span id="Tokenizer-980"><a href="#Tokenizer-980"><span class="linenos"> 980</span></a> <span class="k">def</span> <span class="nf">_chars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-981"><a href="#Tokenizer-981"><span class="linenos"> 981</span></a> <span class="k">if</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Tokenizer-982"><a href="#Tokenizer-982"><span class="linenos"> 982</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span>
-</span><span id="Tokenizer-983"><a href="#Tokenizer-983"><span class="linenos"> 983</span></a>
-</span><span id="Tokenizer-984"><a href="#Tokenizer-984"><span class="linenos"> 984</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Tokenizer-985"><a href="#Tokenizer-985"><span class="linenos"> 985</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">size</span>
-</span><span id="Tokenizer-986"><a href="#Tokenizer-986"><span class="linenos"> 986</span></a>
-</span><span id="Tokenizer-987"><a href="#Tokenizer-987"><span class="linenos"> 987</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-988"><a href="#Tokenizer-988"><span class="linenos"> 988</span></a>
-</span><span id="Tokenizer-989"><a href="#Tokenizer-989"><span class="linenos"> 989</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</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="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-990"><a href="#Tokenizer-990"><span class="linenos"> 990</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span> <span class="ow">is</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
-</span><span id="Tokenizer-991"><a href="#Tokenizer-991"><span class="linenos"> 991</span></a> <span class="c1"># Ensures we don&#39;t count an extra line if we get a \r\n line break sequence</span>
-</span><span id="Tokenizer-992"><a href="#Tokenizer-992"><span class="linenos"> 992</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span>
-</span><span id="Tokenizer-993"><a href="#Tokenizer-993"><span class="linenos"> 993</span></a> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="Tokenizer-994"><a href="#Tokenizer-994"><span class="linenos"> 994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-995"><a href="#Tokenizer-995"><span class="linenos"> 995</span></a>
-</span><span id="Tokenizer-996"><a href="#Tokenizer-996"><span class="linenos"> 996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-997"><a href="#Tokenizer-997"><span class="linenos"> 997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-998"><a href="#Tokenizer-998"><span class="linenos"> 998</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-999"><a href="#Tokenizer-999"><span class="linenos"> 999</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">+=</span> <span class="n">i</span>
-</span><span id="Tokenizer-1000"><a href="#Tokenizer-1000"><span class="linenos">1000</span></a>
-</span><span id="Tokenizer-1001"><a href="#Tokenizer-1001"><span class="linenos">1001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+=</span> <span class="n">i</span>
-</span><span id="Tokenizer-1002"><a href="#Tokenizer-1002"><span class="linenos">1002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
-</span><span id="Tokenizer-1003"><a href="#Tokenizer-1003"><span class="linenos">1003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Tokenizer-1004"><a href="#Tokenizer-1004"><span class="linenos">1004</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="Tokenizer-1005"><a href="#Tokenizer-1005"><span class="linenos">1005</span></a>
-</span><span id="Tokenizer-1006"><a href="#Tokenizer-1006"><span class="linenos">1006</span></a> <span class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="Tokenizer-1007"><a href="#Tokenizer-1007"><span class="linenos">1007</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
-</span><span id="Tokenizer-1008"><a href="#Tokenizer-1008"><span class="linenos">1008</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
-</span><span id="Tokenizer-1009"><a href="#Tokenizer-1009"><span class="linenos">1009</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="Tokenizer-1010"><a href="#Tokenizer-1010"><span class="linenos">1010</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
-</span><span id="Tokenizer-1011"><a href="#Tokenizer-1011"><span class="linenos">1011</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="Tokenizer-1012"><a href="#Tokenizer-1012"><span class="linenos">1012</span></a>
-</span><span id="Tokenizer-1013"><a href="#Tokenizer-1013"><span class="linenos">1013</span></a> <span class="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
-</span><span id="Tokenizer-1014"><a href="#Tokenizer-1014"><span class="linenos">1014</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1015"><a href="#Tokenizer-1015"><span class="linenos">1015</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1016"><a href="#Tokenizer-1016"><span class="linenos">1016</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
-</span><span id="Tokenizer-1017"><a href="#Tokenizer-1017"><span class="linenos">1017</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="Tokenizer-1018"><a href="#Tokenizer-1018"><span class="linenos">1018</span></a>
-</span><span id="Tokenizer-1019"><a href="#Tokenizer-1019"><span class="linenos">1019</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="n">_col</span>
-</span><span id="Tokenizer-1020"><a href="#Tokenizer-1020"><span class="linenos">1020</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="n">_current</span>
-</span><span id="Tokenizer-1021"><a href="#Tokenizer-1021"><span class="linenos">1021</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="n">_end</span>
-</span><span id="Tokenizer-1022"><a href="#Tokenizer-1022"><span class="linenos">1022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="n">_peek</span>
-</span><span id="Tokenizer-1023"><a href="#Tokenizer-1023"><span class="linenos">1023</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Tokenizer-1024"><a href="#Tokenizer-1024"><span class="linenos">1024</span></a>
-</span><span id="Tokenizer-1025"><a href="#Tokenizer-1025"><span class="linenos">1025</span></a> <span class="nd">@property</span>
-</span><span id="Tokenizer-1026"><a href="#Tokenizer-1026"><span class="linenos">1026</span></a> <span class="k">def</span> <span class="nf">_text</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-1027"><a href="#Tokenizer-1027"><span class="linenos">1027</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
-</span><span id="Tokenizer-1028"><a href="#Tokenizer-1028"><span class="linenos">1028</span></a>
-</span><span id="Tokenizer-1029"><a href="#Tokenizer-1029"><span class="linenos">1029</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-1030"><a href="#Tokenizer-1030"><span class="linenos">1030</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
-</span><span id="Tokenizer-1031"><a href="#Tokenizer-1031"><span class="linenos">1031</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="Tokenizer-1032"><a href="#Tokenizer-1032"><span class="linenos">1032</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
-</span><span id="Tokenizer-1033"><a href="#Tokenizer-1033"><span class="linenos">1033</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1034"><a href="#Tokenizer-1034"><span class="linenos">1034</span></a>
-</span><span id="Tokenizer-1035"><a href="#Tokenizer-1035"><span class="linenos">1035</span></a> <span class="k">def</span> <span class="nf">_add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1036"><a href="#Tokenizer-1036"><span class="linenos">1036</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
-</span><span id="Tokenizer-1037"><a href="#Tokenizer-1037"><span class="linenos">1037</span></a>
-</span><span id="Tokenizer-1038"><a href="#Tokenizer-1038"><span class="linenos">1038</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
-</span><span id="Tokenizer-1039"><a href="#Tokenizer-1039"><span class="linenos">1039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
-</span><span id="Tokenizer-1040"><a href="#Tokenizer-1040"><span class="linenos">1040</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-1041"><a href="#Tokenizer-1041"><span class="linenos">1041</span></a>
-</span><span id="Tokenizer-1042"><a href="#Tokenizer-1042"><span class="linenos">1042</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Tokenizer-1043"><a href="#Tokenizer-1043"><span class="linenos">1043</span></a> <span class="n">Token</span><span class="p">(</span>
-</span><span id="Tokenizer-1044"><a href="#Tokenizer-1044"><span class="linenos">1044</span></a> <span class="n">token_type</span><span class="p">,</span>
-</span><span id="Tokenizer-1045"><a href="#Tokenizer-1045"><span class="linenos">1045</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
-</span><span id="Tokenizer-1046"><a href="#Tokenizer-1046"><span class="linenos">1046</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
-</span><span id="Tokenizer-1047"><a href="#Tokenizer-1047"><span class="linenos">1047</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
-</span><span id="Tokenizer-1048"><a href="#Tokenizer-1048"><span class="linenos">1048</span></a> <span class="n">start</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="p">,</span>
-</span><span id="Tokenizer-1049"><a href="#Tokenizer-1049"><span class="linenos">1049</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="Tokenizer-1050"><a href="#Tokenizer-1050"><span class="linenos">1050</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
-</span><span id="Tokenizer-1051"><a href="#Tokenizer-1051"><span class="linenos">1051</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1052"><a href="#Tokenizer-1052"><span class="linenos">1052</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1053"><a href="#Tokenizer-1053"><span class="linenos">1053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-1054"><a href="#Tokenizer-1054"><span class="linenos">1054</span></a>
-</span><span id="Tokenizer-1055"><a href="#Tokenizer-1055"><span class="linenos">1055</span></a> <span class="c1"># If we have either a semicolon or a begin token before the command&#39;s token, we&#39;ll parse</span>
-</span><span id="Tokenizer-1056"><a href="#Tokenizer-1056"><span class="linenos">1056</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
-</span><span id="Tokenizer-1057"><a href="#Tokenizer-1057"><span class="linenos">1057</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Tokenizer-1058"><a href="#Tokenizer-1058"><span class="linenos">1058</span></a> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMANDS</span>
-</span><span id="Tokenizer-1059"><a href="#Tokenizer-1059"><span class="linenos">1059</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">!=</span> <span class="s2">&quot;;&quot;</span>
-</span><span id="Tokenizer-1060"><a href="#Tokenizer-1060"><span class="linenos">1060</span></a> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMAND_PREFIX_TOKENS</span><span class="p">)</span>
-</span><span id="Tokenizer-1061"><a href="#Tokenizer-1061"><span class="linenos">1061</span></a> <span class="p">):</span>
-</span><span id="Tokenizer-1062"><a href="#Tokenizer-1062"><span class="linenos">1062</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
-</span><span id="Tokenizer-1063"><a href="#Tokenizer-1063"><span class="linenos">1063</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
-</span><span id="Tokenizer-1064"><a href="#Tokenizer-1064"><span class="linenos">1064</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1065"><a href="#Tokenizer-1065"><span class="linenos">1065</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[:</span><span class="n">tokens</span><span class="p">]</span>
-</span><span id="Tokenizer-1066"><a href="#Tokenizer-1066"><span class="linenos">1066</span></a> <span class="n">text</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">start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Tokenizer-1067"><a href="#Tokenizer-1067"><span class="linenos">1067</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="Tokenizer-1068"><a href="#Tokenizer-1068"><span class="linenos">1068</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="Tokenizer-1069"><a href="#Tokenizer-1069"><span class="linenos">1069</span></a>
-</span><span id="Tokenizer-1070"><a href="#Tokenizer-1070"><span class="linenos">1070</span></a> <span class="k">def</span> <span class="nf">_scan_keywords</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1071"><a href="#Tokenizer-1071"><span class="linenos">1071</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-1072"><a href="#Tokenizer-1072"><span class="linenos">1072</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-1073"><a href="#Tokenizer-1073"><span class="linenos">1073</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
-</span><span id="Tokenizer-1074"><a href="#Tokenizer-1074"><span class="linenos">1074</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="Tokenizer-1075"><a href="#Tokenizer-1075"><span class="linenos">1075</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1076"><a href="#Tokenizer-1076"><span class="linenos">1076</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1077"><a href="#Tokenizer-1077"><span class="linenos">1077</span></a> <span class="n">trie</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_KEYWORD_TRIE</span>
-</span><span id="Tokenizer-1078"><a href="#Tokenizer-1078"><span class="linenos">1078</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
-</span><span id="Tokenizer-1079"><a href="#Tokenizer-1079"><span class="linenos">1079</span></a>
-</span><span id="Tokenizer-1080"><a href="#Tokenizer-1080"><span class="linenos">1080</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
-</span><span id="Tokenizer-1081"><a href="#Tokenizer-1081"><span class="linenos">1081</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
-</span><span id="Tokenizer-1082"><a href="#Tokenizer-1082"><span class="linenos">1082</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
-</span><span id="Tokenizer-1083"><a href="#Tokenizer-1083"><span class="linenos">1083</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1084"><a href="#Tokenizer-1084"><span class="linenos">1084</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">char</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Tokenizer-1085"><a href="#Tokenizer-1085"><span class="linenos">1085</span></a>
-</span><span id="Tokenizer-1086"><a href="#Tokenizer-1086"><span class="linenos">1086</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="Tokenizer-1087"><a href="#Tokenizer-1087"><span class="linenos">1087</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1088"><a href="#Tokenizer-1088"><span class="linenos">1088</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="Tokenizer-1089"><a href="#Tokenizer-1089"><span class="linenos">1089</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="Tokenizer-1090"><a href="#Tokenizer-1090"><span class="linenos">1090</span></a>
-</span><span id="Tokenizer-1091"><a href="#Tokenizer-1091"><span class="linenos">1091</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">size</span>
-</span><span id="Tokenizer-1092"><a href="#Tokenizer-1092"><span class="linenos">1092</span></a> <span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-974"><a href="#Tokenizer-974"><span class="linenos"> 974</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
+</span><span id="Tokenizer-975"><a href="#Tokenizer-975"><span class="linenos"> 975</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
+</span><span id="Tokenizer-976"><a href="#Tokenizer-976"><span class="linenos"> 976</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_number</span><span class="p">()</span>
+</span><span id="Tokenizer-977"><a href="#Tokenizer-977"><span class="linenos"> 977</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">:</span>
+</span><span id="Tokenizer-978"><a href="#Tokenizer-978"><span class="linenos"> 978</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">])</span>
+</span><span id="Tokenizer-979"><a href="#Tokenizer-979"><span class="linenos"> 979</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-980"><a href="#Tokenizer-980"><span class="linenos"> 980</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_keywords</span><span class="p">()</span>
+</span><span id="Tokenizer-981"><a href="#Tokenizer-981"><span class="linenos"> 981</span></a>
+</span><span id="Tokenizer-982"><a href="#Tokenizer-982"><span class="linenos"> 982</span></a> <span class="k">if</span> <span class="n">until</span> <span class="ow">and</span> <span class="n">until</span><span class="p">():</span>
+</span><span id="Tokenizer-983"><a href="#Tokenizer-983"><span class="linenos"> 983</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-984"><a href="#Tokenizer-984"><span class="linenos"> 984</span></a>
+</span><span id="Tokenizer-985"><a href="#Tokenizer-985"><span class="linenos"> 985</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span>
+</span><span id="Tokenizer-986"><a href="#Tokenizer-986"><span class="linenos"> 986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
+</span><span id="Tokenizer-987"><a href="#Tokenizer-987"><span class="linenos"> 987</span></a>
+</span><span id="Tokenizer-988"><a href="#Tokenizer-988"><span class="linenos"> 988</span></a> <span class="k">def</span> <span class="nf">_chars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-989"><a href="#Tokenizer-989"><span class="linenos"> 989</span></a> <span class="k">if</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Tokenizer-990"><a href="#Tokenizer-990"><span class="linenos"> 990</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span>
+</span><span id="Tokenizer-991"><a href="#Tokenizer-991"><span class="linenos"> 991</span></a>
+</span><span id="Tokenizer-992"><a href="#Tokenizer-992"><span class="linenos"> 992</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Tokenizer-993"><a href="#Tokenizer-993"><span class="linenos"> 993</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="n">size</span>
+</span><span id="Tokenizer-994"><a href="#Tokenizer-994"><span class="linenos"> 994</span></a>
+</span><span id="Tokenizer-995"><a href="#Tokenizer-995"><span class="linenos"> 995</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-996"><a href="#Tokenizer-996"><span class="linenos"> 996</span></a>
+</span><span id="Tokenizer-997"><a href="#Tokenizer-997"><span class="linenos"> 997</span></a> <span class="k">def</span> <span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">alnum</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="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-998"><a href="#Tokenizer-998"><span class="linenos"> 998</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span> <span class="ow">is</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
+</span><span id="Tokenizer-999"><a href="#Tokenizer-999"><span class="linenos"> 999</span></a> <span class="c1"># Ensures we don&#39;t count an extra line if we get a \r\n line break sequence</span>
+</span><span id="Tokenizer-1000"><a href="#Tokenizer-1000"><span class="linenos">1000</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span>
+</span><span id="Tokenizer-1001"><a href="#Tokenizer-1001"><span class="linenos">1001</span></a> <span class="n">i</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="Tokenizer-1002"><a href="#Tokenizer-1002"><span class="linenos">1002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1003"><a href="#Tokenizer-1003"><span class="linenos">1003</span></a>
+</span><span id="Tokenizer-1004"><a href="#Tokenizer-1004"><span class="linenos">1004</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1005"><a href="#Tokenizer-1005"><span class="linenos">1005</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1006"><a href="#Tokenizer-1006"><span class="linenos">1006</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1007"><a href="#Tokenizer-1007"><span class="linenos">1007</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">+=</span> <span class="n">i</span>
+</span><span id="Tokenizer-1008"><a href="#Tokenizer-1008"><span class="linenos">1008</span></a>
+</span><span id="Tokenizer-1009"><a href="#Tokenizer-1009"><span class="linenos">1009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+=</span> <span class="n">i</span>
+</span><span id="Tokenizer-1010"><a href="#Tokenizer-1010"><span class="linenos">1010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
+</span><span id="Tokenizer-1011"><a href="#Tokenizer-1011"><span class="linenos">1011</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Tokenizer-1012"><a href="#Tokenizer-1012"><span class="linenos">1012</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="Tokenizer-1013"><a href="#Tokenizer-1013"><span class="linenos">1013</span></a>
+</span><span id="Tokenizer-1014"><a href="#Tokenizer-1014"><span class="linenos">1014</span></a> <span class="k">if</span> <span class="n">alnum</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="Tokenizer-1015"><a href="#Tokenizer-1015"><span class="linenos">1015</span></a> <span class="c1"># Here we use local variables instead of attributes for better performance</span>
+</span><span id="Tokenizer-1016"><a href="#Tokenizer-1016"><span class="linenos">1016</span></a> <span class="n">_col</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span>
+</span><span id="Tokenizer-1017"><a href="#Tokenizer-1017"><span class="linenos">1017</span></a> <span class="n">_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="Tokenizer-1018"><a href="#Tokenizer-1018"><span class="linenos">1018</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span>
+</span><span id="Tokenizer-1019"><a href="#Tokenizer-1019"><span class="linenos">1019</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="Tokenizer-1020"><a href="#Tokenizer-1020"><span class="linenos">1020</span></a>
+</span><span id="Tokenizer-1021"><a href="#Tokenizer-1021"><span class="linenos">1021</span></a> <span class="k">while</span> <span class="n">_peek</span><span class="o">.</span><span class="n">isalnum</span><span class="p">():</span>
+</span><span id="Tokenizer-1022"><a href="#Tokenizer-1022"><span class="linenos">1022</span></a> <span class="n">_col</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1023"><a href="#Tokenizer-1023"><span class="linenos">1023</span></a> <span class="n">_current</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1024"><a href="#Tokenizer-1024"><span class="linenos">1024</span></a> <span class="n">_end</span> <span class="o">=</span> <span class="n">_current</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
+</span><span id="Tokenizer-1025"><a href="#Tokenizer-1025"><span class="linenos">1025</span></a> <span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="Tokenizer-1026"><a href="#Tokenizer-1026"><span class="linenos">1026</span></a>
+</span><span id="Tokenizer-1027"><a href="#Tokenizer-1027"><span class="linenos">1027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="n">_col</span>
+</span><span id="Tokenizer-1028"><a href="#Tokenizer-1028"><span class="linenos">1028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="n">_current</span>
+</span><span id="Tokenizer-1029"><a href="#Tokenizer-1029"><span class="linenos">1029</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="n">_end</span>
+</span><span id="Tokenizer-1030"><a href="#Tokenizer-1030"><span class="linenos">1030</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="n">_peek</span>
+</span><span id="Tokenizer-1031"><a href="#Tokenizer-1031"><span class="linenos">1031</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</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">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Tokenizer-1032"><a href="#Tokenizer-1032"><span class="linenos">1032</span></a>
+</span><span id="Tokenizer-1033"><a href="#Tokenizer-1033"><span class="linenos">1033</span></a> <span class="nd">@property</span>
+</span><span id="Tokenizer-1034"><a href="#Tokenizer-1034"><span class="linenos">1034</span></a> <span class="k">def</span> <span class="nf">_text</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-1035"><a href="#Tokenizer-1035"><span class="linenos">1035</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span>
+</span><span id="Tokenizer-1036"><a href="#Tokenizer-1036"><span class="linenos">1036</span></a>
+</span><span id="Tokenizer-1037"><a href="#Tokenizer-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-1038"><a href="#Tokenizer-1038"><span class="linenos">1038</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
+</span><span id="Tokenizer-1039"><a href="#Tokenizer-1039"><span class="linenos">1039</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="Tokenizer-1040"><a href="#Tokenizer-1040"><span class="linenos">1040</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
+</span><span id="Tokenizer-1041"><a href="#Tokenizer-1041"><span class="linenos">1041</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-1042"><a href="#Tokenizer-1042"><span class="linenos">1042</span></a>
+</span><span id="Tokenizer-1043"><a href="#Tokenizer-1043"><span class="linenos">1043</span></a> <span class="k">def</span> <span class="nf">_add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1044"><a href="#Tokenizer-1044"><span class="linenos">1044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
+</span><span id="Tokenizer-1045"><a href="#Tokenizer-1045"><span class="linenos">1045</span></a>
+</span><span id="Tokenizer-1046"><a href="#Tokenizer-1046"><span class="linenos">1046</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
+</span><span id="Tokenizer-1047"><a href="#Tokenizer-1047"><span class="linenos">1047</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
+</span><span id="Tokenizer-1048"><a href="#Tokenizer-1048"><span class="linenos">1048</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-1049"><a href="#Tokenizer-1049"><span class="linenos">1049</span></a>
+</span><span id="Tokenizer-1050"><a href="#Tokenizer-1050"><span class="linenos">1050</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Tokenizer-1051"><a href="#Tokenizer-1051"><span class="linenos">1051</span></a> <span class="n">Token</span><span class="p">(</span>
+</span><span id="Tokenizer-1052"><a href="#Tokenizer-1052"><span class="linenos">1052</span></a> <span class="n">token_type</span><span class="p">,</span>
+</span><span id="Tokenizer-1053"><a href="#Tokenizer-1053"><span class="linenos">1053</span></a> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">text</span><span class="p">,</span>
+</span><span id="Tokenizer-1054"><a href="#Tokenizer-1054"><span class="linenos">1054</span></a> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
+</span><span id="Tokenizer-1055"><a href="#Tokenizer-1055"><span class="linenos">1055</span></a> <span class="n">col</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
+</span><span id="Tokenizer-1056"><a href="#Tokenizer-1056"><span class="linenos">1056</span></a> <span class="n">start</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="p">,</span>
+</span><span id="Tokenizer-1057"><a href="#Tokenizer-1057"><span class="linenos">1057</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="Tokenizer-1058"><a href="#Tokenizer-1058"><span class="linenos">1058</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
+</span><span id="Tokenizer-1059"><a href="#Tokenizer-1059"><span class="linenos">1059</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-1060"><a href="#Tokenizer-1060"><span class="linenos">1060</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-1061"><a href="#Tokenizer-1061"><span class="linenos">1061</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-1062"><a href="#Tokenizer-1062"><span class="linenos">1062</span></a>
+</span><span id="Tokenizer-1063"><a href="#Tokenizer-1063"><span class="linenos">1063</span></a> <span class="c1"># If we have either a semicolon or a begin token before the command&#39;s token, we&#39;ll parse</span>
+</span><span id="Tokenizer-1064"><a href="#Tokenizer-1064"><span class="linenos">1064</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
+</span><span id="Tokenizer-1065"><a href="#Tokenizer-1065"><span class="linenos">1065</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Tokenizer-1066"><a href="#Tokenizer-1066"><span class="linenos">1066</span></a> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMANDS</span>
+</span><span id="Tokenizer-1067"><a href="#Tokenizer-1067"><span class="linenos">1067</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">!=</span> <span class="s2">&quot;;&quot;</span>
+</span><span id="Tokenizer-1068"><a href="#Tokenizer-1068"><span class="linenos">1068</span></a> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMMAND_PREFIX_TOKENS</span><span class="p">)</span>
+</span><span id="Tokenizer-1069"><a href="#Tokenizer-1069"><span class="linenos">1069</span></a> <span class="p">):</span>
+</span><span id="Tokenizer-1070"><a href="#Tokenizer-1070"><span class="linenos">1070</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span>
+</span><span id="Tokenizer-1071"><a href="#Tokenizer-1071"><span class="linenos">1071</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">)</span>
+</span><span id="Tokenizer-1072"><a href="#Tokenizer-1072"><span class="linenos">1072</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1073"><a href="#Tokenizer-1073"><span class="linenos">1073</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[:</span><span class="n">tokens</span><span class="p">]</span>
+</span><span id="Tokenizer-1074"><a href="#Tokenizer-1074"><span class="linenos">1074</span></a> <span class="n">text</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">start</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Tokenizer-1075"><a href="#Tokenizer-1075"><span class="linenos">1075</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="Tokenizer-1076"><a href="#Tokenizer-1076"><span class="linenos">1076</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Tokenizer-1077"><a href="#Tokenizer-1077"><span class="linenos">1077</span></a>
+</span><span id="Tokenizer-1078"><a href="#Tokenizer-1078"><span class="linenos">1078</span></a> <span class="k">def</span> <span class="nf">_scan_keywords</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1079"><a href="#Tokenizer-1079"><span class="linenos">1079</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-1080"><a href="#Tokenizer-1080"><span class="linenos">1080</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-1081"><a href="#Tokenizer-1081"><span class="linenos">1081</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="Tokenizer-1082"><a href="#Tokenizer-1082"><span class="linenos">1082</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="Tokenizer-1083"><a href="#Tokenizer-1083"><span class="linenos">1083</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1084"><a href="#Tokenizer-1084"><span class="linenos">1084</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1085"><a href="#Tokenizer-1085"><span class="linenos">1085</span></a> <span class="n">trie</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_KEYWORD_TRIE</span>
+</span><span id="Tokenizer-1086"><a href="#Tokenizer-1086"><span class="linenos">1086</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
+</span><span id="Tokenizer-1087"><a href="#Tokenizer-1087"><span class="linenos">1087</span></a>
+</span><span id="Tokenizer-1088"><a href="#Tokenizer-1088"><span class="linenos">1088</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
+</span><span id="Tokenizer-1089"><a href="#Tokenizer-1089"><span class="linenos">1089</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
+</span><span id="Tokenizer-1090"><a href="#Tokenizer-1090"><span class="linenos">1090</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">PREFIX</span>
+</span><span id="Tokenizer-1091"><a href="#Tokenizer-1091"><span class="linenos">1091</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1092"><a href="#Tokenizer-1092"><span class="linenos">1092</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">char</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Tokenizer-1093"><a href="#Tokenizer-1093"><span class="linenos">1093</span></a>
-</span><span id="Tokenizer-1094"><a href="#Tokenizer-1094"><span class="linenos">1094</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="Tokenizer-1095"><a href="#Tokenizer-1095"><span class="linenos">1095</span></a> <span class="n">char</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">end</span><span class="p">]</span>
-</span><span id="Tokenizer-1096"><a href="#Tokenizer-1096"><span class="linenos">1096</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
-</span><span id="Tokenizer-1097"><a href="#Tokenizer-1097"><span class="linenos">1097</span></a> <span class="n">is_space</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="Tokenizer-1094"><a href="#Tokenizer-1094"><span class="linenos">1094</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="Tokenizer-1095"><a href="#Tokenizer-1095"><span class="linenos">1095</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1096"><a href="#Tokenizer-1096"><span class="linenos">1096</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="Tokenizer-1097"><a href="#Tokenizer-1097"><span class="linenos">1097</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
</span><span id="Tokenizer-1098"><a href="#Tokenizer-1098"><span class="linenos">1098</span></a>
-</span><span id="Tokenizer-1099"><a href="#Tokenizer-1099"><span class="linenos">1099</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_space</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">prev_space</span><span class="p">:</span>
-</span><span id="Tokenizer-1100"><a href="#Tokenizer-1100"><span class="linenos">1100</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
-</span><span id="Tokenizer-1101"><a href="#Tokenizer-1101"><span class="linenos">1101</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Tokenizer-1102"><a href="#Tokenizer-1102"><span class="linenos">1102</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
-</span><span id="Tokenizer-1103"><a href="#Tokenizer-1103"><span class="linenos">1103</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
-</span><span id="Tokenizer-1104"><a href="#Tokenizer-1104"><span class="linenos">1104</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1105"><a href="#Tokenizer-1105"><span class="linenos">1105</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1106"><a href="#Tokenizer-1106"><span class="linenos">1106</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Tokenizer-1107"><a href="#Tokenizer-1107"><span class="linenos">1107</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1108"><a href="#Tokenizer-1108"><span class="linenos">1108</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1109"><a href="#Tokenizer-1109"><span class="linenos">1109</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1110"><a href="#Tokenizer-1110"><span class="linenos">1110</span></a>
-</span><span id="Tokenizer-1111"><a href="#Tokenizer-1111"><span class="linenos">1111</span></a> <span class="k">if</span> <span class="n">word</span><span class="p">:</span>
-</span><span id="Tokenizer-1112"><a href="#Tokenizer-1112"><span class="linenos">1112</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
-</span><span id="Tokenizer-1113"><a href="#Tokenizer-1113"><span class="linenos">1113</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-1114"><a href="#Tokenizer-1114"><span class="linenos">1114</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_comment</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
-</span><span id="Tokenizer-1115"><a href="#Tokenizer-1115"><span class="linenos">1115</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-1116"><a href="#Tokenizer-1116"><span class="linenos">1116</span></a> <span class="k">if</span> <span class="n">prev_space</span> <span class="ow">or</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">char</span><span class="p">:</span>
-</span><span id="Tokenizer-1117"><a href="#Tokenizer-1117"><span class="linenos">1117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-1118"><a href="#Tokenizer-1118"><span class="linenos">1118</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">word</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Tokenizer-1119"><a href="#Tokenizer-1119"><span class="linenos">1119</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">[</span><span class="n">word</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="n">word</span><span class="p">)</span>
-</span><span id="Tokenizer-1120"><a href="#Tokenizer-1120"><span class="linenos">1120</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-1121"><a href="#Tokenizer-1121"><span class="linenos">1121</span></a>
-</span><span id="Tokenizer-1122"><a href="#Tokenizer-1122"><span class="linenos">1122</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
-</span><span id="Tokenizer-1123"><a href="#Tokenizer-1123"><span class="linenos">1123</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span>
-</span><span id="Tokenizer-1124"><a href="#Tokenizer-1124"><span class="linenos">1124</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-1125"><a href="#Tokenizer-1125"><span class="linenos">1125</span></a>
-</span><span id="Tokenizer-1126"><a href="#Tokenizer-1126"><span class="linenos">1126</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_var</span><span class="p">()</span>
-</span><span id="Tokenizer-1127"><a href="#Tokenizer-1127"><span class="linenos">1127</span></a>
-</span><span id="Tokenizer-1128"><a href="#Tokenizer-1128"><span class="linenos">1128</span></a> <span class="k">def</span> <span class="nf">_scan_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment_start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Tokenizer-1129"><a href="#Tokenizer-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="n">comment_start</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">:</span>
-</span><span id="Tokenizer-1130"><a href="#Tokenizer-1130"><span class="linenos">1130</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1131"><a href="#Tokenizer-1131"><span class="linenos">1131</span></a>
-</span><span id="Tokenizer-1132"><a href="#Tokenizer-1132"><span class="linenos">1132</span></a> <span class="n">comment_start_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
-</span><span id="Tokenizer-1133"><a href="#Tokenizer-1133"><span class="linenos">1133</span></a> <span class="n">comment_start_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_start</span><span class="p">)</span>
-</span><span id="Tokenizer-1134"><a href="#Tokenizer-1134"><span class="linenos">1134</span></a> <span class="n">comment_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">[</span><span class="n">comment_start</span><span class="p">]</span>
+</span><span id="Tokenizer-1099"><a href="#Tokenizer-1099"><span class="linenos">1099</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">size</span>
+</span><span id="Tokenizer-1100"><a href="#Tokenizer-1100"><span class="linenos">1100</span></a> <span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1101"><a href="#Tokenizer-1101"><span class="linenos">1101</span></a>
+</span><span id="Tokenizer-1102"><a href="#Tokenizer-1102"><span class="linenos">1102</span></a> <span class="k">if</span> <span class="n">end</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="Tokenizer-1103"><a href="#Tokenizer-1103"><span class="linenos">1103</span></a> <span class="n">char</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">end</span><span class="p">]</span>
+</span><span id="Tokenizer-1104"><a href="#Tokenizer-1104"><span class="linenos">1104</span></a> <span class="n">single_token</span> <span class="o">=</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span>
+</span><span id="Tokenizer-1105"><a href="#Tokenizer-1105"><span class="linenos">1105</span></a> <span class="n">is_space</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
+</span><span id="Tokenizer-1106"><a href="#Tokenizer-1106"><span class="linenos">1106</span></a>
+</span><span id="Tokenizer-1107"><a href="#Tokenizer-1107"><span class="linenos">1107</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_space</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">prev_space</span><span class="p">:</span>
+</span><span id="Tokenizer-1108"><a href="#Tokenizer-1108"><span class="linenos">1108</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
+</span><span id="Tokenizer-1109"><a href="#Tokenizer-1109"><span class="linenos">1109</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Tokenizer-1110"><a href="#Tokenizer-1110"><span class="linenos">1110</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
+</span><span id="Tokenizer-1111"><a href="#Tokenizer-1111"><span class="linenos">1111</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
+</span><span id="Tokenizer-1112"><a href="#Tokenizer-1112"><span class="linenos">1112</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1113"><a href="#Tokenizer-1113"><span class="linenos">1113</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1114"><a href="#Tokenizer-1114"><span class="linenos">1114</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Tokenizer-1115"><a href="#Tokenizer-1115"><span class="linenos">1115</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1116"><a href="#Tokenizer-1116"><span class="linenos">1116</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-1117"><a href="#Tokenizer-1117"><span class="linenos">1117</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1118"><a href="#Tokenizer-1118"><span class="linenos">1118</span></a>
+</span><span id="Tokenizer-1119"><a href="#Tokenizer-1119"><span class="linenos">1119</span></a> <span class="k">if</span> <span class="n">word</span><span class="p">:</span>
+</span><span id="Tokenizer-1120"><a href="#Tokenizer-1120"><span class="linenos">1120</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="Tokenizer-1121"><a href="#Tokenizer-1121"><span class="linenos">1121</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-1122"><a href="#Tokenizer-1122"><span class="linenos">1122</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_comment</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="Tokenizer-1123"><a href="#Tokenizer-1123"><span class="linenos">1123</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-1124"><a href="#Tokenizer-1124"><span class="linenos">1124</span></a> <span class="k">if</span> <span class="n">prev_space</span> <span class="ow">or</span> <span class="n">single_token</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">char</span><span class="p">:</span>
+</span><span id="Tokenizer-1125"><a href="#Tokenizer-1125"><span class="linenos">1125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-1126"><a href="#Tokenizer-1126"><span class="linenos">1126</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">word</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Tokenizer-1127"><a href="#Tokenizer-1127"><span class="linenos">1127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">[</span><span class="n">word</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="n">word</span><span class="p">)</span>
+</span><span id="Tokenizer-1128"><a href="#Tokenizer-1128"><span class="linenos">1128</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-1129"><a href="#Tokenizer-1129"><span class="linenos">1129</span></a>
+</span><span id="Tokenizer-1130"><a href="#Tokenizer-1130"><span class="linenos">1130</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
+</span><span id="Tokenizer-1131"><a href="#Tokenizer-1131"><span class="linenos">1131</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">],</span> <span class="n">text</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span><span class="p">)</span>
+</span><span id="Tokenizer-1132"><a href="#Tokenizer-1132"><span class="linenos">1132</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-1133"><a href="#Tokenizer-1133"><span class="linenos">1133</span></a>
+</span><span id="Tokenizer-1134"><a href="#Tokenizer-1134"><span class="linenos">1134</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_var</span><span class="p">()</span>
</span><span id="Tokenizer-1135"><a href="#Tokenizer-1135"><span class="linenos">1135</span></a>
-</span><span id="Tokenizer-1136"><a href="#Tokenizer-1136"><span class="linenos">1136</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="Tokenizer-1137"><a href="#Tokenizer-1137"><span class="linenos">1137</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
-</span><span id="Tokenizer-1138"><a href="#Tokenizer-1138"><span class="linenos">1138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_start_size</span><span class="p">)</span>
+</span><span id="Tokenizer-1136"><a href="#Tokenizer-1136"><span class="linenos">1136</span></a> <span class="k">def</span> <span class="nf">_scan_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comment_start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Tokenizer-1137"><a href="#Tokenizer-1137"><span class="linenos">1137</span></a> <span class="k">if</span> <span class="n">comment_start</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">:</span>
+</span><span id="Tokenizer-1138"><a href="#Tokenizer-1138"><span class="linenos">1138</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Tokenizer-1139"><a href="#Tokenizer-1139"><span class="linenos">1139</span></a>
-</span><span id="Tokenizer-1140"><a href="#Tokenizer-1140"><span class="linenos">1140</span></a> <span class="n">comment_end_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_end</span><span class="p">)</span>
-</span><span id="Tokenizer-1141"><a href="#Tokenizer-1141"><span class="linenos">1141</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">comment_end_size</span><span class="p">)</span> <span class="o">!=</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="Tokenizer-1142"><a href="#Tokenizer-1142"><span class="linenos">1142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1140"><a href="#Tokenizer-1140"><span class="linenos">1140</span></a> <span class="n">comment_start_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
+</span><span id="Tokenizer-1141"><a href="#Tokenizer-1141"><span class="linenos">1141</span></a> <span class="n">comment_start_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_start</span><span class="p">)</span>
+</span><span id="Tokenizer-1142"><a href="#Tokenizer-1142"><span class="linenos">1142</span></a> <span class="n">comment_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">[</span><span class="n">comment_start</span><span class="p">]</span>
</span><span id="Tokenizer-1143"><a href="#Tokenizer-1143"><span class="linenos">1143</span></a>
-</span><span id="Tokenizer-1144"><a href="#Tokenizer-1144"><span class="linenos">1144</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span> <span class="p">:</span> <span class="o">-</span><span class="n">comment_end_size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
-</span><span id="Tokenizer-1145"><a href="#Tokenizer-1145"><span class="linenos">1145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_end_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-1146"><a href="#Tokenizer-1146"><span class="linenos">1146</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1147"><a href="#Tokenizer-1147"><span class="linenos">1147</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
-</span><span id="Tokenizer-1148"><a href="#Tokenizer-1148"><span class="linenos">1148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-1149"><a href="#Tokenizer-1149"><span class="linenos">1149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span><span class="p">:])</span>
-</span><span id="Tokenizer-1150"><a href="#Tokenizer-1150"><span class="linenos">1150</span></a>
-</span><span id="Tokenizer-1151"><a href="#Tokenizer-1151"><span class="linenos">1151</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
-</span><span id="Tokenizer-1152"><a href="#Tokenizer-1152"><span class="linenos">1152</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
-</span><span id="Tokenizer-1153"><a href="#Tokenizer-1153"><span class="linenos">1153</span></a> <span class="k">if</span> <span class="n">comment_start_line</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span><span class="p">:</span>
-</span><span id="Tokenizer-1154"><a href="#Tokenizer-1154"><span class="linenos">1154</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
-</span><span id="Tokenizer-1155"><a href="#Tokenizer-1155"><span class="linenos">1155</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer-1156"><a href="#Tokenizer-1156"><span class="linenos">1156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
-</span><span id="Tokenizer-1157"><a href="#Tokenizer-1157"><span class="linenos">1157</span></a>
-</span><span id="Tokenizer-1158"><a href="#Tokenizer-1158"><span class="linenos">1158</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Tokenizer-1159"><a href="#Tokenizer-1159"><span class="linenos">1159</span></a>
-</span><span id="Tokenizer-1160"><a href="#Tokenizer-1160"><span class="linenos">1160</span></a> <span class="k">def</span> <span class="nf">_scan_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1161"><a href="#Tokenizer-1161"><span class="linenos">1161</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span><span class="p">:</span>
-</span><span id="Tokenizer-1162"><a href="#Tokenizer-1162"><span class="linenos">1162</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Tokenizer-1163"><a href="#Tokenizer-1163"><span class="linenos">1163</span></a> <span class="k">if</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;B&quot;</span><span class="p">:</span>
-</span><span id="Tokenizer-1164"><a href="#Tokenizer-1164"><span class="linenos">1164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="Tokenizer-1165"><a href="#Tokenizer-1165"><span class="linenos">1165</span></a> <span class="k">elif</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;X&quot;</span><span class="p">:</span>
-</span><span id="Tokenizer-1166"><a href="#Tokenizer-1166"><span class="linenos">1166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="Tokenizer-1144"><a href="#Tokenizer-1144"><span class="linenos">1144</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1145"><a href="#Tokenizer-1145"><span class="linenos">1145</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
+</span><span id="Tokenizer-1146"><a href="#Tokenizer-1146"><span class="linenos">1146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_start_size</span><span class="p">)</span>
+</span><span id="Tokenizer-1147"><a href="#Tokenizer-1147"><span class="linenos">1147</span></a>
+</span><span id="Tokenizer-1148"><a href="#Tokenizer-1148"><span class="linenos">1148</span></a> <span class="n">comment_end_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_end</span><span class="p">)</span>
+</span><span id="Tokenizer-1149"><a href="#Tokenizer-1149"><span class="linenos">1149</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">comment_end_size</span><span class="p">)</span> <span class="o">!=</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1150"><a href="#Tokenizer-1150"><span class="linenos">1150</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1151"><a href="#Tokenizer-1151"><span class="linenos">1151</span></a>
+</span><span id="Tokenizer-1152"><a href="#Tokenizer-1152"><span class="linenos">1152</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span> <span class="p">:</span> <span class="o">-</span><span class="n">comment_end_size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
+</span><span id="Tokenizer-1153"><a href="#Tokenizer-1153"><span class="linenos">1153</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">comment_end_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-1154"><a href="#Tokenizer-1154"><span class="linenos">1154</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1155"><a href="#Tokenizer-1155"><span class="linenos">1155</span></a> <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BREAK</span><span class="p">:</span>
+</span><span id="Tokenizer-1156"><a href="#Tokenizer-1156"><span class="linenos">1156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1157"><a href="#Tokenizer-1157"><span class="linenos">1157</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="p">[</span><span class="n">comment_start_size</span><span class="p">:])</span>
+</span><span id="Tokenizer-1158"><a href="#Tokenizer-1158"><span class="linenos">1158</span></a>
+</span><span id="Tokenizer-1159"><a href="#Tokenizer-1159"><span class="linenos">1159</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
+</span><span id="Tokenizer-1160"><a href="#Tokenizer-1160"><span class="linenos">1160</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
+</span><span id="Tokenizer-1161"><a href="#Tokenizer-1161"><span class="linenos">1161</span></a> <span class="k">if</span> <span class="n">comment_start_line</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span><span class="p">:</span>
+</span><span id="Tokenizer-1162"><a href="#Tokenizer-1162"><span class="linenos">1162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">)</span>
+</span><span id="Tokenizer-1163"><a href="#Tokenizer-1163"><span class="linenos">1163</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer-1164"><a href="#Tokenizer-1164"><span class="linenos">1164</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span>
+</span><span id="Tokenizer-1165"><a href="#Tokenizer-1165"><span class="linenos">1165</span></a>
+</span><span id="Tokenizer-1166"><a href="#Tokenizer-1166"><span class="linenos">1166</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Tokenizer-1167"><a href="#Tokenizer-1167"><span class="linenos">1167</span></a>
-</span><span id="Tokenizer-1168"><a href="#Tokenizer-1168"><span class="linenos">1168</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1169"><a href="#Tokenizer-1169"><span class="linenos">1169</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-1170"><a href="#Tokenizer-1170"><span class="linenos">1170</span></a>
-</span><span id="Tokenizer-1171"><a href="#Tokenizer-1171"><span class="linenos">1171</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1172"><a href="#Tokenizer-1172"><span class="linenos">1172</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
-</span><span id="Tokenizer-1173"><a href="#Tokenizer-1173"><span class="linenos">1173</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1174"><a href="#Tokenizer-1174"><span class="linenos">1174</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;.&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">decimal</span><span class="p">:</span>
-</span><span id="Tokenizer-1175"><a href="#Tokenizer-1175"><span class="linenos">1175</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-1176"><a href="#Tokenizer-1176"><span class="linenos">1176</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
-</span><span id="Tokenizer-1177"><a href="#Tokenizer-1177"><span class="linenos">1177</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Tokenizer-1178"><a href="#Tokenizer-1178"><span class="linenos">1178</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1179"><a href="#Tokenizer-1179"><span class="linenos">1179</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1180"><a href="#Tokenizer-1180"><span class="linenos">1180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="Tokenizer-1181"><a href="#Tokenizer-1181"><span class="linenos">1181</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</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 class="ow">and</span> <span class="n">scientific</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Tokenizer-1182"><a href="#Tokenizer-1182"><span class="linenos">1182</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1183"><a href="#Tokenizer-1183"><span class="linenos">1183</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1184"><a href="#Tokenizer-1184"><span class="linenos">1184</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;E&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scientific</span><span class="p">:</span>
-</span><span id="Tokenizer-1185"><a href="#Tokenizer-1185"><span class="linenos">1185</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1186"><a href="#Tokenizer-1186"><span class="linenos">1186</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1187"><a href="#Tokenizer-1187"><span class="linenos">1187</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isidentifier</span><span class="p">():</span>
-</span><span id="Tokenizer-1188"><a href="#Tokenizer-1188"><span class="linenos">1188</span></a> <span class="n">number_text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
-</span><span id="Tokenizer-1189"><a href="#Tokenizer-1189"><span class="linenos">1189</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1190"><a href="#Tokenizer-1190"><span class="linenos">1190</span></a>
-</span><span id="Tokenizer-1191"><a href="#Tokenizer-1191"><span class="linenos">1191</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
-</span><span id="Tokenizer-1192"><a href="#Tokenizer-1192"><span class="linenos">1192</span></a> <span class="n">literal</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="Tokenizer-1193"><a href="#Tokenizer-1193"><span class="linenos">1193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1194"><a href="#Tokenizer-1194"><span class="linenos">1194</span></a>
-</span><span id="Tokenizer-1195"><a href="#Tokenizer-1195"><span class="linenos">1195</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_LITERALS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">literal</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
-</span><span id="Tokenizer-1196"><a href="#Tokenizer-1196"><span class="linenos">1196</span></a>
-</span><span id="Tokenizer-1197"><a href="#Tokenizer-1197"><span class="linenos">1197</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="Tokenizer-1198"><a href="#Tokenizer-1198"><span class="linenos">1198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
-</span><span id="Tokenizer-1199"><a href="#Tokenizer-1199"><span class="linenos">1199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span> <span class="s2">&quot;::&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1200"><a href="#Tokenizer-1200"><span class="linenos">1200</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span>
-</span><span id="Tokenizer-1201"><a href="#Tokenizer-1201"><span class="linenos">1201</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span>
-</span><span id="Tokenizer-1202"><a href="#Tokenizer-1202"><span class="linenos">1202</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="Tokenizer-1203"><a href="#Tokenizer-1203"><span class="linenos">1203</span></a>
-</span><span id="Tokenizer-1204"><a href="#Tokenizer-1204"><span class="linenos">1204</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">literal</span><span class="p">))</span>
-</span><span id="Tokenizer-1205"><a href="#Tokenizer-1205"><span class="linenos">1205</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
-</span><span id="Tokenizer-1206"><a href="#Tokenizer-1206"><span class="linenos">1206</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1207"><a href="#Tokenizer-1207"><span class="linenos">1207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
-</span><span id="Tokenizer-1208"><a href="#Tokenizer-1208"><span class="linenos">1208</span></a>
-</span><span id="Tokenizer-1209"><a href="#Tokenizer-1209"><span class="linenos">1209</span></a> <span class="k">def</span> <span class="nf">_scan_bits</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1210"><a href="#Tokenizer-1210"><span class="linenos">1210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1211"><a href="#Tokenizer-1211"><span class="linenos">1211</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
-</span><span id="Tokenizer-1212"><a href="#Tokenizer-1212"><span class="linenos">1212</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1213"><a href="#Tokenizer-1213"><span class="linenos">1213</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
-</span><span id="Tokenizer-1214"><a href="#Tokenizer-1214"><span class="linenos">1214</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="Tokenizer-1215"><a href="#Tokenizer-1215"><span class="linenos">1215</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
-</span><span id="Tokenizer-1216"><a href="#Tokenizer-1216"><span class="linenos">1216</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="Tokenizer-1217"><a href="#Tokenizer-1217"><span class="linenos">1217</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
-</span><span id="Tokenizer-1218"><a href="#Tokenizer-1218"><span class="linenos">1218</span></a>
-</span><span id="Tokenizer-1219"><a href="#Tokenizer-1219"><span class="linenos">1219</span></a> <span class="k">def</span> <span class="nf">_scan_hex</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1220"><a href="#Tokenizer-1220"><span class="linenos">1220</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1221"><a href="#Tokenizer-1221"><span class="linenos">1221</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
-</span><span id="Tokenizer-1222"><a href="#Tokenizer-1222"><span class="linenos">1222</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1223"><a href="#Tokenizer-1223"><span class="linenos">1223</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
-</span><span id="Tokenizer-1224"><a href="#Tokenizer-1224"><span class="linenos">1224</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
-</span><span id="Tokenizer-1225"><a href="#Tokenizer-1225"><span class="linenos">1225</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
-</span><span id="Tokenizer-1226"><a href="#Tokenizer-1226"><span class="linenos">1226</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="Tokenizer-1227"><a href="#Tokenizer-1227"><span class="linenos">1227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
-</span><span id="Tokenizer-1228"><a href="#Tokenizer-1228"><span class="linenos">1228</span></a>
-</span><span id="Tokenizer-1229"><a href="#Tokenizer-1229"><span class="linenos">1229</span></a> <span class="k">def</span> <span class="nf">_extract_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-1230"><a href="#Tokenizer-1230"><span class="linenos">1230</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1231"><a href="#Tokenizer-1231"><span class="linenos">1231</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Tokenizer-1232"><a href="#Tokenizer-1232"><span class="linenos">1232</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
-</span><span id="Tokenizer-1233"><a href="#Tokenizer-1233"><span class="linenos">1233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-1234"><a href="#Tokenizer-1234"><span class="linenos">1234</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1235"><a href="#Tokenizer-1235"><span class="linenos">1235</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1168"><a href="#Tokenizer-1168"><span class="linenos">1168</span></a> <span class="k">def</span> <span class="nf">_scan_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1169"><a href="#Tokenizer-1169"><span class="linenos">1169</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span><span class="p">:</span>
+</span><span id="Tokenizer-1170"><a href="#Tokenizer-1170"><span class="linenos">1170</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Tokenizer-1171"><a href="#Tokenizer-1171"><span class="linenos">1171</span></a> <span class="k">if</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;B&quot;</span><span class="p">:</span>
+</span><span id="Tokenizer-1172"><a href="#Tokenizer-1172"><span class="linenos">1172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_bits</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">BIT_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="Tokenizer-1173"><a href="#Tokenizer-1173"><span class="linenos">1173</span></a> <span class="k">elif</span> <span class="n">peek</span> <span class="o">==</span> <span class="s2">&quot;X&quot;</span><span class="p">:</span>
+</span><span id="Tokenizer-1174"><a href="#Tokenizer-1174"><span class="linenos">1174</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_hex</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEX_STRINGS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="Tokenizer-1175"><a href="#Tokenizer-1175"><span class="linenos">1175</span></a>
+</span><span id="Tokenizer-1176"><a href="#Tokenizer-1176"><span class="linenos">1176</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1177"><a href="#Tokenizer-1177"><span class="linenos">1177</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-1178"><a href="#Tokenizer-1178"><span class="linenos">1178</span></a>
+</span><span id="Tokenizer-1179"><a href="#Tokenizer-1179"><span class="linenos">1179</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1180"><a href="#Tokenizer-1180"><span class="linenos">1180</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
+</span><span id="Tokenizer-1181"><a href="#Tokenizer-1181"><span class="linenos">1181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1182"><a href="#Tokenizer-1182"><span class="linenos">1182</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="s2">&quot;.&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">decimal</span><span class="p">:</span>
+</span><span id="Tokenizer-1183"><a href="#Tokenizer-1183"><span class="linenos">1183</span></a> <span class="n">after</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-1184"><a href="#Tokenizer-1184"><span class="linenos">1184</span></a> <span class="k">if</span> <span class="n">after</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">after</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
+</span><span id="Tokenizer-1185"><a href="#Tokenizer-1185"><span class="linenos">1185</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Tokenizer-1186"><a href="#Tokenizer-1186"><span class="linenos">1186</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1187"><a href="#Tokenizer-1187"><span class="linenos">1187</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1188"><a href="#Tokenizer-1188"><span class="linenos">1188</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="Tokenizer-1189"><a href="#Tokenizer-1189"><span class="linenos">1189</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</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 class="ow">and</span> <span class="n">scientific</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Tokenizer-1190"><a href="#Tokenizer-1190"><span class="linenos">1190</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1191"><a href="#Tokenizer-1191"><span class="linenos">1191</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1192"><a href="#Tokenizer-1192"><span class="linenos">1192</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;E&quot;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scientific</span><span class="p">:</span>
+</span><span id="Tokenizer-1193"><a href="#Tokenizer-1193"><span class="linenos">1193</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1194"><a href="#Tokenizer-1194"><span class="linenos">1194</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1195"><a href="#Tokenizer-1195"><span class="linenos">1195</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isidentifier</span><span class="p">():</span>
+</span><span id="Tokenizer-1196"><a href="#Tokenizer-1196"><span class="linenos">1196</span></a> <span class="n">number_text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="Tokenizer-1197"><a href="#Tokenizer-1197"><span class="linenos">1197</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-1198"><a href="#Tokenizer-1198"><span class="linenos">1198</span></a>
+</span><span id="Tokenizer-1199"><a href="#Tokenizer-1199"><span class="linenos">1199</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
+</span><span id="Tokenizer-1200"><a href="#Tokenizer-1200"><span class="linenos">1200</span></a> <span class="n">literal</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="Tokenizer-1201"><a href="#Tokenizer-1201"><span class="linenos">1201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1202"><a href="#Tokenizer-1202"><span class="linenos">1202</span></a>
+</span><span id="Tokenizer-1203"><a href="#Tokenizer-1203"><span class="linenos">1203</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_LITERALS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">literal</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
+</span><span id="Tokenizer-1204"><a href="#Tokenizer-1204"><span class="linenos">1204</span></a>
+</span><span id="Tokenizer-1205"><a href="#Tokenizer-1205"><span class="linenos">1205</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="Tokenizer-1206"><a href="#Tokenizer-1206"><span class="linenos">1206</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
+</span><span id="Tokenizer-1207"><a href="#Tokenizer-1207"><span class="linenos">1207</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span> <span class="s2">&quot;::&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1208"><a href="#Tokenizer-1208"><span class="linenos">1208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">literal</span><span class="p">)</span>
+</span><span id="Tokenizer-1209"><a href="#Tokenizer-1209"><span class="linenos">1209</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">:</span>
+</span><span id="Tokenizer-1210"><a href="#Tokenizer-1210"><span class="linenos">1210</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="Tokenizer-1211"><a href="#Tokenizer-1211"><span class="linenos">1211</span></a>
+</span><span id="Tokenizer-1212"><a href="#Tokenizer-1212"><span class="linenos">1212</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">literal</span><span class="p">))</span>
+</span><span id="Tokenizer-1213"><a href="#Tokenizer-1213"><span class="linenos">1213</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">number_text</span><span class="p">)</span>
+</span><span id="Tokenizer-1214"><a href="#Tokenizer-1214"><span class="linenos">1214</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1215"><a href="#Tokenizer-1215"><span class="linenos">1215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+</span><span id="Tokenizer-1216"><a href="#Tokenizer-1216"><span class="linenos">1216</span></a>
+</span><span id="Tokenizer-1217"><a href="#Tokenizer-1217"><span class="linenos">1217</span></a> <span class="k">def</span> <span class="nf">_scan_bits</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1218"><a href="#Tokenizer-1218"><span class="linenos">1218</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1219"><a href="#Tokenizer-1219"><span class="linenos">1219</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
+</span><span id="Tokenizer-1220"><a href="#Tokenizer-1220"><span class="linenos">1220</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1221"><a href="#Tokenizer-1221"><span class="linenos">1221</span></a> <span class="c1"># If `value` can&#39;t be converted to a binary, fallback to tokenizing it as an identifier</span>
+</span><span id="Tokenizer-1222"><a href="#Tokenizer-1222"><span class="linenos">1222</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="Tokenizer-1223"><a href="#Tokenizer-1223"><span class="linenos">1223</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0b</span>
+</span><span id="Tokenizer-1224"><a href="#Tokenizer-1224"><span class="linenos">1224</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="Tokenizer-1225"><a href="#Tokenizer-1225"><span class="linenos">1225</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
+</span><span id="Tokenizer-1226"><a href="#Tokenizer-1226"><span class="linenos">1226</span></a>
+</span><span id="Tokenizer-1227"><a href="#Tokenizer-1227"><span class="linenos">1227</span></a> <span class="k">def</span> <span class="nf">_scan_hex</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1228"><a href="#Tokenizer-1228"><span class="linenos">1228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1229"><a href="#Tokenizer-1229"><span class="linenos">1229</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_value</span><span class="p">()</span>
+</span><span id="Tokenizer-1230"><a href="#Tokenizer-1230"><span class="linenos">1230</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1231"><a href="#Tokenizer-1231"><span class="linenos">1231</span></a> <span class="c1"># If `value` can&#39;t be converted to a hex, fallback to tokenizing it as an identifier</span>
+</span><span id="Tokenizer-1232"><a href="#Tokenizer-1232"><span class="linenos">1232</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
+</span><span id="Tokenizer-1233"><a href="#Tokenizer-1233"><span class="linenos">1233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">,</span> <span class="n">value</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="c1"># Drop the 0x</span>
+</span><span id="Tokenizer-1234"><a href="#Tokenizer-1234"><span class="linenos">1234</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="Tokenizer-1235"><a href="#Tokenizer-1235"><span class="linenos">1235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">)</span>
</span><span id="Tokenizer-1236"><a href="#Tokenizer-1236"><span class="linenos">1236</span></a>
-</span><span id="Tokenizer-1237"><a href="#Tokenizer-1237"><span class="linenos">1237</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
-</span><span id="Tokenizer-1238"><a href="#Tokenizer-1238"><span class="linenos">1238</span></a>
-</span><span id="Tokenizer-1239"><a href="#Tokenizer-1239"><span class="linenos">1239</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="Tokenizer-1240"><a href="#Tokenizer-1240"><span class="linenos">1240</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-1241"><a href="#Tokenizer-1241"><span class="linenos">1241</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
-</span><span id="Tokenizer-1242"><a href="#Tokenizer-1242"><span class="linenos">1242</span></a>
-</span><span id="Tokenizer-1243"><a href="#Tokenizer-1243"><span class="linenos">1243</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
-</span><span id="Tokenizer-1244"><a href="#Tokenizer-1244"><span class="linenos">1244</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="Tokenizer-1245"><a href="#Tokenizer-1245"><span class="linenos">1245</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
-</span><span id="Tokenizer-1246"><a href="#Tokenizer-1246"><span class="linenos">1246</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
-</span><span id="Tokenizer-1247"><a href="#Tokenizer-1247"><span class="linenos">1247</span></a>
-</span><span id="Tokenizer-1248"><a href="#Tokenizer-1248"><span class="linenos">1248</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
-</span><span id="Tokenizer-1249"><a href="#Tokenizer-1249"><span class="linenos">1249</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
-</span><span id="Tokenizer-1250"><a href="#Tokenizer-1250"><span class="linenos">1250</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
-</span><span id="Tokenizer-1251"><a href="#Tokenizer-1251"><span class="linenos">1251</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="Tokenizer-1252"><a href="#Tokenizer-1252"><span class="linenos">1252</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">:</span>
-</span><span id="Tokenizer-1253"><a href="#Tokenizer-1253"><span class="linenos">1253</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1254"><a href="#Tokenizer-1254"><span class="linenos">1254</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="n">end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
-</span><span id="Tokenizer-1255"><a href="#Tokenizer-1255"><span class="linenos">1255</span></a> <span class="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Tokenizer-1256"><a href="#Tokenizer-1256"><span class="linenos">1256</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1257"><a href="#Tokenizer-1257"><span class="linenos">1257</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1258"><a href="#Tokenizer-1258"><span class="linenos">1258</span></a>
-</span><span id="Tokenizer-1259"><a href="#Tokenizer-1259"><span class="linenos">1259</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
-</span><span id="Tokenizer-1260"><a href="#Tokenizer-1260"><span class="linenos">1260</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
-</span><span id="Tokenizer-1261"><a href="#Tokenizer-1261"><span class="linenos">1261</span></a>
-</span><span id="Tokenizer-1262"><a href="#Tokenizer-1262"><span class="linenos">1262</span></a> <span class="k">if</span> <span class="n">base</span><span class="p">:</span>
-</span><span id="Tokenizer-1263"><a href="#Tokenizer-1263"><span class="linenos">1263</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1264"><a href="#Tokenizer-1264"><span class="linenos">1264</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
-</span><span id="Tokenizer-1265"><a href="#Tokenizer-1265"><span class="linenos">1265</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
-</span><span id="Tokenizer-1266"><a href="#Tokenizer-1266"><span class="linenos">1266</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
-</span><span id="Tokenizer-1267"><a href="#Tokenizer-1267"><span class="linenos">1267</span></a> <span class="sa">f</span><span class="s2">&quot;Numeric string contains invalid characters from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Tokenizer-1268"><a href="#Tokenizer-1268"><span class="linenos">1268</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1269"><a href="#Tokenizer-1269"><span class="linenos">1269</span></a>
-</span><span id="Tokenizer-1270"><a href="#Tokenizer-1270"><span class="linenos">1270</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="Tokenizer-1271"><a href="#Tokenizer-1271"><span class="linenos">1271</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Tokenizer-1237"><a href="#Tokenizer-1237"><span class="linenos">1237</span></a> <span class="k">def</span> <span class="nf">_extract_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-1238"><a href="#Tokenizer-1238"><span class="linenos">1238</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1239"><a href="#Tokenizer-1239"><span class="linenos">1239</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Tokenizer-1240"><a href="#Tokenizer-1240"><span class="linenos">1240</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">:</span>
+</span><span id="Tokenizer-1241"><a href="#Tokenizer-1241"><span class="linenos">1241</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1242"><a href="#Tokenizer-1242"><span class="linenos">1242</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1243"><a href="#Tokenizer-1243"><span class="linenos">1243</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1244"><a href="#Tokenizer-1244"><span class="linenos">1244</span></a>
+</span><span id="Tokenizer-1245"><a href="#Tokenizer-1245"><span class="linenos">1245</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</span>
+</span><span id="Tokenizer-1246"><a href="#Tokenizer-1246"><span class="linenos">1246</span></a>
+</span><span id="Tokenizer-1247"><a href="#Tokenizer-1247"><span class="linenos">1247</span></a> <span class="k">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="Tokenizer-1248"><a href="#Tokenizer-1248"><span class="linenos">1248</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-1249"><a href="#Tokenizer-1249"><span class="linenos">1249</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="Tokenizer-1250"><a href="#Tokenizer-1250"><span class="linenos">1250</span></a>
+</span><span id="Tokenizer-1251"><a href="#Tokenizer-1251"><span class="linenos">1251</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">:</span>
+</span><span id="Tokenizer-1252"><a href="#Tokenizer-1252"><span class="linenos">1252</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="Tokenizer-1253"><a href="#Tokenizer-1253"><span class="linenos">1253</span></a> <span class="k">elif</span> <span class="n">start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">:</span>
+</span><span id="Tokenizer-1254"><a href="#Tokenizer-1254"><span class="linenos">1254</span></a> <span class="n">end</span><span class="p">,</span> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_FORMAT_STRINGS</span><span class="p">[</span><span class="n">start</span><span class="p">]</span>
+</span><span id="Tokenizer-1255"><a href="#Tokenizer-1255"><span class="linenos">1255</span></a>
+</span><span id="Tokenizer-1256"><a href="#Tokenizer-1256"><span class="linenos">1256</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span>
+</span><span id="Tokenizer-1257"><a href="#Tokenizer-1257"><span class="linenos">1257</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
+</span><span id="Tokenizer-1258"><a href="#Tokenizer-1258"><span class="linenos">1258</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span>
+</span><span id="Tokenizer-1259"><a href="#Tokenizer-1259"><span class="linenos">1259</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="Tokenizer-1260"><a href="#Tokenizer-1260"><span class="linenos">1260</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">:</span>
+</span><span id="Tokenizer-1261"><a href="#Tokenizer-1261"><span class="linenos">1261</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Tokenizer-1262"><a href="#Tokenizer-1262"><span class="linenos">1262</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">HEREDOC_TAG_IS_IDENTIFIER</span>
+</span><span id="Tokenizer-1263"><a href="#Tokenizer-1263"><span class="linenos">1263</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">isidentifier</span><span class="p">()</span>
+</span><span id="Tokenizer-1264"><a href="#Tokenizer-1264"><span class="linenos">1264</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">end</span>
+</span><span id="Tokenizer-1265"><a href="#Tokenizer-1265"><span class="linenos">1265</span></a> <span class="p">):</span>
+</span><span id="Tokenizer-1266"><a href="#Tokenizer-1266"><span class="linenos">1266</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">HEREDOC_STRING_ALTERNATIVE</span> <span class="o">!=</span> <span class="n">token_type</span><span class="o">.</span><span class="n">VAR</span><span class="p">:</span>
+</span><span id="Tokenizer-1267"><a href="#Tokenizer-1267"><span class="linenos">1267</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">HEREDOC_STRING_ALTERNATIVE</span><span class="p">)</span>
+</span><span id="Tokenizer-1268"><a href="#Tokenizer-1268"><span class="linenos">1268</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1269"><a href="#Tokenizer-1269"><span class="linenos">1269</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_var</span><span class="p">()</span>
+</span><span id="Tokenizer-1270"><a href="#Tokenizer-1270"><span class="linenos">1270</span></a>
+</span><span id="Tokenizer-1271"><a href="#Tokenizer-1271"><span class="linenos">1271</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Tokenizer-1272"><a href="#Tokenizer-1272"><span class="linenos">1272</span></a>
-</span><span id="Tokenizer-1273"><a href="#Tokenizer-1273"><span class="linenos">1273</span></a> <span class="k">def</span> <span class="nf">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">identifier_end</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1274"><a href="#Tokenizer-1274"><span class="linenos">1274</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1275"><a href="#Tokenizer-1275"><span class="linenos">1275</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
-</span><span id="Tokenizer-1276"><a href="#Tokenizer-1276"><span class="linenos">1276</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
-</span><span id="Tokenizer-1277"><a href="#Tokenizer-1277"><span class="linenos">1277</span></a>
-</span><span id="Tokenizer-1278"><a href="#Tokenizer-1278"><span class="linenos">1278</span></a> <span class="k">def</span> <span class="nf">_scan_var</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1279"><a href="#Tokenizer-1279"><span class="linenos">1279</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1280"><a href="#Tokenizer-1280"><span class="linenos">1280</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="Tokenizer-1281"><a href="#Tokenizer-1281"><span class="linenos">1281</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_SINGLE_TOKENS</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">):</span>
-</span><span id="Tokenizer-1282"><a href="#Tokenizer-1282"><span class="linenos">1282</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-1283"><a href="#Tokenizer-1283"><span class="linenos">1283</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1284"><a href="#Tokenizer-1284"><span class="linenos">1284</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1285"><a href="#Tokenizer-1285"><span class="linenos">1285</span></a>
-</span><span id="Tokenizer-1286"><a href="#Tokenizer-1286"><span class="linenos">1286</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
-</span><span id="Tokenizer-1287"><a href="#Tokenizer-1287"><span class="linenos">1287</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
-</span><span id="Tokenizer-1288"><a href="#Tokenizer-1288"><span class="linenos">1288</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
-</span><span id="Tokenizer-1289"><a href="#Tokenizer-1289"><span class="linenos">1289</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="Tokenizer-1290"><a href="#Tokenizer-1290"><span class="linenos">1290</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1291"><a href="#Tokenizer-1291"><span class="linenos">1291</span></a>
-</span><span id="Tokenizer-1292"><a href="#Tokenizer-1292"><span class="linenos">1292</span></a> <span class="k">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-1293"><a href="#Tokenizer-1293"><span class="linenos">1293</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1294"><a href="#Tokenizer-1294"><span class="linenos">1294</span></a> <span class="n">delim_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">delimiter</span><span class="p">)</span>
-</span><span id="Tokenizer-1295"><a href="#Tokenizer-1295"><span class="linenos">1295</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
-</span><span id="Tokenizer-1296"><a href="#Tokenizer-1296"><span class="linenos">1296</span></a>
-</span><span id="Tokenizer-1297"><a href="#Tokenizer-1297"><span class="linenos">1297</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1298"><a href="#Tokenizer-1298"><span class="linenos">1298</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Tokenizer-1299"><a href="#Tokenizer-1299"><span class="linenos">1299</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="n">escapes</span>
-</span><span id="Tokenizer-1300"><a href="#Tokenizer-1300"><span class="linenos">1300</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">)</span>
-</span><span id="Tokenizer-1301"><a href="#Tokenizer-1301"><span class="linenos">1301</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
-</span><span id="Tokenizer-1302"><a href="#Tokenizer-1302"><span class="linenos">1302</span></a> <span class="p">):</span>
-</span><span id="Tokenizer-1303"><a href="#Tokenizer-1303"><span class="linenos">1303</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
-</span><span id="Tokenizer-1304"><a href="#Tokenizer-1304"><span class="linenos">1304</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="Tokenizer-1305"><a href="#Tokenizer-1305"><span class="linenos">1305</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1306"><a href="#Tokenizer-1306"><span class="linenos">1306</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="Tokenizer-1307"><a href="#Tokenizer-1307"><span class="linenos">1307</span></a>
-</span><span id="Tokenizer-1308"><a href="#Tokenizer-1308"><span class="linenos">1308</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="Tokenizer-1309"><a href="#Tokenizer-1309"><span class="linenos">1309</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Tokenizer-1310"><a href="#Tokenizer-1310"><span class="linenos">1310</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1311"><a href="#Tokenizer-1311"><span class="linenos">1311</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1312"><a href="#Tokenizer-1312"><span class="linenos">1312</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1313"><a href="#Tokenizer-1313"><span class="linenos">1313</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">delim_size</span><span class="p">)</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
-</span><span id="Tokenizer-1314"><a href="#Tokenizer-1314"><span class="linenos">1314</span></a> <span class="k">if</span> <span class="n">delim_size</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Tokenizer-1315"><a href="#Tokenizer-1315"><span class="linenos">1315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">delim_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer-1316"><a href="#Tokenizer-1316"><span class="linenos">1316</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1317"><a href="#Tokenizer-1317"><span class="linenos">1317</span></a>
-</span><span id="Tokenizer-1318"><a href="#Tokenizer-1318"><span class="linenos">1318</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
-</span><span id="Tokenizer-1319"><a href="#Tokenizer-1319"><span class="linenos">1319</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1320"><a href="#Tokenizer-1320"><span class="linenos">1320</span></a>
-</span><span id="Tokenizer-1321"><a href="#Tokenizer-1321"><span class="linenos">1321</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Tokenizer-1322"><a href="#Tokenizer-1322"><span class="linenos">1322</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span>
-</span><span id="Tokenizer-1323"><a href="#Tokenizer-1323"><span class="linenos">1323</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
-</span><span id="Tokenizer-1324"><a href="#Tokenizer-1324"><span class="linenos">1324</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ESCAPES</span>
-</span><span id="Tokenizer-1325"><a href="#Tokenizer-1325"><span class="linenos">1325</span></a> <span class="p">):</span>
-</span><span id="Tokenizer-1326"><a href="#Tokenizer-1326"><span class="linenos">1326</span></a> <span class="n">escaped_sequence</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
-</span><span id="Tokenizer-1327"><a href="#Tokenizer-1327"><span class="linenos">1327</span></a> <span class="k">if</span> <span class="n">escaped_sequence</span><span class="p">:</span>
-</span><span id="Tokenizer-1328"><a href="#Tokenizer-1328"><span class="linenos">1328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Tokenizer-1329"><a href="#Tokenizer-1329"><span class="linenos">1329</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">escaped_sequence</span>
-</span><span id="Tokenizer-1330"><a href="#Tokenizer-1330"><span class="linenos">1330</span></a> <span class="k">continue</span>
-</span><span id="Tokenizer-1331"><a href="#Tokenizer-1331"><span class="linenos">1331</span></a>
-</span><span id="Tokenizer-1332"><a href="#Tokenizer-1332"><span class="linenos">1332</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Tokenizer-1333"><a href="#Tokenizer-1333"><span class="linenos">1333</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Tokenizer-1334"><a href="#Tokenizer-1334"><span class="linenos">1334</span></a> <span class="n">text</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">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Tokenizer-1335"><a href="#Tokenizer-1335"><span class="linenos">1335</span></a>
-</span><span id="Tokenizer-1336"><a href="#Tokenizer-1336"><span class="linenos">1336</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Tokenizer-1273"><a href="#Tokenizer-1273"><span class="linenos">1273</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1274"><a href="#Tokenizer-1274"><span class="linenos">1274</span></a> <span class="n">tag</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="n">end</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
+</span><span id="Tokenizer-1275"><a href="#Tokenizer-1275"><span class="linenos">1275</span></a> <span class="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">start</span><span class="si">}{</span><span class="n">tag</span><span class="si">}{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Tokenizer-1276"><a href="#Tokenizer-1276"><span class="linenos">1276</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1277"><a href="#Tokenizer-1277"><span class="linenos">1277</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1278"><a href="#Tokenizer-1278"><span class="linenos">1278</span></a>
+</span><span id="Tokenizer-1279"><a href="#Tokenizer-1279"><span class="linenos">1279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="p">))</span>
+</span><span id="Tokenizer-1280"><a href="#Tokenizer-1280"><span class="linenos">1280</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
+</span><span id="Tokenizer-1281"><a href="#Tokenizer-1281"><span class="linenos">1281</span></a>
+</span><span id="Tokenizer-1282"><a href="#Tokenizer-1282"><span class="linenos">1282</span></a> <span class="k">if</span> <span class="n">base</span><span class="p">:</span>
+</span><span id="Tokenizer-1283"><a href="#Tokenizer-1283"><span class="linenos">1283</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1284"><a href="#Tokenizer-1284"><span class="linenos">1284</span></a> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">base</span><span class="p">)</span>
+</span><span id="Tokenizer-1285"><a href="#Tokenizer-1285"><span class="linenos">1285</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
+</span><span id="Tokenizer-1286"><a href="#Tokenizer-1286"><span class="linenos">1286</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span>
+</span><span id="Tokenizer-1287"><a href="#Tokenizer-1287"><span class="linenos">1287</span></a> <span class="sa">f</span><span class="s2">&quot;Numeric string contains invalid characters from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Tokenizer-1288"><a href="#Tokenizer-1288"><span class="linenos">1288</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-1289"><a href="#Tokenizer-1289"><span class="linenos">1289</span></a>
+</span><span id="Tokenizer-1290"><a href="#Tokenizer-1290"><span class="linenos">1290</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">token_type</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Tokenizer-1291"><a href="#Tokenizer-1291"><span class="linenos">1291</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Tokenizer-1292"><a href="#Tokenizer-1292"><span class="linenos">1292</span></a>
+</span><span id="Tokenizer-1293"><a href="#Tokenizer-1293"><span class="linenos">1293</span></a> <span class="k">def</span> <span class="nf">_scan_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">identifier_end</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1294"><a href="#Tokenizer-1294"><span class="linenos">1294</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1295"><a href="#Tokenizer-1295"><span class="linenos">1295</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_string</span><span class="p">(</span><span class="n">identifier_end</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span><span class="p">)</span>
+</span><span id="Tokenizer-1296"><a href="#Tokenizer-1296"><span class="linenos">1296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+</span><span id="Tokenizer-1297"><a href="#Tokenizer-1297"><span class="linenos">1297</span></a>
+</span><span id="Tokenizer-1298"><a href="#Tokenizer-1298"><span class="linenos">1298</span></a> <span class="k">def</span> <span class="nf">_scan_var</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1299"><a href="#Tokenizer-1299"><span class="linenos">1299</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1300"><a href="#Tokenizer-1300"><span class="linenos">1300</span></a> <span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="Tokenizer-1301"><a href="#Tokenizer-1301"><span class="linenos">1301</span></a> <span class="k">if</span> <span class="n">char</span> <span class="ow">and</span> <span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_SINGLE_TOKENS</span> <span class="ow">or</span> <span class="n">char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">):</span>
+</span><span id="Tokenizer-1302"><a href="#Tokenizer-1302"><span class="linenos">1302</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1303"><a href="#Tokenizer-1303"><span class="linenos">1303</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1304"><a href="#Tokenizer-1304"><span class="linenos">1304</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1305"><a href="#Tokenizer-1305"><span class="linenos">1305</span></a>
+</span><span id="Tokenizer-1306"><a href="#Tokenizer-1306"><span class="linenos">1306</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add</span><span class="p">(</span>
+</span><span id="Tokenizer-1307"><a href="#Tokenizer-1307"><span class="linenos">1307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
+</span><span id="Tokenizer-1308"><a href="#Tokenizer-1308"><span class="linenos">1308</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span>
+</span><span id="Tokenizer-1309"><a href="#Tokenizer-1309"><span class="linenos">1309</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="Tokenizer-1310"><a href="#Tokenizer-1310"><span class="linenos">1310</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-1311"><a href="#Tokenizer-1311"><span class="linenos">1311</span></a>
+</span><span id="Tokenizer-1312"><a href="#Tokenizer-1312"><span class="linenos">1312</span></a> <span class="k">def</span> <span class="nf">_extract_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">delimiter</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">escapes</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-1313"><a href="#Tokenizer-1313"><span class="linenos">1313</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-1314"><a href="#Tokenizer-1314"><span class="linenos">1314</span></a> <span class="n">delim_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">delimiter</span><span class="p">)</span>
+</span><span id="Tokenizer-1315"><a href="#Tokenizer-1315"><span class="linenos">1315</span></a> <span class="n">escapes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="k">if</span> <span class="n">escapes</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">escapes</span>
+</span><span id="Tokenizer-1316"><a href="#Tokenizer-1316"><span class="linenos">1316</span></a>
+</span><span id="Tokenizer-1317"><a href="#Tokenizer-1317"><span class="linenos">1317</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1318"><a href="#Tokenizer-1318"><span class="linenos">1318</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Tokenizer-1319"><a href="#Tokenizer-1319"><span class="linenos">1319</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="n">escapes</span>
+</span><span id="Tokenizer-1320"><a href="#Tokenizer-1320"><span class="linenos">1320</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="ow">in</span> <span class="n">escapes</span><span class="p">)</span>
+</span><span id="Tokenizer-1321"><a href="#Tokenizer-1321"><span class="linenos">1321</span></a> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
+</span><span id="Tokenizer-1322"><a href="#Tokenizer-1322"><span class="linenos">1322</span></a> <span class="p">):</span>
+</span><span id="Tokenizer-1323"><a href="#Tokenizer-1323"><span class="linenos">1323</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
+</span><span id="Tokenizer-1324"><a href="#Tokenizer-1324"><span class="linenos">1324</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="Tokenizer-1325"><a href="#Tokenizer-1325"><span class="linenos">1325</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1326"><a href="#Tokenizer-1326"><span class="linenos">1326</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="Tokenizer-1327"><a href="#Tokenizer-1327"><span class="linenos">1327</span></a>
+</span><span id="Tokenizer-1328"><a href="#Tokenizer-1328"><span class="linenos">1328</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="Tokenizer-1329"><a href="#Tokenizer-1329"><span class="linenos">1329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Tokenizer-1330"><a href="#Tokenizer-1330"><span class="linenos">1330</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1331"><a href="#Tokenizer-1331"><span class="linenos">1331</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1332"><a href="#Tokenizer-1332"><span class="linenos">1332</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1333"><a href="#Tokenizer-1333"><span class="linenos">1333</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_chars</span><span class="p">(</span><span class="n">delim_size</span><span class="p">)</span> <span class="o">==</span> <span class="n">delimiter</span><span class="p">:</span>
+</span><span id="Tokenizer-1334"><a href="#Tokenizer-1334"><span class="linenos">1334</span></a> <span class="k">if</span> <span class="n">delim_size</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Tokenizer-1335"><a href="#Tokenizer-1335"><span class="linenos">1335</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">delim_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer-1336"><a href="#Tokenizer-1336"><span class="linenos">1336</span></a> <span class="k">break</span>
</span><span id="Tokenizer-1337"><a href="#Tokenizer-1337"><span class="linenos">1337</span></a>
-</span><span id="Tokenizer-1338"><a href="#Tokenizer-1338"><span class="linenos">1338</span></a> <span class="k">def</span> <span class="nf">tokenize_rs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Tokenizer-1339"><a href="#Tokenizer-1339"><span class="linenos">1339</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="Tokenizer-1340"><a href="#Tokenizer-1340"><span class="linenos">1340</span></a> <span class="k">raise</span> <span class="n">SqlglotError</span><span class="p">(</span><span class="s2">&quot;Rust tokenizer is not available&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1341"><a href="#Tokenizer-1341"><span class="linenos">1341</span></a>
-</span><span id="Tokenizer-1342"><a href="#Tokenizer-1342"><span class="linenos">1342</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1343"><a href="#Tokenizer-1343"><span class="linenos">1343</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span><span class="p">)</span>
-</span><span id="Tokenizer-1344"><a href="#Tokenizer-1344"><span class="linenos">1344</span></a> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">:</span>
-</span><span id="Tokenizer-1345"><a href="#Tokenizer-1345"><span class="linenos">1345</span></a> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">_ALL_TOKEN_TYPES</span><span class="p">[</span><span class="n">token</span><span class="o">.</span><span class="n">token_type_index</span><span class="p">]</span>
-</span><span id="Tokenizer-1346"><a href="#Tokenizer-1346"><span class="linenos">1346</span></a> <span class="k">return</span> <span class="n">tokens</span>
-</span><span id="Tokenizer-1347"><a href="#Tokenizer-1347"><span class="linenos">1347</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="Tokenizer-1348"><a href="#Tokenizer-1348"><span class="linenos">1348</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+</span><span id="Tokenizer-1338"><a href="#Tokenizer-1338"><span class="linenos">1338</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1339"><a href="#Tokenizer-1339"><span class="linenos">1339</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">delimiter</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_start</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1340"><a href="#Tokenizer-1340"><span class="linenos">1340</span></a>
+</span><span id="Tokenizer-1341"><a href="#Tokenizer-1341"><span class="linenos">1341</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Tokenizer-1342"><a href="#Tokenizer-1342"><span class="linenos">1342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span>
+</span><span id="Tokenizer-1343"><a href="#Tokenizer-1343"><span class="linenos">1343</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span>
+</span><span id="Tokenizer-1344"><a href="#Tokenizer-1344"><span class="linenos">1344</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ESCAPES</span>
+</span><span id="Tokenizer-1345"><a href="#Tokenizer-1345"><span class="linenos">1345</span></a> <span class="p">):</span>
+</span><span id="Tokenizer-1346"><a href="#Tokenizer-1346"><span class="linenos">1346</span></a> <span class="n">escaped_sequence</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span><span class="p">)</span>
+</span><span id="Tokenizer-1347"><a href="#Tokenizer-1347"><span class="linenos">1347</span></a> <span class="k">if</span> <span class="n">escaped_sequence</span><span class="p">:</span>
+</span><span id="Tokenizer-1348"><a href="#Tokenizer-1348"><span class="linenos">1348</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Tokenizer-1349"><a href="#Tokenizer-1349"><span class="linenos">1349</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">escaped_sequence</span>
+</span><span id="Tokenizer-1350"><a href="#Tokenizer-1350"><span class="linenos">1350</span></a> <span class="k">continue</span>
+</span><span id="Tokenizer-1351"><a href="#Tokenizer-1351"><span class="linenos">1351</span></a>
+</span><span id="Tokenizer-1352"><a href="#Tokenizer-1352"><span class="linenos">1352</span></a> <span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Tokenizer-1353"><a href="#Tokenizer-1353"><span class="linenos">1353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">alnum</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Tokenizer-1354"><a href="#Tokenizer-1354"><span class="linenos">1354</span></a> <span class="n">text</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">current</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Tokenizer-1355"><a href="#Tokenizer-1355"><span class="linenos">1355</span></a>
+</span><span id="Tokenizer-1356"><a href="#Tokenizer-1356"><span class="linenos">1356</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Tokenizer-1357"><a href="#Tokenizer-1357"><span class="linenos">1357</span></a>
+</span><span id="Tokenizer-1358"><a href="#Tokenizer-1358"><span class="linenos">1358</span></a> <span class="k">def</span> <span class="nf">tokenize_rs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Tokenizer-1359"><a href="#Tokenizer-1359"><span class="linenos">1359</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="Tokenizer-1360"><a href="#Tokenizer-1360"><span class="linenos">1360</span></a> <span class="k">raise</span> <span class="n">SqlglotError</span><span class="p">(</span><span class="s2">&quot;Rust tokenizer is not available&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1361"><a href="#Tokenizer-1361"><span class="linenos">1361</span></a>
+</span><span id="Tokenizer-1362"><a href="#Tokenizer-1362"><span class="linenos">1362</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1363"><a href="#Tokenizer-1363"><span class="linenos">1363</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span><span class="p">)</span>
+</span><span id="Tokenizer-1364"><a href="#Tokenizer-1364"><span class="linenos">1364</span></a> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">:</span>
+</span><span id="Tokenizer-1365"><a href="#Tokenizer-1365"><span class="linenos">1365</span></a> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">_ALL_TOKEN_TYPES</span><span class="p">[</span><span class="n">token</span><span class="o">.</span><span class="n">token_type_index</span><span class="p">]</span>
+</span><span id="Tokenizer-1366"><a href="#Tokenizer-1366"><span class="linenos">1366</span></a> <span class="k">return</span> <span class="n">tokens</span>
+</span><span id="Tokenizer-1367"><a href="#Tokenizer-1367"><span class="linenos">1367</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="Tokenizer-1368"><a href="#Tokenizer-1368"><span class="linenos">1368</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
</span></pre></div>
@@ -8069,18 +8113,18 @@
</div>
<a class="headerlink" href="#Tokenizer.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.__init__-898"><a href="#Tokenizer.__init__-898"><span class="linenos">898</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer.__init__-899"><a href="#Tokenizer.__init__-899"><span class="linenos">899</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
-</span><span id="Tokenizer.__init__-900"><a href="#Tokenizer.__init__-900"><span class="linenos">900</span></a>
-</span><span id="Tokenizer.__init__-901"><a href="#Tokenizer.__init__-901"><span class="linenos">901</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="Tokenizer.__init__-902"><a href="#Tokenizer.__init__-902"><span class="linenos">902</span></a>
-</span><span id="Tokenizer.__init__-903"><a href="#Tokenizer.__init__-903"><span class="linenos">903</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="Tokenizer.__init__-904"><a href="#Tokenizer.__init__-904"><span class="linenos">904</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span> <span class="o">=</span> <span class="n">RsTokenizerDialectSettings</span><span class="p">(</span>
-</span><span id="Tokenizer.__init__-905"><a href="#Tokenizer.__init__-905"><span class="linenos">905</span></a> <span class="n">escape_sequences</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="p">,</span>
-</span><span id="Tokenizer.__init__-906"><a href="#Tokenizer.__init__-906"><span class="linenos">906</span></a> <span class="n">identifiers_can_start_with_digit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">,</span>
-</span><span id="Tokenizer.__init__-907"><a href="#Tokenizer.__init__-907"><span class="linenos">907</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.__init__-906"><a href="#Tokenizer.__init__-906"><span class="linenos">906</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer.__init__-907"><a href="#Tokenizer.__init__-907"><span class="linenos">907</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects</span> <span class="kn">import</span> <span class="n">Dialect</span>
</span><span id="Tokenizer.__init__-908"><a href="#Tokenizer.__init__-908"><span class="linenos">908</span></a>
-</span><span id="Tokenizer.__init__-909"><a href="#Tokenizer.__init__-909"><span class="linenos">909</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Tokenizer.__init__-909"><a href="#Tokenizer.__init__-909"><span class="linenos">909</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="Tokenizer.__init__-910"><a href="#Tokenizer.__init__-910"><span class="linenos">910</span></a>
+</span><span id="Tokenizer.__init__-911"><a href="#Tokenizer.__init__-911"><span class="linenos">911</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="Tokenizer.__init__-912"><a href="#Tokenizer.__init__-912"><span class="linenos">912</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span> <span class="o">=</span> <span class="n">RsTokenizerDialectSettings</span><span class="p">(</span>
+</span><span id="Tokenizer.__init__-913"><a href="#Tokenizer.__init__-913"><span class="linenos">913</span></a> <span class="n">escape_sequences</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ESCAPE_SEQUENCES</span><span class="p">,</span>
+</span><span id="Tokenizer.__init__-914"><a href="#Tokenizer.__init__-914"><span class="linenos">914</span></a> <span class="n">identifiers_can_start_with_digit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">IDENTIFIERS_CAN_START_WITH_DIGIT</span><span class="p">,</span>
+</span><span id="Tokenizer.__init__-915"><a href="#Tokenizer.__init__-915"><span class="linenos">915</span></a> <span class="p">)</span>
+</span><span id="Tokenizer.__init__-916"><a href="#Tokenizer.__init__-916"><span class="linenos">916</span></a>
+</span><span id="Tokenizer.__init__-917"><a href="#Tokenizer.__init__-917"><span class="linenos">917</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span></pre></div>
@@ -8232,6 +8276,30 @@
</div>
+ <div id="Tokenizer.HEREDOC_TAG_IS_IDENTIFIER" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEREDOC_TAG_IS_IDENTIFIER</span> =
+<span class="default_value">False</span>
+
+
+ </div>
+ <a class="headerlink" href="#Tokenizer.HEREDOC_TAG_IS_IDENTIFIER"></a>
+
+
+
+ </div>
+ <div id="Tokenizer.HEREDOC_STRING_ALTERNATIVE" class="classattr">
+ <div class="attr variable">
+ <span class="name">HEREDOC_STRING_ALTERNATIVE</span> =
+<span class="default_value">&lt;<a href="#TokenType.VAR">TokenType.VAR</a>: &#39;VAR&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Tokenizer.HEREDOC_STRING_ALTERNATIVE"></a>
+
+
+
+ </div>
<div id="Tokenizer.KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">KEYWORDS</span><span class="annotation">: Dict[str, <a href="#TokenType">TokenType</a>]</span> =
@@ -8262,7 +8330,7 @@
<div class="attr variable">
<span class="name">COMMANDS</span> =
<input id="Tokenizer.COMMANDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{&lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &lt;<a href="#TokenType.FETCH">TokenType.FETCH</a>: &#39;FETCH&#39;&gt;, &lt;<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: &#39;EXECUTE&#39;&gt;, &lt;<a href="#TokenType.SHOW">TokenType.SHOW</a>: &#39;SHOW&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{&lt;<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: &#39;COMMAND&#39;&gt;, &lt;<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: &#39;EXECUTE&#39;&gt;, &lt;<a href="#TokenType.FETCH">TokenType.FETCH</a>: &#39;FETCH&#39;&gt;, &lt;<a href="#TokenType.SHOW">TokenType.SHOW</a>: &#39;SHOW&#39;&gt;}</span>
</div>
@@ -8329,20 +8397,20 @@
</div>
<a class="headerlink" href="#Tokenizer.reset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.reset-911"><a href="#Tokenizer.reset-911"><span class="linenos">911</span></a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer.reset-912"><a href="#Tokenizer.reset-912"><span class="linenos">912</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer.reset-913"><a href="#Tokenizer.reset-913"><span class="linenos">913</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer.reset-914"><a href="#Tokenizer.reset-914"><span class="linenos">914</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer.reset-915"><a href="#Tokenizer.reset-915"><span class="linenos">915</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer.reset-916"><a href="#Tokenizer.reset-916"><span class="linenos">916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer.reset-917"><a href="#Tokenizer.reset-917"><span class="linenos">917</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Tokenizer.reset-918"><a href="#Tokenizer.reset-918"><span class="linenos">918</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer.reset-919"><a href="#Tokenizer.reset-919"><span class="linenos">919</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Tokenizer.reset-920"><a href="#Tokenizer.reset-920"><span class="linenos">920</span></a>
-</span><span id="Tokenizer.reset-921"><a href="#Tokenizer.reset-921"><span class="linenos">921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer.reset-922"><a href="#Tokenizer.reset-922"><span class="linenos">922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer.reset-923"><a href="#Tokenizer.reset-923"><span class="linenos">923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer.reset-924"><a href="#Tokenizer.reset-924"><span class="linenos">924</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.reset-919"><a href="#Tokenizer.reset-919"><span class="linenos">919</span></a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer.reset-920"><a href="#Tokenizer.reset-920"><span class="linenos">920</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer.reset-921"><a href="#Tokenizer.reset-921"><span class="linenos">921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer.reset-922"><a href="#Tokenizer.reset-922"><span class="linenos">922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer.reset-923"><a href="#Tokenizer.reset-923"><span class="linenos">923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_start</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer.reset-924"><a href="#Tokenizer.reset-924"><span class="linenos">924</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer.reset-925"><a href="#Tokenizer.reset-925"><span class="linenos">925</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Tokenizer.reset-926"><a href="#Tokenizer.reset-926"><span class="linenos">926</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer.reset-927"><a href="#Tokenizer.reset-927"><span class="linenos">927</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Tokenizer.reset-928"><a href="#Tokenizer.reset-928"><span class="linenos">928</span></a>
+</span><span id="Tokenizer.reset-929"><a href="#Tokenizer.reset-929"><span class="linenos">929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer.reset-930"><a href="#Tokenizer.reset-930"><span class="linenos">930</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer.reset-931"><a href="#Tokenizer.reset-931"><span class="linenos">931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_peek</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer.reset-932"><a href="#Tokenizer.reset-932"><span class="linenos">932</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_line</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</span></pre></div>
@@ -8360,24 +8428,24 @@
</div>
<a class="headerlink" href="#Tokenizer.tokenize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.tokenize-926"><a href="#Tokenizer.tokenize-926"><span class="linenos">926</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Tokenizer.tokenize-927"><a href="#Tokenizer.tokenize-927"><span class="linenos">927</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a list of tokens corresponding to the SQL string `sql`.&quot;&quot;&quot;</span>
-</span><span id="Tokenizer.tokenize-928"><a href="#Tokenizer.tokenize-928"><span class="linenos">928</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize-929"><a href="#Tokenizer.tokenize-929"><span class="linenos">929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize_rs</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize-930"><a href="#Tokenizer.tokenize-930"><span class="linenos">930</span></a>
-</span><span id="Tokenizer.tokenize-931"><a href="#Tokenizer.tokenize-931"><span class="linenos">931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="Tokenizer.tokenize-932"><a href="#Tokenizer.tokenize-932"><span class="linenos">932</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span>
-</span><span id="Tokenizer.tokenize-933"><a href="#Tokenizer.tokenize-933"><span class="linenos">933</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize-934"><a href="#Tokenizer.tokenize-934"><span class="linenos">934</span></a>
-</span><span id="Tokenizer.tokenize-935"><a href="#Tokenizer.tokenize-935"><span class="linenos">935</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize-936"><a href="#Tokenizer.tokenize-936"><span class="linenos">936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
-</span><span id="Tokenizer.tokenize-937"><a href="#Tokenizer.tokenize-937"><span class="linenos">937</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize-938"><a href="#Tokenizer.tokenize-938"><span class="linenos">938</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize-939"><a href="#Tokenizer.tokenize-939"><span class="linenos">939</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize-940"><a href="#Tokenizer.tokenize-940"><span class="linenos">940</span></a> <span class="n">context</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
-</span><span id="Tokenizer.tokenize-941"><a href="#Tokenizer.tokenize-941"><span class="linenos">941</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.tokenize-934"><a href="#Tokenizer.tokenize-934"><span class="linenos">934</span></a> <span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Tokenizer.tokenize-935"><a href="#Tokenizer.tokenize-935"><span class="linenos">935</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a list of tokens corresponding to the SQL string `sql`.&quot;&quot;&quot;</span>
+</span><span id="Tokenizer.tokenize-936"><a href="#Tokenizer.tokenize-936"><span class="linenos">936</span></a> <span class="k">if</span> <span class="n">USE_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize-937"><a href="#Tokenizer.tokenize-937"><span class="linenos">937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokenize_rs</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
+</span><span id="Tokenizer.tokenize-938"><a href="#Tokenizer.tokenize-938"><span class="linenos">938</span></a>
+</span><span id="Tokenizer.tokenize-939"><a href="#Tokenizer.tokenize-939"><span class="linenos">939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Tokenizer.tokenize-940"><a href="#Tokenizer.tokenize-940"><span class="linenos">940</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span>
+</span><span id="Tokenizer.tokenize-941"><a href="#Tokenizer.tokenize-941"><span class="linenos">941</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
</span><span id="Tokenizer.tokenize-942"><a href="#Tokenizer.tokenize-942"><span class="linenos">942</span></a>
-</span><span id="Tokenizer.tokenize-943"><a href="#Tokenizer.tokenize-943"><span class="linenos">943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
+</span><span id="Tokenizer.tokenize-943"><a href="#Tokenizer.tokenize-943"><span class="linenos">943</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize-944"><a href="#Tokenizer.tokenize-944"><span class="linenos">944</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
+</span><span id="Tokenizer.tokenize-945"><a href="#Tokenizer.tokenize-945"><span class="linenos">945</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize-946"><a href="#Tokenizer.tokenize-946"><span class="linenos">946</span></a> <span class="n">start</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Tokenizer.tokenize-947"><a href="#Tokenizer.tokenize-947"><span class="linenos">947</span></a> <span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="mi">50</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Tokenizer.tokenize-948"><a href="#Tokenizer.tokenize-948"><span class="linenos">948</span></a> <span class="n">context</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
+</span><span id="Tokenizer.tokenize-949"><a href="#Tokenizer.tokenize-949"><span class="linenos">949</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error tokenizing &#39;</span><span class="si">{</span><span class="n">context</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+</span><span id="Tokenizer.tokenize-950"><a href="#Tokenizer.tokenize-950"><span class="linenos">950</span></a>
+</span><span id="Tokenizer.tokenize-951"><a href="#Tokenizer.tokenize-951"><span class="linenos">951</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
</span></pre></div>
@@ -8397,11 +8465,11 @@
</div>
<a class="headerlink" href="#Tokenizer.peek"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.peek-1029"><a href="#Tokenizer.peek-1029"><span class="linenos">1029</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer.peek-1030"><a href="#Tokenizer.peek-1030"><span class="linenos">1030</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
-</span><span id="Tokenizer.peek-1031"><a href="#Tokenizer.peek-1031"><span class="linenos">1031</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
-</span><span id="Tokenizer.peek-1032"><a href="#Tokenizer.peek-1032"><span class="linenos">1032</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
-</span><span id="Tokenizer.peek-1033"><a href="#Tokenizer.peek-1033"><span class="linenos">1033</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.peek-1037"><a href="#Tokenizer.peek-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer.peek-1038"><a href="#Tokenizer.peek-1038"><span class="linenos">1038</span></a> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span> <span class="o">+</span> <span class="n">i</span>
+</span><span id="Tokenizer.peek-1039"><a href="#Tokenizer.peek-1039"><span class="linenos">1039</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
+</span><span id="Tokenizer.peek-1040"><a href="#Tokenizer.peek-1040"><span class="linenos">1040</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
+</span><span id="Tokenizer.peek-1041"><a href="#Tokenizer.peek-1041"><span class="linenos">1041</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -8419,17 +8487,17 @@
</div>
<a class="headerlink" href="#Tokenizer.tokenize_rs"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.tokenize_rs-1338"><a href="#Tokenizer.tokenize_rs-1338"><span class="linenos">1338</span></a> <span class="k">def</span> <span class="nf">tokenize_rs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Tokenizer.tokenize_rs-1339"><a href="#Tokenizer.tokenize_rs-1339"><span class="linenos">1339</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize_rs-1340"><a href="#Tokenizer.tokenize_rs-1340"><span class="linenos">1340</span></a> <span class="k">raise</span> <span class="n">SqlglotError</span><span class="p">(</span><span class="s2">&quot;Rust tokenizer is not available&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize_rs-1341"><a href="#Tokenizer.tokenize_rs-1341"><span class="linenos">1341</span></a>
-</span><span id="Tokenizer.tokenize_rs-1342"><a href="#Tokenizer.tokenize_rs-1342"><span class="linenos">1342</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize_rs-1343"><a href="#Tokenizer.tokenize_rs-1343"><span class="linenos">1343</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span><span class="p">)</span>
-</span><span id="Tokenizer.tokenize_rs-1344"><a href="#Tokenizer.tokenize_rs-1344"><span class="linenos">1344</span></a> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize_rs-1345"><a href="#Tokenizer.tokenize_rs-1345"><span class="linenos">1345</span></a> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">_ALL_TOKEN_TYPES</span><span class="p">[</span><span class="n">token</span><span class="o">.</span><span class="n">token_type_index</span><span class="p">]</span>
-</span><span id="Tokenizer.tokenize_rs-1346"><a href="#Tokenizer.tokenize_rs-1346"><span class="linenos">1346</span></a> <span class="k">return</span> <span class="n">tokens</span>
-</span><span id="Tokenizer.tokenize_rs-1347"><a href="#Tokenizer.tokenize_rs-1347"><span class="linenos">1347</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize_rs-1348"><a href="#Tokenizer.tokenize_rs-1348"><span class="linenos">1348</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.tokenize_rs-1358"><a href="#Tokenizer.tokenize_rs-1358"><span class="linenos">1358</span></a> <span class="k">def</span> <span class="nf">tokenize_rs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Tokenizer.tokenize_rs-1359"><a href="#Tokenizer.tokenize_rs-1359"><span class="linenos">1359</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize_rs-1360"><a href="#Tokenizer.tokenize_rs-1360"><span class="linenos">1360</span></a> <span class="k">raise</span> <span class="n">SqlglotError</span><span class="p">(</span><span class="s2">&quot;Rust tokenizer is not available&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer.tokenize_rs-1361"><a href="#Tokenizer.tokenize_rs-1361"><span class="linenos">1361</span></a>
+</span><span id="Tokenizer.tokenize_rs-1362"><a href="#Tokenizer.tokenize_rs-1362"><span class="linenos">1362</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize_rs-1363"><a href="#Tokenizer.tokenize_rs-1363"><span class="linenos">1363</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_RS_TOKENIZER</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rs_dialect_settings</span><span class="p">)</span>
+</span><span id="Tokenizer.tokenize_rs-1364"><a href="#Tokenizer.tokenize_rs-1364"><span class="linenos">1364</span></a> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize_rs-1365"><a href="#Tokenizer.tokenize_rs-1365"><span class="linenos">1365</span></a> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">_ALL_TOKEN_TYPES</span><span class="p">[</span><span class="n">token</span><span class="o">.</span><span class="n">token_type_index</span><span class="p">]</span>
+</span><span id="Tokenizer.tokenize_rs-1366"><a href="#Tokenizer.tokenize_rs-1366"><span class="linenos">1366</span></a> <span class="k">return</span> <span class="n">tokens</span>
+</span><span id="Tokenizer.tokenize_rs-1367"><a href="#Tokenizer.tokenize_rs-1367"><span class="linenos">1367</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize_rs-1368"><a href="#Tokenizer.tokenize_rs-1368"><span class="linenos">1368</span></a> <span class="k">raise</span> <span class="n">TokenError</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
</span></pre></div>